实例介绍
gRPC是一个现代化的开源高性能远程过程调用(RPC)框架,可以在任何地方运行。它让客户端和服务器应用程序能够透明地通信,并简化了连接系统的构建。
对于.NET Core 3.0或更高版本,gRPC提供的功能包括:
- Grpc.AspNetCore - 一个用于托管gRPC服务的ASP.NET Core框架。gRPC在ASP.NET Core上的集成包括日志记录、依赖注入(DI)、身份验证和授权等标准ASP.NET Core功能。
- Grpc.Net.Client - 一个基于熟悉的HttpClient构建的.NET Core gRPC客户端。该客户端使用.NET Core中的新HTTP/2功能。
- Grpc.Net.ClientFactory - gRPC客户端与HttpClientFactory的集成。客户端工厂允许gRPC客户端被集中配置并通过DI注入到您的应用程序中。
从2021年5月开始,gRPC for .NET成为C#上推荐的gRPC实现方式。原有的C#实现(作为Grpc.Core nuget包分发)现已进入维护模式,并将在未来被弃用。
开始使用gRPC for .NET的最佳地点是.NET Core 3.0或更高版本附带的gRPC模板。使用该模板可以创建gRPC服务网站和客户端。
官方版本的gRPC发布到NuGet.org,这是大多数开发者获取gRPC包的推荐地点。对于使用.NET Core的夜间版本的用户,建议使用gRPC的夜间包,以避免版本间的不兼容问题。
要开发ASP.NET Core的gRPC,首先需要安装.NET Core SDK,然后设置开发环境以使用已安装的.NET Core SDK。此外,还需要通过命令行构建项目和运行测试。
【实例截图】
【核心代码】
文件清单
└── grpc-dotnet-6d1ea08ce3b4a22f8600a4e6bd2adbdaef652c82
├── AUTHORS
├── CODE-OF-CONDUCT.md
├── CONTRIBUTING.md
├── Directory.Build.props
├── Directory.Build.targets
├── Directory.Packages.props
├── GOVERNANCE.md
├── Grpc.DotNet.ruleset
├── Grpc.DotNet.sln
├── LICENSE
├── MAINTAINERS.md
├── README.md
├── TROUBLESHOOTING.md
├── activate.ps1
├── activate.sh
├── build
│ ├── expand_dev_version.sh
│ ├── get-dotnet.ps1
│ ├── get-dotnet.sh
│ ├── update_grpc_core_api_version.sh
│ └── version.props
├── build_and_test.sh
├── doc
│ ├── images
│ │ └── packages.png
│ ├── implementation_comparison.md
│ ├── packages.md
│ ├── planning.md
│ ├── release_process.md
│ └── versioning.md
├── docfx
│ ├── README.md
│ ├── docfx.json
│ ├── generate_reference_docs.sh
│ └── toc.yml
├── docker-compose.yml
├── examples
│ ├── Aggregator
│ │ ├── Aggregator.sln
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Proto
│ │ │ ├── aggregate.proto
│ │ │ ├── count.proto
│ │ │ └── greet.proto
│ │ └── Server
│ │ ├── IncrementingCounter.cs
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ ├── AggregatorService.cs
│ │ │ ├── CounterService.cs
│ │ │ └── GreeterService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Blazor
│ │ ├── Blazor.sln
│ │ ├── Client
│ │ │ ├── App.razor
│ │ │ ├── Client.csproj
│ │ │ ├── Messages
│ │ │ │ └── WeatherForecast.cs
│ │ │ ├── Pages
│ │ │ │ ├── Counter.razor
│ │ │ │ ├── FetchData.razor
│ │ │ │ └── Index.razor
│ │ │ ├── Program.cs
│ │ │ ├── Shared
│ │ │ │ ├── MainLayout.razor
│ │ │ │ ├── NavMenu.razor
│ │ │ │ └── SurveyPrompt.razor
│ │ │ ├── _Imports.razor
│ │ │ └── wwwroot
│ │ │ ├── appsettings.json
│ │ │ ├── css
│ │ │ │ ├── bootstrap
│ │ │ │ │ ├── bootstrap.min.css
│ │ │ │ │ └── bootstrap.min.css.map
│ │ │ │ ├── open-iconic
│ │ │ │ │ ├── FONT-LICENSE
│ │ │ │ │ ├── ICON-LICENSE
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── font
│ │ │ │ │ ├── css
│ │ │ │ │ │ └── open-iconic-bootstrap.min.css
│ │ │ │ │ └── fonts
│ │ │ │ │ ├── open-iconic.eot
│ │ │ │ │ ├── open-iconic.otf
│ │ │ │ │ ├── open-iconic.svg
│ │ │ │ │ ├── open-iconic.ttf
│ │ │ │ │ └── open-iconic.woff
│ │ │ │ └── site.css
│ │ │ ├── grpc-logo.png
│ │ │ └── index.html
│ │ ├── Proto
│ │ │ ├── count.proto
│ │ │ └── weather.proto
│ │ └── Server
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ ├── CounterService.cs
│ │ │ └── WeatherService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Browser
│ │ ├── Browser.sln
│ │ ├── Proto
│ │ │ └── greet.proto
│ │ └── Server
│ │ ├── Program.cs
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── GreeterService.cs
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.json
│ │ └── wwwroot
│ │ ├── Scripts
│ │ │ ├── README.md
│ │ │ ├── greet_grpc_web_pb.js
│ │ │ ├── greet_pb.js
│ │ │ └── index.js
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── package-lock.json
│ │ └── package.json
│ ├── Certifier
│ │ ├── Certifier.sln
│ │ ├── Client
│ │ │ ├── Certs
│ │ │ │ └── client.pfx
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Proto
│ │ │ └── certify.proto
│ │ └── Server
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── CertifierService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Channeler
│ │ ├── Channeler.sln
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Proto
│ │ │ └── data_channel.proto
│ │ └── Server
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── DataChannelerService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Coder
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Coder.sln
│ │ ├── Server
│ │ │ ├── Program.cs
│ │ │ ├── Properties
│ │ │ │ └── launchSettings.json
│ │ │ ├── Server.csproj
│ │ │ ├── Services
│ │ │ │ └── GreeterService.cs
│ │ │ ├── appsettings.Development.json
│ │ │ └── appsettings.json
│ │ └── Shared
│ │ ├── HelloReply.cs
│ │ ├── HelloRequest.cs
│ │ ├── IGreeterService.cs
│ │ └── Shared.csproj
│ ├── Compressor
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Compressor.sln
│ │ ├── Proto
│ │ │ └── greet.proto
│ │ └── Server
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── GreeterService.cs
│ │ ├── Startup.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Container
│ │ ├── Backend
│ │ │ ├── Backend.csproj
│ │ │ ├── Dockerfile
│ │ │ ├── Program.cs
│ │ │ ├── Services
│ │ │ │ └── WeatherService.cs
│ │ │ ├── appsettings.Development.json
│ │ │ └── appsettings.json
│ │ ├── Container.sln
│ │ ├── Frontend
│ │ │ ├── App.razor
│ │ │ ├── Balancer
│ │ │ │ ├── BalancerConfiguration.cs
│ │ │ │ ├── ConfigurableResolverFactory.cs
│ │ │ │ ├── ReportingChannelControlHelper.cs
│ │ │ │ ├── ReportingLoadBalancerFactory.cs
│ │ │ │ ├── ReportingSetup.cs
│ │ │ │ └── SubchannelReporter.cs
│ │ │ ├── Dockerfile
│ │ │ ├── Frontend.csproj
│ │ │ ├── Messages
│ │ │ │ └── WeatherForecast.cs
│ │ │ ├── Pages
│ │ │ │ ├── Error.cshtml
│ │ │ │ ├── Error.cshtml.cs
│ │ │ │ ├── FetchData.razor
│ │ │ │ ├── Index.razor
│ │ │ │ └── _Host.cshtml
│ │ │ ├── Program.cs
│ │ │ ├── Shared
│ │ │ │ ├── BalancerDialog.razor
│ │ │ │ ├── MainLayout.razor
│ │ │ │ ├── MainLayout.razor.css
│ │ │ │ ├── NavMenu.razor
│ │ │ │ ├── NavMenu.razor.css
│ │ │ │ └── SurveyPrompt.razor
│ │ │ ├── _Imports.razor
│ │ │ ├── appsettings.Development.json
│ │ │ ├── appsettings.json
│ │ │ └── wwwroot
│ │ │ ├── css
│ │ │ │ ├── bootstrap
│ │ │ │ │ ├── bootstrap.min.css
│ │ │ │ │ └── bootstrap.min.css.map
│ │ │ │ ├── open-iconic
│ │ │ │ │ ├── FONT-LICENSE
│ │ │ │ │ ├── ICON-LICENSE
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── font
│ │ │ │ │ ├── css
│ │ │ │ │ │ └── open-iconic-bootstrap.min.css
│ │ │ │ │ └── fonts
│ │ │ │ │ ├── open-iconic.eot
│ │ │ │ │ ├── open-iconic.otf
│ │ │ │ │ ├── open-iconic.svg
│ │ │ │ │ ├── open-iconic.ttf
│ │ │ │ │ └── open-iconic.woff
│ │ │ │ └── site.css
│ │ │ ├── favicon.ico
│ │ │ └── grpc-logo.png
│ │ ├── Kubernetes
│ │ │ ├── deploy-backend.yml
│ │ │ └── deploy-frontend.yml
│ │ ├── Proto
│ │ │ └── weather.proto
│ │ ├── deploy.ps1
│ │ └── docker-compose.yml
│ ├── Counter
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Counter.sln
│ │ ├── Proto
│ │ │ └── count.proto
│ │ └── Server
│ │ ├── IncrementingCounter.cs
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── CounterService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Downloader
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Downloader.sln
│ │ ├── Proto
│ │ │ └── download.proto
│ │ └── Server
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── DownloaderService.cs
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.json
│ │ ├── pancakes.jpg
│ │ └── pancakes4.png
│ ├── Error
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Error.sln
│ │ ├── Proto
│ │ │ └── greet.proto
│ │ └── Server
│ │ ├── GrpcValidation.cs
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── GreeterService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Frameworker
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Frameworker.sln
│ │ ├── Proto
│ │ │ └── greet.proto
│ │ └── Server
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── GreeterService.cs
│ │ ├── Startup.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Greeter
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Greeter.sln
│ │ ├── Proto
│ │ │ └── greet.proto
│ │ └── Server
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── GreeterService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Interceptor
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ ├── ClientLoggerInterceptor.cs
│ │ │ └── Program.cs
│ │ ├── Interceptor.sln
│ │ ├── Proto
│ │ │ └── greet.proto
│ │ └── Server
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── ServerLoggerInterceptor.cs
│ │ ├── Services
│ │ │ └── GreeterService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Liber
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Common
│ │ │ ├── Common.csproj
│ │ │ └── Name.cs
│ │ ├── Liber.sln
│ │ ├── Proto
│ │ │ ├── common.proto
│ │ │ └── greet.proto
│ │ └── Server
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── GreeterService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Locator
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Locator.sln
│ │ ├── Proto
│ │ │ ├── external.proto
│ │ │ └── internal.proto
│ │ └── Server
│ │ ├── Program.cs
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ ├── ExternalService.cs
│ │ │ └── InternalService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Mailer
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Mailer.sln
│ │ ├── Proto
│ │ │ └── mail.proto
│ │ └── Server
│ │ ├── MailQueue.cs
│ │ ├── MailQueueRepository.cs
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── MailerService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Progressor
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ ├── HistoryResponse.cs
│ │ │ ├── Program.cs
│ │ │ └── ResponseProgress
│ │ │ ├── IProgressMessage.cs
│ │ │ └── ResponseProgress.cs
│ │ ├── Progressor.sln
│ │ ├── Proto
│ │ │ └── progress.proto
│ │ └── Server
│ │ ├── Monarchs-of-England.txt
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── ProgressorService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── README.md
│ ├── Racer
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Proto
│ │ │ └── race.proto
│ │ ├── Racer.sln
│ │ └── Server
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── RacerService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Reflector
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Proto
│ │ │ └── greet.proto
│ │ ├── Reflector.sln
│ │ └── Server
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── GreeterService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Retrier
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Proto
│ │ │ └── retry.proto
│ │ ├── Retrier.sln
│ │ └── Server
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── RetrierService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Spar
│ │ ├── Proto
│ │ │ └── greet.proto
│ │ ├── Server
│ │ │ ├── ClientApp
│ │ │ │ ├── README.md
│ │ │ │ ├── package-lock.json
│ │ │ │ ├── package.json
│ │ │ │ ├── src
│ │ │ │ │ ├── App.vue
│ │ │ │ │ ├── custom.d.ts
│ │ │ │ │ ├── generated
│ │ │ │ │ │ ├── greet_grpc_web_pb.js
│ │ │ │ │ │ └── greet_pb.js
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── index.ts
│ │ │ │ └── tsconfig.json
│ │ │ ├── Program.cs
│ │ │ ├── Properties
│ │ │ │ └── launchSettings.json
│ │ │ ├── Server.csproj
│ │ │ ├── Services
│ │ │ │ └── GreeterService.cs
│ │ │ ├── appsettings.Development.json
│ │ │ ├── appsettings.json
│ │ │ └── wwwroot
│ │ │ └── favicon.ico
│ │ └── Spar.sln
│ ├── Tester
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ ├── GreetRepository.cs
│ │ │ ├── IGreetRepository.cs
│ │ │ ├── Program.cs
│ │ │ ├── Worker.cs
│ │ │ ├── appsettings.Development.json
│ │ │ └── appsettings.json
│ │ ├── Common
│ │ │ └── Common.csproj
│ │ ├── Proto
│ │ │ └── test.proto
│ │ ├── Server
│ │ │ ├── Program.cs
│ │ │ ├── Properties
│ │ │ │ └── launchSettings.json
│ │ │ ├── Server.csproj
│ │ │ ├── Services
│ │ │ │ ├── Greeter.cs
│ │ │ │ ├── IGreeter.cs
│ │ │ │ └── TesterService.cs
│ │ │ ├── Startup.cs
│ │ │ ├── appsettings.Development.json
│ │ │ └── appsettings.json
│ │ ├── Tester.sln
│ │ └── Tests
│ │ ├── Client
│ │ │ ├── Helpers
│ │ │ │ └── CallHelpers.cs
│ │ │ └── WorkerTests.cs
│ │ ├── Server
│ │ │ ├── IntegrationTests
│ │ │ │ ├── GreeterServiceTests.cs
│ │ │ │ ├── Helpers
│ │ │ │ │ ├── ForwardingLoggerProvider.cs
│ │ │ │ │ ├── GrpcTestContext.cs
│ │ │ │ │ └── GrpcTestFixture.cs
│ │ │ │ ├── IntegrationTestBase.cs
│ │ │ │ └── MockedGreeterServiceTests.cs
│ │ │ └── UnitTests
│ │ │ ├── GreeterServiceTests.cs
│ │ │ └── Helpers
│ │ │ ├── TestAsyncStreamReader.cs
│ │ │ ├── TestServerCallContext.cs
│ │ │ └── TestServerStreamWriter.cs
│ │ └── Tests.csproj
│ ├── Ticketer
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Proto
│ │ │ └── ticket.proto
│ │ ├── Server
│ │ │ ├── Program.cs
│ │ │ ├── Properties
│ │ │ │ └── launchSettings.json
│ │ │ ├── Server.csproj
│ │ │ ├── Services
│ │ │ │ └── TicketerService.cs
│ │ │ ├── TicketRepository.cs
│ │ │ ├── appsettings.Development.json
│ │ │ └── appsettings.json
│ │ └── Ticketer.sln
│ ├── Transcoder
│ │ ├── Proto
│ │ │ │ └── api
│ │ │ │ ├── annotations.proto
│ │ │ │ └── http.proto
│ │ │ └── greet.proto
│ │ ├── Server
│ │ │ ├── Program.cs
│ │ │ ├── Server.csproj
│ │ │ ├── Services
│ │ │ │ └── GreeterService.cs
│ │ │ ├── appsettings.Development.json
│ │ │ ├── appsettings.json
│ │ │ └── wwwroot
│ │ │ ├── favicon.ico
│ │ │ ├── images
│ │ │ │ └── grpc-rest-logo.png
│ │ │ ├── index.html
│ │ │ └── lib
│ │ │ └── bootstrap
│ │ │ └── dist
│ │ │ ├── bootstrap.bundle.min.js
│ │ │ └── bootstrap.min.css
│ │ └── Transcoder.sln
│ ├── Transporter
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ ├── Program.cs
│ │ │ └── UnixDomainSocketConnectionFactory.cs
│ │ ├── Proto
│ │ │ └── greet.proto
│ │ ├── Server
│ │ │ ├── Program.cs
│ │ │ ├── Server.csproj
│ │ │ ├── Services
│ │ │ │ └── GreeterService.cs
│ │ │ ├── appsettings.Development.json
│ │ │ └── appsettings.json
│ │ └── Transporter.sln
│ ├── Uploader
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ ├── Program.cs
│ │ │ └── pancakes.jpg
│ │ ├── Proto
│ │ │ └── upload.proto
│ │ ├── Server
│ │ │ ├── Program.cs
│ │ │ ├── Properties
│ │ │ │ └── launchSettings.json
│ │ │ ├── Server.csproj
│ │ │ ├── Services
│ │ │ │ └── UploaderService.cs
│ │ │ ├── appsettings.Development.json
│ │ │ └── appsettings.json
│ │ └── Uploader.sln
│ ├── Vigor
│ │ ├── Client
│ │ │ ├── Client.csproj
│ │ │ └── Program.cs
│ │ ├── Server
│ │ │ ├── Program.cs
│ │ │ ├── Properties
│ │ │ │ └── launchSettings.json
│ │ │ ├── Server.csproj
│ │ │ ├── appsettings.Development.json
│ │ │ └── appsettings.json
│ │ └── Vigor.sln
│ └── Worker
│ ├── Client
│ │ ├── Client.csproj
│ │ ├── Program.cs
│ │ ├── Worker.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ ├── Proto
│ │ └── count.proto
│ ├── Server
│ │ ├── IncrementingCounter.cs
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── launchSettings.json
│ │ ├── Server.csproj
│ │ ├── Services
│ │ │ └── CounterService.cs
│ │ ├── appsettings.Development.json
│ │ └── appsettings.json
│ └── Worker.sln
├── global.json
├── grpcweb_interoptests.sh
├── keys
│ ├── Grpc.public.snk
│ ├── Grpc.snk
│ └── README.md
├── kokoro
│ ├── README.md
│ ├── build_nuget.cfg
│ ├── build_nuget.sh
│ ├── interop.cfg
│ ├── interop.sh
│ ├── linux.cfg
│ ├── publish_nuget.cfg
│ └── publish_nuget.sh
├── microsoft-support.md
├── nuget.config
├── packageIcon.png
├── perf
│ ├── Grpc.AspNetCore.Microbenchmarks
│ │ ├── Client
│ │ │ ├── CompressedUnaryClientBenchmark.cs
│ │ │ ├── UnaryClientBenchmark.cs
│ │ │ └── UnaryClientBenchmarkBase.cs
│ │ ├── DefaultCoreConfig.cs
│ │ ├── DefaultCoreConfigAttribute.cs
│ │ ├── Grpc.AspNetCore.Microbenchmarks.csproj
│ │ ├── Internal
│ │ │ ├── ForceAsyncAwaiter.cs
│ │ │ ├── MessageHelpers.cs
│ │ │ ├── TestCompressionProvider.cs
│ │ │ ├── TestGrpcInterceptorActivator.cs
│ │ │ ├── TestGrpcServiceActivator.cs
│ │ │ ├── TestHttpResposneTrailersFeature.cs
│ │ │ ├── TestPipeReader.cs
│ │ │ ├── TestPipeWriter.cs
│ │ │ ├── TestService.cs
│ │ │ └── UnaryAwaitInterceptor.cs
│ │ ├── Program.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ ├── Proto
│ │ │ ├── chat.proto
│ │ │ └── greet.proto
│ │ └── Server
│ │ ├── CompressedUnaryServerCallHandlerBenchmark.cs
│ │ ├── DeadlineUnaryServerCallHandlerBenchmark.cs
│ │ ├── FailureStatusUnaryServerCallHandlerBenchmark.cs
│ │ ├── InterceptedUnaryServerCallHandlerBenchmark.cs
│ │ ├── PipelinesUnaryServerCallHandlerBenchmark.cs
│ │ ├── UnaryServerCallHandlerBenchmark.cs
│ │ └── UnaryServerCallHandlerBenchmarkBase.cs
│ └── benchmarkapps
│ ├── GrpcAspNetCoreServer
│ │ ├── Controllers
│ │ │ └── BenchmarkController.cs
│ │ ├── GrpcAspNetCoreServer.csproj
│ │ ├── Program.cs
│ │ ├── RunGrpcServer.ps1
│ │ ├── Startup.cs
│ │ ├── grpc-aspnetcore-server.yml
│ │ └── hosting.json
│ ├── GrpcClient
│ │ ├── Certs
│ │ │ ├── README.md
│ │ │ ├── ca.crt
│ │ │ ├── ca.key
│ │ │ ├── client.crt
│ │ │ ├── client.key
│ │ │ ├── server.crt
│ │ │ └── server.key
│ │ ├── ClientOptions.cs
│ │ ├── GrpcClient.csproj
│ │ ├── GrpcClientType.cs
│ │ ├── NamedPipeConnectionFactory.cs
│ │ ├── Program.cs
│ │ ├── RunGrpcClient.ps1
│ │ ├── UnixDomainSocketConnectionFactory.cs
│ │ └── grpc-client.yml
│ ├── GrpcCoreServer
│ │ ├── GrpcCoreServer.csproj
│ │ ├── Program.cs
│ │ ├── grpc-core-server.yml
│ │ └── hosting.json
│ ├── QpsWorker
│ │ ├── Infrastructure
│ │ │ ├── AtomicCounter.cs
│ │ │ ├── ClientRunner.cs
│ │ │ ├── ConfigHelpers.cs
│ │ │ ├── GenericService.cs
│ │ │ ├── GenericServiceMethodProvider.cs
│ │ │ ├── Histogram.cs
│ │ │ ├── InterarrivalTimers.cs
│ │ │ ├── ServerRunner.cs
│ │ │ └── TimeStats.cs
│ │ ├── Program.cs
│ │ ├── Protos
│ │ │ ├── README.md
│ │ │ ├── core
│ │ │ │ └── stats.proto
│ │ │ └── testing
│ │ │ ├── benchmark_service.proto
│ │ │ ├── control.proto
│ │ │ ├── messages.proto
│ │ │ ├── payloads.proto
│ │ │ ├── stats.proto
│ │ │ └── worker_service.proto
│ │ ├── QpsWorker.csproj
│ │ ├── Services
│ │ │ └── WorkerServiceImpl.cs
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.json
│ │ ├── worker-start-client.ps1
│ │ └── worker-start-server.ps1
│ ├── README.md
│ └── Shared
│ ├── BenchmarkConfigurationHelpers.cs
│ ├── BenchmarkServiceImpl.cs
│ ├── Certs
│ │ ├── README.md
│ │ ├── ca.pem
│ │ ├── client.pfx
│ │ ├── server1.key
│ │ ├── server1.pem
│ │ └── server1.pfx
│ ├── ServiceProvidersMiddleware.cs
│ ├── benchmark_service.proto
│ └── messages.proto
├── src
│ ├── Grpc.AspNetCore
│ │ ├── Grpc.AspNetCore.csproj
│ │ ├── README.md
│ │ └── lib
│ │ ├── net6.0
│ │ │ └── _._
│ │ ├── net7.0
│ │ │ └── _._
│ │ └── net8.0
│ │ └── _._
│ ├── Grpc.AspNetCore.HealthChecks
│ │ ├── Grpc.AspNetCore.HealthChecks.csproj
│ │ ├── GrpcHealthChecksEndpointRouteBuilderExtensions.cs
│ │ ├── GrpcHealthChecksOptions.cs
│ │ ├── GrpcHealthChecksPublisher.cs
│ │ ├── GrpcHealthChecksServiceExtensions.cs
│ │ ├── HealthCheckMapContext.cs
│ │ ├── HealthResult.cs
│ │ ├── Internal
│ │ │ ├── HealthChecksStatusHelpers.cs
│ │ │ └── HealthServiceIntegration.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ ├── README.md
│ │ ├── ServiceMapping.cs
│ │ └── ServiceMappingCollection.cs
│ ├── Grpc.AspNetCore.Server
│ │ ├── Grpc.AspNetCore.Server.csproj
│ │ ├── GrpcActivatorHandle.cs
│ │ ├── GrpcEndpointRouteBuilderExtensions.cs
│ │ ├── GrpcMethodMetadata.cs
│ │ ├── GrpcServiceEndpointConventionBuilder.cs
│ │ ├── GrpcServiceExtensions.cs
│ │ ├── GrpcServiceOptions.cs
│ │ ├── IGrpcInterceptorActivator.T.cs
│ │ ├── IGrpcInterceptorActivator.cs
│ │ ├── IGrpcServerBuilder.cs
│ │ ├── IGrpcServiceActivator.cs
│ │ ├── IServerCallContextFeature.cs
│ │ ├── InterceptorCollection.cs
│ │ ├── InterceptorRegistration.cs
│ │ ├── Internal
│ │ │ ├── CallHandlers
│ │ │ │ ├── ClientStreamingServerCallHandler.cs
│ │ │ │ ├── DuplexStreamingServerCallHandler.cs
│ │ │ │ ├── ServerCallHandlerBase.cs
│ │ │ │ ├── ServerStreamingServerCallHandler.cs
│ │ │ │ └── UnaryServerCallHandler.cs
│ │ │ ├── DefaultGrpcInterceptorActivator.cs
│ │ │ ├── DefaultGrpcServiceActivator.cs
│ │ │ ├── ErrorMessageHelper.cs
│ │ │ ├── GrpcEventSource.cs
│ │ │ ├── GrpcMarkerService.cs
│ │ │ ├── GrpcProtocolConstants.cs
│ │ │ ├── GrpcProtocolHelpers.cs
│ │ │ ├── GrpcServerBuilder.cs
│ │ │ ├── GrpcServerConstants.cs
│ │ │ ├── GrpcServerLog.cs
│ │ │ ├── GrpcServiceOptionsSetup.cs
│ │ │ ├── HttpContextSerializationContext.cs
│ │ │ ├── HttpContextServerCallContext.cs
│ │ │ ├── HttpContextStreamReader.cs
│ │ │ ├── HttpContextStreamWriter.cs
│ │ │ ├── HttpResponseExtensions.cs
│ │ │ ├── ISystemClock.cs
│ │ │ ├── PercentEncodingHelpers.cs
│ │ │ ├── PipeExtensions.cs
│ │ │ ├── ReadOnlySequenceStream.cs
│ │ │ ├── ServerCallDeadlineManager.cs
│ │ │ ├── ServerCallHandlerFactory.cs
│ │ │ ├── StatusCodeExtensions.cs
│ │ │ ├── SystemClock.cs
│ │ │ ├── ValueTaskExtensions.cs
│ │ │ └── X509CertificateHelpers.cs
│ │ ├── Model
│ │ │ ├── IServiceMethodProvider.cs
│ │ │ ├── Internal
│ │ │ │ ├── BinderServiceModelProvider.cs
│ │ │ │ ├── GrpcUnimplementedConstraint.cs
│ │ │ │ ├── MethodModel.cs
│ │ │ │ ├── ProviderServiceBinder.cs
│ │ │ │ ├── ServiceMethodsRegistry.cs
│ │ │ │ └── ServiceRouteBuilder.cs
│ │ │ ├── ServerMethods.cs
│ │ │ └── ServiceMethodProviderContext.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ ├── README.md
│ │ └── ServerCallContextExtensions.cs
│ ├── Grpc.AspNetCore.Server.ClientFactory
│ │ ├── ContextPropagationInterceptor.cs
│ │ ├── Grpc.AspNetCore.Server.ClientFactory.csproj
│ │ ├── GrpcContextPropagationOptions.cs
│ │ ├── GrpcServerHttpClientBuilderExtensions.cs
│ │ └── Properties
│ │ └── AssemblyInfo.cs
│ ├── Grpc.AspNetCore.Server.Reflection
│ │ ├── Grpc.AspNetCore.Server.Reflection.csproj
│ │ ├── GrpcReflectionEndpointRouteBuilderExtensions.cs
│ │ ├── GrpcReflectionMarkerService.cs
│ │ ├── GrpcReflectionServiceExtensions.cs
│ │ └── Properties
│ │ └── AssemblyInfo.cs
│ ├── Grpc.AspNetCore.Web
│ │ ├── DisableGrpcWebAttribute.cs
│ │ ├── EnableGrpcWebAttribute.cs
│ │ ├── Grpc.AspNetCore.Web.csproj
│ │ ├── GrpcWebApplicationBuilderExtensions.cs
│ │ ├── GrpcWebEndpointConventionBuilderExtensions.cs
│ │ ├── GrpcWebOptions.cs
│ │ ├── IGrpcWebEnabledMetadata.cs
│ │ ├── Internal
│ │ │ ├── Base64PipeReader.cs
│ │ │ ├── Base64PipeWriter.cs
│ │ │ ├── GrpcWebFeature.cs
│ │ │ ├── GrpcWebMiddleware.cs
│ │ │ ├── GrpcWebProtocolConstants.cs
│ │ │ ├── GrpcWebProtocolHelpers.cs
│ │ │ ├── HttpCharacters.cs
│ │ │ ├── MemorySegment.cs
│ │ │ └── ServerGrpcWebMode.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ └── README.md
│ ├── Grpc.Auth
│ │ ├── GoogleAuthInterceptors.cs
│ │ ├── GoogleGrpcCredentials.cs
│ │ ├── Grpc.Auth.csproj
│ │ └── README.md
│ ├── Grpc.Core.Api
│ │ ├── AsyncAuthInterceptor.cs
│ │ ├── AsyncCallState.cs
│ │ ├── AsyncClientStreamingCall.cs
│ │ ├── AsyncDuplexStreamingCall.cs
│ │ ├── AsyncServerStreamingCall.cs
│ │ ├── AsyncStreamReaderExtensions.cs
│ │ ├── AsyncUnaryCall.cs
│ │ ├── AuthContext.cs
│ │ ├── AuthProperty.cs
│ │ ├── BindServiceMethodAttribute.cs
│ │ ├── CallCredentials.cs
│ │ ├── CallCredentialsConfiguratorBase.cs
│ │ ├── CallFlags.cs
│ │ ├── CallInvoker.cs
│ │ ├── CallOptions.cs
│ │ ├── ChannelBase.cs
│ │ ├── ChannelCredentials.cs
│ │ ├── ChannelCredentialsConfiguratorBase.cs
│ │ ├── ClientBase.cs
│ │ ├── ContextPropagationOptions.cs
│ │ ├── ContextPropagationToken.cs
│ │ ├── DeserializationContext.cs
│ │ ├── Grpc.Core.Api.csproj
│ │ ├── IAsyncStreamReader.cs
│ │ ├── IAsyncStreamWriter.cs
│ │ ├── IClientStreamWriter.cs
│ │ ├── IServerStreamWriter.cs
│ │ ├── Interceptors
│ │ │ ├── CallInvokerExtensions.cs
│ │ │ ├── ChannelExtensions.cs
│ │ │ ├── ClientInterceptorContext.cs
│ │ │ ├── InterceptingCallInvoker.cs
│ │ │ └── Interceptor.cs
│ │ ├── Internal
│ │ │ ├── CallDebuggerHelpers.cs
│ │ │ ├── ClientDebuggerHelpers.cs
│ │ │ └── UnimplementedCallInvoker.cs
│ │ ├── KeyCertificatePair.cs
│ │ ├── Marshaller.cs
│ │ ├── Metadata.cs
│ │ ├── Method.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ ├── README.md
│ │ ├── RpcException.cs
│ │ ├── SerializationContext.cs
│ │ ├── ServerCallContext.cs
│ │ ├── ServerMethods.cs
│ │ ├── ServerServiceDefinition.cs
│ │ ├── ServiceBinderBase.cs
│ │ ├── SslCredentials.cs
│ │ ├── Status.cs
│ │ ├── StatusCode.cs
│ │ ├── Utils
│ │ │ ├── EncodingExtensions.cs
│ │ │ └── GrpcPreconditions.cs
│ │ ├── VerifyPeerContext.cs
│ │ ├── VersionInfo.cs
│ │ └── WriteOptions.cs
│ ├── Grpc.HealthCheck
│ │ ├── Grpc.HealthCheck.csproj
│ │ ├── Health.cs
│ │ ├── HealthGrpc.cs
│ │ ├── HealthServiceImpl.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ └── README.md
│ ├── Grpc.Net.Client
│ │ ├── Balancer
│ │ │ ├── BalancerAddress.cs
│ │ │ ├── BalancerAttributes.cs
│ │ │ ├── BalancerAttributesKey.cs
│ │ │ ├── BalancerState.cs
│ │ │ ├── ChannelState.cs
│ │ │ ├── CompletionContext.cs
│ │ │ ├── DnsResolver.cs
│ │ │ ├── IBackoffPolicy.cs
│ │ │ ├── IChannelControlHelper.cs
│ │ │ ├── ISubchannelCallTracker.cs
│ │ │ ├── Internal
│ │ │ │ ├── BalancerAddressEqualityComparer.cs
│ │ │ │ ├── BalancerHttpHandler.cs
│ │ │ │ ├── ChannelIdProvider.cs
│ │ │ │ ├── ChildHandlerLoadBalancer.cs
│ │ │ │ ├── ConnectionManager.cs
│ │ │ │ ├── EmptyPicker.cs
│ │ │ │ ├── ErrorPicker.cs
│ │ │ │ ├── ExponentialBackoffPolicy.cs
│ │ │ │ ├── ISubchannelTransport.cs
│ │ │ │ ├── PassiveSubchannelTransport.cs
│ │ │ │ ├── SocketConnectivitySubchannelTransport.cs
│ │ │ │ └── StreamWrapper.cs
│ │ │ ├── LoadBalancer.cs
│ │ │ ├── LoadBalancerOptions.cs
│ │ │ ├── PickContext.cs
│ │ │ ├── PickFirstBalancer.cs
│ │ │ ├── PickResult.cs
│ │ │ ├── PollingResolver.cs
│ │ │ ├── Resolver.cs
│ │ │ ├── ResolverFactory.cs
│ │ │ ├── ResolverOptions.cs
│ │ │ ├── RoundRobinBalancer.cs
│ │ │ ├── StaticResolver.cs
│ │ │ ├── Subchannel.cs
│ │ │ ├── SubchannelOptions.cs
│ │ │ ├── SubchannelPicker.cs
│ │ │ ├── SubchannelState.cs
│ │ │ └── SubchannelsLoadBalancer.cs
│ │ ├── Configuration
│ │ │ ├── ConfigObject.cs
│ │ │ ├── HedgingPolicy.cs
│ │ │ ├── LoadBalancingConfig.cs
│ │ │ ├── MethodConfig.cs
│ │ │ ├── MethodName.cs
│ │ │ ├── PickFirstConfig.cs
│ │ │ ├── RetryPolicy.cs
│ │ │ ├── RetryThrottlingPolicy.cs
│ │ │ ├── RoundRobinConfig.cs
│ │ │ └── ServiceConfig.cs
│ │ ├── Grpc.Net.Client.csproj
│ │ ├── GrpcChannel.cs
│ │ ├── GrpcChannelOptions.cs
│ │ ├── Internal
│ │ │ ├── ArrayBufferWriter.cs
│ │ │ ├── CachedDebugger.cs
│ │ │ ├── ClientStreamWriterBase.cs
│ │ │ ├── Configuration
│ │ │ │ ├── ConfigProperty.cs
│ │ │ │ ├── ConvertHelpers.cs
│ │ │ │ ├── IConfigValue.cs
│ │ │ │ └── Values.cs
│ │ │ ├── DefaultCallCredentialsConfigurator.cs
│ │ │ ├── DefaultChannelCredentialsConfigurator.cs
│ │ │ ├── GrpcCall.NonGeneric.cs
│ │ │ ├── GrpcCall.cs
│ │ │ ├── GrpcCallLog.cs
│ │ │ ├── GrpcCallScope.cs
│ │ │ ├── GrpcCallSerializationContext.cs
│ │ │ ├── GrpcDiagnostics.cs
│ │ │ ├── GrpcEventSource.cs
│ │ │ ├── GrpcMethodInfo.cs
│ │ │ ├── GrpcProtocolConstants.cs
│ │ │ ├── GrpcProtocolHelpers.cs
│ │ │ ├── Http
│ │ │ │ ├── PushStreamContent.cs
│ │ │ │ ├── PushUnaryContent.cs
│ │ │ │ └── WinHttpUnaryContent.cs
│ │ │ ├── HttpClientCallInvoker.cs
│ │ │ ├── HttpContentClientStreamReader.cs
│ │ │ ├── HttpContentClientStreamWriter.cs
│ │ │ ├── IDebugger.cs
│ │ │ ├── IGrpcCall.cs
│ │ │ ├── ISystemClock.cs
│ │ │ ├── IsExternalInit.cs
│ │ │ ├── NtDll.cs
│ │ │ ├── OperatingSystem.cs
│ │ │ ├── RandomGenerator.cs
│ │ │ ├── Retry
│ │ │ │ ├── ChannelRetryThrottling.cs
│ │ │ │ ├── CommitReason.cs
│ │ │ │ ├── HedgingCall.cs
│ │ │ │ ├── RetryCall.cs
│ │ │ │ ├── RetryCallBase.cs
│ │ │ │ ├── RetryCallBaseClientStreamReader.cs
│ │ │ │ ├── RetryCallBaseClientStreamWriter.cs
│ │ │ │ ├── RetryCallBaseLog.cs
│ │ │ │ └── StatusGrpcCall.cs
│ │ │ ├── RuntimeHelpers.cs
│ │ │ ├── StreamExtensions.cs
│ │ │ ├── SystemClock.cs
│ │ │ ├── TaskExtensions.cs
│ │ │ └── UserAgentGenerator.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ └── README.md
│ ├── Grpc.Net.Client.Web
│ │ ├── Grpc.Net.Client.Web.csproj
│ │ ├── GrpcWebHandler.cs
│ │ ├── GrpcWebMode.cs
│ │ ├── Internal
│ │ │ ├── Base64RequestStream.cs
│ │ │ ├── Base64ResponseStream.cs
│ │ │ ├── GrpcWebProtocolConstants.cs
│ │ │ ├── GrpcWebRequestContent.cs
│ │ │ ├── GrpcWebResponseContent.cs
│ │ │ ├── GrpcWebResponseStream.cs
│ │ │ ├── OperatingSystem.cs
│ │ │ └── StreamHelpers.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ └── README.md
│ ├── Grpc.Net.ClientFactory
│ │ ├── CallOptionsContext.cs
│ │ ├── Grpc.Net.ClientFactory.csproj
│ │ ├── GrpcClientFactory.cs
│ │ ├── GrpcClientFactoryOptions.cs
│ │ ├── GrpcClientServiceExtensions.cs
│ │ ├── GrpcHttpClientBuilderExtensions.cs
│ │ ├── InterceptorRegistration.cs
│ │ ├── InterceptorScope.cs
│ │ ├── Internal
│ │ │ ├── CallOptionsConfigurationInvoker.cs
│ │ │ ├── DefaultClientActivator.cs
│ │ │ ├── DefaultGrpcClientFactory.cs
│ │ │ ├── GrpcCallInvokerFactory.cs
│ │ │ ├── GrpcClientMappingRegistry.cs
│ │ │ └── TypeNameHelper.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ └── README.md
│ ├── Grpc.Net.Common
│ │ ├── AsyncStreamReaderExtensions.cs
│ │ ├── Compression
│ │ │ ├── DeflateCompressionProvider.cs
│ │ │ ├── GzipCompressionProvider.cs
│ │ │ └── ICompressionProvider.cs
│ │ ├── ConnectivityState.cs
│ │ └── Grpc.Net.Common.csproj
│ ├── Grpc.Reflection
│ │ ├── Grpc.Reflection.csproj
│ │ ├── README.md
│ │ ├── Reflection.cs
│ │ ├── ReflectionGrpc.cs
│ │ ├── ReflectionServiceImpl.cs
│ │ └── SymbolRegistry.cs
│ ├── Grpc.StatusProto
│ │ ├── ExceptionExtensions.cs
│ │ ├── Grpc.StatusProto.csproj
│ │ ├── MetadataExtensions.cs
│ │ ├── README.md
│ │ ├── RpcExceptionExtensions.cs
│ │ └── RpcStatusExtensions.cs
│ ├── Shared
│ │ ├── CallerArgumentExpressionAttribute.cs
│ │ ├── CodeAnalysisAttributes.cs
│ │ ├── CommonGrpcProtocolHelpers.cs
│ │ ├── CompatibilityHelpers.cs
│ │ ├── DefaultDeserializationContext.cs
│ │ ├── Http2ErrorCode.cs
│ │ ├── Http3ErrorCode.cs
│ │ ├── HttpHandlerFactory.cs
│ │ ├── HttpRequestHelpers.cs
│ │ ├── IsExternalInit.cs
│ │ ├── NonCapturingTimer.cs
│ │ ├── NonDisposableMemoryStream.cs
│ │ ├── NullableAttributes.cs
│ │ ├── Server
│ │ │ ├── BindMethodFinder.cs
│ │ │ ├── ClientStreamingServerMethodInvoker.cs
│ │ │ ├── DuplexStreamingServerMethodInvoker.cs
│ │ │ ├── InterceptorPipelineBuilder.cs
│ │ │ ├── MethodOptions.cs
│ │ │ ├── ServerMethodInvokerBase.cs
│ │ │ ├── ServerStreamingServerMethodInvoker.cs
│ │ │ └── UnaryServerMethodInvoker.cs
│ │ ├── ThrowHelpers
│ │ │ ├── ArgumentNullThrowHelper.cs
│ │ │ ├── ArgumentOutOfRangeThrowHelper.cs
│ │ │ └── ObjectDisposedThrowHelper.cs
│ │ └── TrailingHeadersHelpers.cs
│ └── dotnet-grpc
│ ├── Commands
│ │ ├── AddFileCommand.cs
│ │ ├── AddUrlCommand.cs
│ │ ├── CommandBase.cs
│ │ ├── ListCommand.cs
│ │ ├── RefreshCommand.cs
│ │ └── RemoveCommand.cs
│ ├── Internal
│ │ ├── CLIToolException.cs
│ │ ├── ConsoleExtensions.cs
│ │ └── GrpcDependencyAttribute.cs
│ ├── Options
│ │ ├── Access.cs
│ │ ├── CommonOptions.cs
│ │ └── Services.cs
│ ├── Program.cs
│ ├── Properties
│ │ ├── AssemblyInfo.cs
│ │ ├── CoreStrings.Designer.cs
│ │ └── CoreStrings.resx
│ └── dotnet-grpc.csproj
├── startvs.cmd
├── test
│ ├── Directory.Build.props
│ ├── FunctionalTests
│ │ ├── Balancer
│ │ │ ├── BalancerHelpers.cs
│ │ │ ├── ConnectionTests.cs
│ │ │ ├── DnsResolverTests.cs
│ │ │ ├── LeastUsedBalancer.cs
│ │ │ ├── LeastUsedBalancerTests.cs
│ │ │ ├── PickFirstBalancerTests.cs
│ │ │ └── RoundRobinBalancerTests.cs
│ │ ├── Client
│ │ │ ├── AuthorizationTests.cs
│ │ │ ├── CancellationTests.cs
│ │ │ ├── ClientFactoryTests.cs
│ │ │ ├── CompressionTests.cs
│ │ │ ├── ConnectionTests.cs
│ │ │ ├── DeadlineTests.cs
│ │ │ ├── EventSourceTests.cs
│ │ │ ├── HedgingTests.cs
│ │ │ ├── InterceptorTests.cs
│ │ │ ├── MaxMessageSizeTests.cs
│ │ │ ├── MetadataTests.cs
│ │ │ ├── RetryTests.cs
│ │ │ ├── StreamingTests.cs
│ │ │ ├── TelemetryTests.cs
│ │ │ └── UnaryTests.cs
│ │ ├── FunctionalTestBase.cs
│ │ ├── Grpc.AspNetCore.FunctionalTests.csproj
│ │ ├── Infrastructure
│ │ │ ├── DynamicGrpcServiceRegistry.cs
│ │ │ ├── ExecutionContextLoggingProvider.cs
│ │ │ ├── GrpcHttpHelper.cs
│ │ │ ├── GrpcStreamContent.cs
│ │ │ ├── GrpcTestContext.cs
│ │ │ ├── GrpcTestFixture.cs
│ │ │ ├── HttpResponseMessageExtensions.cs
│ │ │ ├── InProcessTestServer.cs
│ │ │ ├── ListenerSubscription.cs
│ │ │ ├── LogRecord.cs
│ │ │ ├── LogSinkProvider.cs
│ │ │ ├── LoopbackProxyServer.cs
│ │ │ ├── PushStreamContent.cs
│ │ │ ├── RequireHttp3Attribute.cs
│ │ │ ├── StreamingContent.cs
│ │ │ ├── TestClient.cs
│ │ │ ├── TestConstants.cs
│ │ │ ├── TestDelegateHandler.cs
│ │ │ ├── TestEventListener.cs
│ │ │ ├── TestServerEndpointName.cs
│ │ │ ├── UnixDomainSocketConnectionFactory.cs
│ │ │ └── VerifyNoErrorsScope.cs
│ │ ├── Linker
│ │ │ ├── Helpers
│ │ │ │ ├── DotNetProcess.cs
│ │ │ │ └── WebsiteProcess.cs
│ │ │ └── LinkerTests.cs
│ │ ├── Server
│ │ │ ├── AuthorizationTests.cs
│ │ │ ├── ClientStreamingMethodTests.cs
│ │ │ ├── CompressionTests.cs
│ │ │ ├── CorsTests.cs
│ │ │ ├── DeadlineTests.cs
│ │ │ ├── DiagnosticsTests.cs
│ │ │ ├── DuplexStreamingMethodTests.cs
│ │ │ ├── HttpContextTests.cs
│ │ │ ├── InterceptorOrderTests.cs
│ │ │ ├── LifetimeTests.cs
│ │ │ ├── MaxMessageSizeTests.cs
│ │ │ ├── NestedTests.cs
│ │ │ ├── ServerStreamingMethodTests.cs
│ │ │ ├── UnaryMethodTests.cs
│ │ │ └── UnimplementedTests.cs
│ │ ├── TestServer
│ │ │ ├── FunctionalTestBase.cs
│ │ │ ├── Helpers
│ │ │ │ ├── ForwardingLoggerProvider.cs
│ │ │ │ ├── GrpcTestContext.cs
│ │ │ │ └── GrpcTestFixture.cs
│ │ │ └── TesterServiceTests.cs
│ │ ├── Web
│ │ │ ├── Client
│ │ │ │ ├── AuthTests.cs
│ │ │ │ ├── ClientFactoryTests.cs
│ │ │ │ ├── ConnectionTests.cs
│ │ │ │ ├── IssueTests.cs
│ │ │ │ ├── ServerStreamingMethodTests.cs
│ │ │ │ ├── TrailerMetadataTests.cs
│ │ │ │ └── UnaryMethodTests.cs
│ │ │ ├── GrpcWebFunctionalTestBase.cs
│ │ │ └── Server
│ │ │ ├── DeadlineTests.cs
│ │ │ └── UnaryMethodTests.cs
│ │ ├── localhost.pfx
│ │ └── server1.pfx
│ ├── Grpc.AspNetCore.Server.ClientFactory.Tests
│ │ ├── ClientBaseTests.cs
│ │ ├── DefaultGrpcClientFactoryTests.cs
│ │ ├── Grpc.AspNetCore.Server.ClientFactory.Tests.csproj
│ │ ├── Proto
│ │ │ └── greet.proto
│ │ └── TestObjects
│ │ └── TestServerCallContextFeature.cs
│ ├── Grpc.AspNetCore.Server.Tests
│ │ ├── BindMethodFinderTests.cs
│ │ ├── CallHandlerTests.cs
│ │ ├── Certs
│ │ │ ├── client.crt
│ │ │ └── outlookcom.crt
│ │ ├── DefaultGrpcInterceptorActivatorTests.cs
│ │ ├── DefaultGrpcServiceActivatorTests.cs
│ │ ├── DuplexStreamingServerCallHandlerTests.cs
│ │ ├── Grpc.AspNetCore.Server.Tests.csproj
│ │ ├── GrpcEndpointRouteBuilderExtensionsTests.cs
│ │ ├── GrpcEventSourceTests.cs
│ │ ├── GrpcProtocolHelpersTests.cs
│ │ ├── GrpcServicesExtensionsTests.cs
│ │ ├── HealthChecks
│ │ │ ├── GrpcHealthChecksPublisherTests.cs
│ │ │ └── HealthServiceTests.cs
│ │ ├── HttpClientFactory
│ │ │ ├── TestGreeterClient.cs
│ │ │ └── TestSecondGreeterClient.cs
│ │ ├── HttpContextServerCallContextTests.cs
│ │ ├── HttpContextStreamReaderTests.cs
│ │ ├── HttpContextStreamWriterTests.cs
│ │ ├── Infrastructure
│ │ │ ├── TestHttpResponseFeature.cs
│ │ │ ├── TestHttpResponseTrailersFeature.cs
│ │ │ ├── TestPipeReader.cs
│ │ │ ├── TestServerStreamWriter.cs
│ │ │ └── TestSystemClock.cs
│ │ ├── InterceptorCollectionTests.cs
│ │ ├── Model
│ │ │ └── BinderServiceMethodProviderTests.cs
│ │ ├── PercentEncodingHelpersTests.cs
│ │ ├── PipeExtensionsByteArrayTests.cs
│ │ ├── PipeExtensionsPipelinesTests.cs
│ │ ├── PipeExtensionsTestsBase.cs
│ │ ├── Proto
│ │ │ ├── echo.proto
│ │ │ └── greet.proto
│ │ ├── Reflection
│ │ │ └── ReflectionGrpcServiceActivatorTests.cs
│ │ ├── ServerCallContextExtensionsTests.cs
│ │ ├── ServerCallDeadlineManagerTests.cs
│ │ ├── ServerCallHandlerFactoryTests.cs
│ │ ├── TestObjects
│ │ │ ├── CustomAttribute.cs
│ │ │ ├── CustomMetadata.cs
│ │ │ ├── Services
│ │ │ │ ├── GreeterServiceWithDuplicateNames.cs
│ │ │ │ ├── GreeterServiceWithMetadataAttributes.cs
│ │ │ │ ├── WithAttribute
│ │ │ │ │ ├── GreeterWithAttribute.cs
│ │ │ │ │ ├── GreeterWithAttributeService.cs
│ │ │ │ │ ├── GreeterWithAttributeServiceSubClass.cs
│ │ │ │ │ └── GreeterWithAttributeServiceSubSubClass.cs
│ │ │ │ └── WithoutAttribute
│ │ │ │ ├── GreeterWithoutAttribute.cs
│ │ │ │ ├── GreeterWithoutAttributeService.cs
│ │ │ │ ├── GreeterWithoutAttributeServiceSubClass.cs
│ │ │ │ └── GreeterWithoutAttributeServiceSubSubClass.cs
│ │ │ ├── TestData.cs
│ │ │ ├── TestEndpointRouteBuilder.cs
│ │ │ └── TestGrpcServiceActivator.cs
│ │ ├── UnaryServerCallHandlerTests.cs
│ │ └── Web
│ │ ├── Base64PipeReaderTests.cs
│ │ ├── Base64PipeWriterTests.cs
│ │ ├── GrpcWebApplicationBuilderExtensionsTests.cs
│ │ ├── GrpcWebFeatureTests.cs
│ │ ├── GrpcWebMiddlewareTests.cs
│ │ ├── GrpcWebProtocolHelpersTests.cs
│ │ └── PipeExtensionsBase64Tests.cs
│ ├── Grpc.Core.Api.Tests
│ │ ├── AuthContextTest.cs
│ │ ├── AuthPropertyTest.cs
│ │ ├── CallCredentialsTest.cs
│ │ ├── CallOptionsTest.cs
│ │ ├── ChannelCredentialsTest.cs
│ │ ├── ClientTest.cs
│ │ ├── FakeCredentials.cs
│ │ ├── Grpc.Core.Api.Tests.csproj
│ │ ├── MarshallerTest.cs
│ │ ├── MetadataTest.cs
│ │ ├── RpcExceptionTest.cs
│ │ └── VersionInfoTest.cs
│ ├── Grpc.HealthCheck.Tests
│ │ ├── Grpc.HealthCheck.Tests.csproj
│ │ ├── HealthClientServerTest.cs
│ │ ├── HealthServiceImplTest.cs
│ │ ├── TestResponseStreamWriter.cs
│ │ └── TestServerCallContext.cs
│ ├── Grpc.Net.Client.Tests
│ │ ├── AsyncClientStreamingCallTests.cs
│ │ ├── AsyncDuplexStreamingCallTests.cs
│ │ ├── AsyncServerStreamingCallTests.cs
│ │ ├── AsyncUnaryCallTests.cs
│ │ ├── Balancer
│ │ │ ├── BalancerAttributesTests.cs
│ │ │ ├── ConnectionManagerTests.cs
│ │ │ ├── ConnectivityStateTests.cs
│ │ │ ├── ExponentialBackoffPolicyTests.cs
│ │ │ ├── PickFirstBalancerTests.cs
│ │ │ ├── ResolverTests.cs
│ │ │ ├── RoundRobinBalancerTests.cs
│ │ │ ├── StreamWrapperTests.cs
│ │ │ └── WaitForReadyTests.cs
│ │ ├── CallCredentialTests.cs
│ │ ├── CancellationTests.cs
│ │ ├── CompressionTests.cs
│ │ ├── ConnectionTests.cs
│ │ ├── DeadlineTests.cs
│ │ ├── DiagnosticsTests.cs
│ │ ├── GetStatusTests.cs
│ │ ├── GetTrailersTests.cs
│ │ ├── Grpc.Net.Client.Tests.csproj
│ │ ├── GrpcCallSerializationContextTests.cs
│ │ ├── GrpcChannelTests.cs
│ │ ├── GrpcProtocolHelpersTests.cs
│ │ ├── HeadersTests.cs
│ │ ├── HttpContentClientStreamReaderTests.cs
│ │ ├── Infrastructure
│ │ │ ├── Balancer
│ │ │ │ ├── TestLoadBalancer.cs
│ │ │ │ ├── TestLoadBalancerFactory.cs
│ │ │ │ ├── TestSubChannelTransport.cs
│ │ │ │ └── TestSubChannelTransportFactory.cs
│ │ │ ├── CallInvokerTestExtensions.cs
│ │ │ ├── ClientLoggerInterceptor.cs
│ │ │ ├── Http2StreamException.cs
│ │ │ ├── HttpClientCallInvokerFactory.cs
│ │ │ ├── NullHttpHandler.cs
│ │ │ ├── QuicStreamAbortedException.cs
│ │ │ ├── StreamSerializationHelper.cs
│ │ │ └── WinHttpHandler.cs
│ │ ├── InterceptorTests.cs
│ │ ├── LoggingTests.cs
│ │ ├── MaximumMessageSizeTests.cs
│ │ ├── OperatingSystemTests.cs
│ │ ├── Proto
│ │ │ └── greet.proto
│ │ ├── ReadAllAsyncTests.cs
│ │ ├── ResponseAsyncTests.cs
│ │ ├── ResponseHeadersAsyncTests.cs
│ │ ├── Retry
│ │ │ ├── ChannelRetryThrottlingTests.cs
│ │ │ ├── HedgingCallTests.cs
│ │ │ ├── HedgingTests.cs
│ │ │ └── RetryTests.cs
│ │ ├── ServiceConfigTests.cs
│ │ ├── SubdirectoryHandlerTests.cs
│ │ └── UserAgentGeneratorTests.cs
│ ├── Grpc.Net.Client.Web.Tests
│ │ ├── Base64RequestStreamTests.cs
│ │ ├── Base64ResponseStreamTests.cs
│ │ ├── Grpc.Net.Client.Web.Tests.csproj
│ │ ├── GrpcWebHandlerTests.cs
│ │ ├── GrpcWebRequestContentTests.cs
│ │ ├── GrpcWebResponseContentTests.cs
│ │ └── GrpcWebResponseStreamTests.cs
│ ├── Grpc.Net.ClientFactory.Tests
│ │ ├── DefaultGrpcClientFactoryTests.cs
│ │ ├── Grpc.Net.ClientFactory.Tests.csproj
│ │ ├── GrpcClientServiceExtensionsTests.cs
│ │ ├── GrpcHttpClientBuilderExtensionsTests.cs
│ │ └── Proto
│ │ └── greet.proto
│ ├── Grpc.Reflection.Tests
│ │ ├── Grpc.Reflection.Tests.csproj
│ │ ├── ReflectionClientServerTest.cs
│ │ └── SymbolRegistryTest.cs
│ ├── Grpc.StatusProto.Tests
│ │ ├── ExceptionExtensionsTest.cs
│ │ ├── Grpc.StatusProto.Tests.csproj
│ │ ├── MetadataExtensionsTest.cs
│ │ ├── RpcExceptionExtensionsTest.cs
│ │ └── RpcStatusExtensionsTest.cs
│ ├── Shared
│ │ ├── ActivityReplacer.cs
│ │ ├── BalancerWaitHelpers.cs
│ │ ├── CallbackInterceptor.cs
│ │ ├── ClientBaseTests.cs
│ │ ├── ClientTestHelpers.cs
│ │ ├── ExceptionAssert.cs
│ │ ├── HttpContextHelpers.cs
│ │ ├── HttpContextServerCallContextHelpers.cs
│ │ ├── HttpEventSourceListener.cs
│ │ ├── MessageHelpers.cs
│ │ ├── NUnitLogger.cs
│ │ ├── ObserverToList.cs
│ │ ├── ResponseUtils.cs
│ │ ├── ServiceConfigHelpers.cs
│ │ ├── ServicesHelpers.cs
│ │ ├── SyncPoint.cs
│ │ ├── SyncPointMemoryStream.cs
│ │ ├── TaskExtensions.cs
│ │ ├── TestHelpers.cs
│ │ ├── TestHttpContextAccessor.cs
│ │ ├── TestHttpMessageHandler.cs
│ │ ├── TestRequestBodyPipeFeature.cs
│ │ ├── TestResolver.cs
│ │ ├── TestResolverFactory.cs
│ │ ├── TestResponseBodyFeature.cs
│ │ └── TestServerCallContext.cs
│ └── dotnet-grpc.Tests
│ ├── AddFileCommandTests.cs
│ ├── AddUrlCommandTests.cs
│ ├── CommandBaseTests.cs
│ ├── DirectoryExtensions.cs
│ ├── ListCommandTests.cs
│ ├── RefreshCommandTests.cs
│ ├── RemoveCommandTests.cs
│ ├── TestAssets
│ │ ├── DuplicateProjects
│ │ │ ├── client.csproj
│ │ │ └── server.csproj
│ │ ├── EmptyProject
│ │ │ ├── Proto
│ │ │ │ ├── a.proto
│ │ │ │ └── b.proto
│ │ │ └── test.csproj
│ │ ├── MultipleReferences
│ │ │ └── test.csproj
│ │ └── ProjectWithReference
│ │ ├── Proto
│ │ │ └── a.proto
│ │ └── test.csproj
│ ├── TestBase.cs
│ └── dotnet-grpc.Tests.csproj
└── testassets
├── BenchmarkWorkerWebsite
│ ├── BenchmarkServiceImpl.cs
│ ├── BenchmarkWorkerWebsite.csproj
│ ├── IServerRunner.cs
│ ├── Program.cs
│ ├── README.md
│ ├── ServerRunners.cs
│ ├── Startup.cs
│ ├── TimeStats.cs
│ ├── WorkerServiceImpl.cs
│ └── grpc
│ ├── core
│ │ └── grpc_core_stats.proto
│ └── testing
│ ├── benchmark_service.proto
│ ├── control.proto
│ ├── messages.proto
│ ├── payloads.proto
│ ├── stats.proto
│ └── worker_service.proto
├── Certs
│ └── InteropTests
│ ├── README.md
│ ├── ca.pem
│ ├── server1.key
│ ├── server1.pem
│ └── server1.pfx
├── FunctionalTestsWebsite
│ ├── FunctionalTestsWebsite.csproj
│ ├── Infrastructure
│ │ ├── DynamicEndpointDataSource.cs
│ │ ├── DynamicService.cs
│ │ ├── DynamicServiceModelProvider.cs
│ │ ├── IncrementingCounter.cs
│ │ └── ValueProvider.cs
│ ├── Program.cs
│ ├── Services
│ │ ├── AnyService.cs
│ │ ├── AuthorizedGreeter.cs
│ │ ├── ChatterService.cs
│ │ ├── CompressionService.cs
│ │ ├── CounterService.cs
│ │ ├── EchoService.cs
│ │ ├── GreeterService.cs
│ │ ├── IssueService.cs
│ │ ├── LifetimeService.cs
│ │ ├── NestedService.cs
│ │ ├── RacerService.cs
│ │ ├── SecondGreeterService.cs
│ │ ├── SingletonCounterService.cs
│ │ ├── StreamService.cs
│ │ └── TesterService.cs
│ └── Startup.cs
├── InteropTestsClient
│ ├── InteropTestsClient.csproj
│ ├── Program.cs
│ └── RunGrpcTests.ps1
├── InteropTestsGrpcWebClient
│ ├── App.razor
│ ├── Infrastructure
│ │ ├── InteropTestInvoker.cs
│ │ └── PageLoggerFactory.cs
│ ├── InteropTestsGrpcWebClient.csproj
│ ├── Pages
│ │ ├── Index.razor
│ │ └── Index.razor.cs
│ ├── Program.cs
│ ├── Shared
│ │ └── MainLayout.razor
│ ├── _Imports.razor
│ └── wwwroot
│ └── index.html
├── InteropTestsGrpcWebWebsite
│ ├── Dockerfile
│ ├── InteropTestsGrpcWebWebsite.csproj
│ ├── Program.cs
│ ├── Startup.cs
│ └── Tests
│ ├── __tests__
│ │ └── interoptests.js
│ ├── custom-environment.js
│ ├── jest-puppeteer.config.js
│ ├── jest.config.js
│ ├── package-lock.json
│ └── package.json
├── InteropTestsNativeServer
│ ├── InteropServer.cs
│ ├── InteropTestsNativeServer.csproj
│ ├── Program.cs
│ ├── README.md
│ ├── TestCredentials.cs
│ └── TestServiceImpl.cs
├── InteropTestsWebsite
│ ├── Dockerfile
│ ├── InteropTestsWebsite.csproj
│ ├── Program.cs
│ ├── README.md
│ ├── Startup.cs
│ └── TestServiceImpl.cs
├── LinkerTestsClient
│ ├── LinkerTestsClient.csproj
│ └── Program.cs
├── LinkerTestsWebsite
│ ├── LinkerTestsWebsite.csproj
│ ├── Program.cs
│ └── Services
│ └── GreeterService.cs
├── Proto
│ ├── any.proto
│ ├── authorize.proto
│ ├── chat.proto
│ ├── compression.proto
│ ├── count.proto
│ ├── echo.proto
│ ├── greet.proto
│ ├── grpc
│ │ └── testing
│ │ ├── empty.proto
│ │ ├── messages.proto
│ │ └── test.proto
│ ├── issue.proto
│ ├── lifetime.proto
│ ├── nested.proto
│ ├── race.proto
│ ├── singleton.proto
│ ├── streaming.proto
│ ├── test.proto
│ └── unimplemented.proto
├── README.md
└── Shared
├── Assert.cs
├── AsyncStreamExtensions.cs
├── ExceptionAssert.cs
├── IChannelWrapper.cs
├── InteropClient.cs
└── TestCredentials.cs
376 directories, 1312 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论