Compare commits

...

643 Commits

Author SHA1 Message Date
James Newton-King 4ee90d83ce
Add .NET 10 target (#2653) 2025-08-06 09:06:27 +08:00
James Newton-King fc1f6db9fd
Support reading compressed grpc-web trailing headers (#2650) 2025-08-05 08:25:32 +08:00
Miha Zupan f31cd71abf
Update docs and startvs for slnx (#2649) 2025-07-25 07:44:33 +08:00
James Newton-King 0045d7d123
Add more options to perf client (#2648) 2025-07-25 07:44:16 +08:00
Shimmy d07efb500c
Add protobuf-net code-first to README.md (#2644)
Co-authored-by: James Newton-King <james@newtonking.com>
2025-06-26 08:39:36 +08:00
dependabot[bot] 9764314a84
Bump pbkdf2 from 3.1.2 to 3.1.3 in /examples/Spar/Server/ClientApp (#2642)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-24 13:43:24 +08:00
James Newton-King 3bd324e325
Fix shared code (#2640) 2025-06-24 11:39:09 +08:00
dependabot[bot] add543720d
Bump brace-expansion in /testassets/InteropTestsGrpcWebWebsite/Tests (#2639)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-13 11:10:16 +08:00
James Newton-King 44b243fb00
MapGrpcService with service definition refactor (#2634)
Co-authored-by: aka-nse <nakase.d1220@gmail.com>
2025-06-13 09:23:01 +08:00
dependabot[bot] 66df240b07
Bump tar-fs in /testassets/InteropTestsGrpcWebWebsite/Tests (#2636)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-13 09:00:08 +08:00
James Newton-King 1cb0fdb29a
Migrate from sln to slnx (#2635) 2025-05-30 11:24:19 +08:00
Casper Verhaar 85787a7ce2
Remove reference to obsolete property from Readme and mention alternative (#2631) 2025-05-29 11:56:14 +08:00
James Newton-King d170b24e9d
Update NuGet package versions (#2620) 2025-04-10 08:45:17 +08:00
apolcyn b1af190d8c
bump tools package to 2.71 (#2621) 2025-04-09 15:17:09 -07:00
James Newton-King 6f03f0e0b5
Fix race condition that caused inprogress connect to be canceled (#2618) 2025-04-09 21:06:56 +08:00
dependabot[bot] 30553b5624
Bump tar-fs in /testassets/InteropTestsGrpcWebWebsite/Tests (#2619)
Bumps [tar-fs](https://github.com/mafintosh/tar-fs) from 3.0.6 to 3.0.8.
- [Commits](https://github.com/mafintosh/tar-fs/compare/v3.0.6...v3.0.8)

---
updated-dependencies:
- dependency-name: tar-fs
  dependency-version: 3.0.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-09 18:09:07 +08:00
dependabot[bot] 2aed7b5ef3
Bump @babel/helpers in /testassets/InteropTestsGrpcWebWebsite/Tests (#2616)
Bumps [@babel/helpers](https://github.com/babel/babel/tree/HEAD/packages/babel-helpers) from 7.25.0 to 7.27.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.27.0/packages/babel-helpers)

---
updated-dependencies:
- dependency-name: "@babel/helpers"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-09 17:07:45 +08:00
dependabot[bot] 06cd2a9f7a
Bump axios in /testassets/InteropTestsGrpcWebWebsite/Tests (#2615)
Bumps [axios](https://github.com/axios/axios) from 1.7.4 to 1.8.4.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.7.4...v1.8.4)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-09 17:07:32 +08:00
James Newton-King 5816e69828
Remove old dotnet-core feed (#2611) 2025-03-07 07:33:39 +08:00
apolcyn 147a4647ad
bump Grpc.Tools dep (#2603) 2025-02-25 14:46:09 +08:00
James Newton-King 852a118c7b
Move updating connectivity state outside of subchannel lock (#2601) 2025-02-25 08:19:30 +08:00
dependabot[bot] 60d9d2ce15
Bump elliptic from 6.6.0 to 6.6.1 in /examples/Spar/Server/ClientApp (#2599)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-19 07:28:54 +08:00
James Newton-King a2f7d06e02
Avoid using ConcurrentDictionary for channels with few methods (#2597)
Co-authored-by: Günther Foidl <gue@korporal.at>
2025-02-19 07:17:50 +08:00
James Newton-King c9d26719e8
Complete health checks watch service on server shutting down (#2582) 2024-12-12 10:17:08 +08:00
Henrik b7af033360
Performance microoptimizations (#2558)
Co-authored-by: James Newton-King <james@newtonking.com>
2024-12-09 18:03:21 +08:00
Dexter Ajoku 6a3c9774f6
Refactor: Use `await using` for `packageVersionStream` to ensure proper disposal of async resources (#2521) 2024-12-09 08:54:24 +08:00
subhraOffGit cacf59d942
[vote]Added Active maintainers into MAINTAINERS.md. (#2449) 2024-12-09 08:49:13 +08:00
dependabot[bot] be98a74f68
Bump cross-spawn from 7.0.3 to 7.0.6 in /testassets/InteropTestsGrpcWebWebsite/Tests (#2574)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 08:48:58 +08:00
dependabot[bot] 42593dde65
Bump vue from 2.6.14 to 3.0.0 in /examples/Spar/Server/ClientApp (#2565)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 08:48:20 +08:00
Henrik 651a0cb64a
Correctness: Make some private & internal classes sealed where possible (#2559) 2024-12-09 08:38:01 +08:00
Weihan Li 3bf19a113c
use nameof for CallerArgumentExpression (#2562) 2024-12-09 08:36:19 +08:00
Weihan Li b6cfbd05e9
update ArgumentNullException.ThrowIfNull usage (#2563) 2024-12-09 08:35:21 +08:00
James Newton-King 5a58c24efc
Update to .NET 9 RTM (#2571) 2024-11-15 06:47:13 +08:00
dependabot[bot] dacb7b41ea
Bump elliptic from 6.5.7 to 6.6.0 in /examples/Spar/Server/ClientApp (#2567)
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.7 to 6.6.0.
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.7...v6.6.0)

---
updated-dependencies:
- dependency-name: elliptic
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-31 13:34:00 +08:00
James Newton-King 1732f28dc6
Update package dependencies to 9.0 RC2 (#2560) 2024-10-24 04:06:42 +08:00
James Newton-King 5fffc489f7
Fix System.Text.Json vulnerability warning (#2556) 2024-10-11 06:51:57 +08:00
James Newton-King b88713e83f
Update Grpc.Tools to 2.67.0 (#2554) 2024-10-09 13:52:55 +08:00
James Newton-King 0f2ffdc03e
Fix UpdateBalancingState not called when address attributes are modified (#2553) 2024-10-09 10:01:33 +08:00
James Newton-King 490894cded
Cleanup gRPC unit testing helpers in tester sample (#2548) 2024-10-02 08:10:26 +08:00
James Newton-King df3d8dc996
Update to Grpc.Tools 2.67.0-pre1 (#2547) 2024-10-01 14:24:32 +08:00
dependabot[bot] b1df3e4c76
Bump serve-static from 1.14.2 to 1.16.2 in /examples/Spar/Server/ClientApp (#2536)
Bumps [serve-static](https://github.com/expressjs/serve-static) from 1.14.2 to 1.16.2.
- [Release notes](https://github.com/expressjs/serve-static/releases)
- [Changelog](https://github.com/expressjs/serve-static/blob/v1.16.2/HISTORY.md)
- [Commits](https://github.com/expressjs/serve-static/compare/v1.14.2...v1.16.2)

---
updated-dependencies:
- dependency-name: serve-static
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-16 21:54:20 +08:00
Noam Greenberg de9a82fe8e
Update logging to use generated logs (#2531) 2024-09-12 22:31:10 +08:00
James Newton-King 3ed9fb9f31
Log server cancellation errors at info level (#2527) 2024-09-07 14:08:46 +08:00
Varorbc 5322d6b813
precompile condition clean (#2528) 2024-09-07 14:08:07 +08:00
dependabot[bot] 439a3b80b5
Bump micromatch from 4.0.7 to 4.0.8 in /testassets/InteropTestsGrpcWebWebsite/Tests (#2524)
Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.7 to 4.0.8.
- [Release notes](https://github.com/micromatch/micromatch/releases)
- [Changelog](https://github.com/micromatch/micromatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/micromatch/compare/4.0.7...4.0.8)

---
updated-dependencies:
- dependency-name: micromatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-06 07:52:06 +08:00
dependabot[bot] b3429b9061
Bump elliptic from 6.5.4 to 6.5.7 in /examples/Spar/Server/ClientApp (#2525)
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.4 to 6.5.7.
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.4...v6.5.7)

---
updated-dependencies:
- dependency-name: elliptic
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-06 07:51:42 +08:00
dependabot[bot] 30255261ad
Bump webpack from 5.76.0 to 5.94.0 in /examples/Browser/Server/wwwroot (#2522)
Bumps [webpack](https://github.com/webpack/webpack) from 5.76.0 to 5.94.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.76.0...v5.94.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-06 07:28:04 +08:00
apolcyn bf41c89ace
Bump grpc.tools version to 2.66 (#2523) 2024-09-06 07:03:01 +08:00
James Newton-King e9cc7e1579
Add HTTP version configuration to GrpcChannelOptions (#2514)
Co-authored-by: Andrew Casey <amcasey@users.noreply.github.com>
2024-08-22 07:53:14 +08:00
apolcyn 26227c3e7a
[testing] improve sanity check in jwt_token_creds interop test (#2513) 2024-08-21 10:06:52 +08:00
James Newton-King dd4adce098
Fix Google auth interop test (#2512)
* Downgrade Google auth

* Suppress warning

* 1.57.0

* Update to latest and improve test
2024-08-20 13:36:36 -07:00
James Newton-King c397bc7804
Remove internal_ci flag from interop test script (#2509) 2024-08-16 17:13:23 +08:00
James Newton-King 74ee5f0ebf
Update puppeteer (#2507) 2024-08-15 08:23:06 +08:00
dependabot[bot] a732f517ea
Bump axios from 1.6.2 to 1.7.4 in /testassets/InteropTestsGrpcWebWebsite/Tests (#2505)
Bumps [axios](https://github.com/axios/axios) from 1.6.2 to 1.7.4.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.6.2...v1.7.4)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-14 12:20:47 +08:00
dependabot[bot] a156ca9955
Bump braces from 3.0.2 to 3.0.3 in /testassets/InteropTestsGrpcWebWebsite/Tests (#2504)
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-14 12:20:29 +08:00
Sébastien Ros cd875d9097
Update .NET 9 SDK and resolve warnings (#2502)
Co-authored-by: James Newton-King <james@newtonking.com>
2024-08-14 12:08:04 +08:00
Mayuki Sawatari 540e87bf70
Fix failure to create GrpcChannel under Wine compatibility layer (including Steam Proton and Apple Game Porting Toolkit) (#2496) 2024-07-30 11:21:36 +08:00
Stanley Cheung b34d553e44
Bump version on master to 2.66.0-dev (#2491) 2024-07-19 18:39:01 -07:00
Stanley Cheung 35b63dad57
Bump Grpc.Tools version to 2.65.0 (#2488) 2024-07-19 16:37:17 +08:00
James Newton-King 6448783899
Reduce usage of RunContinuationsAsynchronously (#2478) 2024-07-11 22:48:10 +08:00
Stanley Cheung aab5b2b798
Bump master version to 2.65.0-dev (#2472) 2024-06-28 13:52:12 -07:00
William Rall 4623318100
Update Native.DetectWindowsVersion() to consider Windows Server 2019 to be Window Server (#2468) 2024-06-26 16:04:45 +08:00
James Newton-King 1416340c85
Fix flaky ConnectTimeout_MultipleCalls_AttemptReconnect test (#2460) 2024-06-13 11:18:15 +08:00
James Newton-King 64f6a0958a
Update repo for .NET 9 (#2457) 2024-06-13 11:05:43 +08:00
James Newton-King 434a5ba26b
Add WriteResponseHeadersAsync test (#2452)
Co-authored-by: Brennan <brecon@microsoft.com>
2024-06-07 07:43:13 +08:00
James Newton-King 5e6821cbe3
Change functional tests to use dynamic ports (#2458) 2024-06-07 06:29:20 +08:00
James Newton-King b57c87f2a9
Update Grpc.Tools to 2.64.0 (#2456) 2024-06-06 08:50:18 +08:00
James Newton-King 775d1fba1c
Update various package versions (#2453) 2024-06-06 08:14:59 +08:00
James Newton-King 0ea0112ec8
Assign primary handler before other configuration (#2445) 2024-06-05 10:07:47 +08:00
James Newton-King 84a4fcb697
Support some HttpClientAction settings and log debug message instead of an error (#2448) 2024-06-05 06:43:36 +08:00
Weihan Li bca64852ba
build: configure rollForward in global.json (#2437) 2024-05-30 12:07:35 +08:00
Weihan Li ef1f0d209c
ci: upgrade checkout action version (#2434)
upgrade checkout action version to fix the ci build warning
2024-05-09 12:24:17 +08:00
Weihan Li 9ad10a9196
doc: fix typo (#2431) 2024-05-09 07:27:20 +08:00
Weihan Li 4b6ecea955
doc: fix typo (#2432)
fix `algorithm` typo
2024-05-08 20:38:41 +08:00
apolcyn 989420e709
Update Grpc.Tools to 2.63 (#2429) 2024-05-07 16:18:49 -07:00
James Newton-King c80f4594d0
Don't capture async locals in resolver (#2426) 2024-05-03 07:06:05 +08:00
James Newton-King 63914f2653
Add semaphore to limit subchannel connect to prevent race conditions (#2422) 2024-04-30 18:38:27 +08:00
James Newton-King 8199f66422
Fix HTTP/3 test errors on .NET 6 (#2423) 2024-04-29 20:37:40 +08:00
James Newton-King 2d9df5892c
Fix memory leak when using call context propagation with cancellation token (#2421) 2024-04-29 20:37:31 +08:00
James Newton-King c9c902c8da
Enable multiple connections with WinHttpHandler by default (#2416) 2024-04-19 06:53:25 +08:00
Drew Noakes 2a36215697
Fix ObjectDisposedException message (#2415) 2024-04-17 15:44:04 +08:00
Weihan Li 9cd97cebca
support `ReadAllAsync` for netstandard2.0 (#2411)
Co-authored-by: James Newton-King <james@newtonking.com>
2024-04-17 15:27:33 +08:00
James Thompson c04d01a0ac
#2401 Add new TFM's so package dependency can be removed (#2402)
Co-authored-by: James Newton-King <james@newtonking.com>
2024-04-17 15:26:43 +08:00
Weihan Li add886e45b
Update Directory.Packages.props (#2413)
Co-authored-by: James Newton-King <james@newtonking.com>
2024-04-17 14:24:11 +08:00
James Newton-King f2709f1bf5
Interrupt existing subchannel connect attempt when reconnect is requested (#2410) 2024-04-13 13:39:16 +08:00
Jakub Januszkiewicz a4d83f6d75
fix a couple typos in README.md (#2397) 2024-04-12 20:49:48 +08:00
James Newton-King a51fec8ff1
Update microsoft-support.md (#2403) 2024-04-05 06:09:28 +08:00
dependabot[bot] 874cd11637
Bump follow-redirects from 1.15.4 to 1.15.6 in /testassets/InteropTestsGrpcWebWebsite/Tests (#2392)
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.4 to 1.15.6.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.4...v1.15.6)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-19 08:27:13 +08:00
James Newton-King 933023b6f8
Prevent block inside ResolveAsync from blocking PollingResolver.Refresh (#2385) 2024-03-12 15:50:49 +08:00
apolcyn f29d927f42
update Grpc.Tools version to 2.62 (#2382) 2024-03-07 15:50:17 -08:00
James Newton-King 098dca892a
Fix OS detection error in UWP (#2376) 2024-02-27 10:27:13 +08:00
Sébastien Ros 787faa64c7
Set default streams value in grpc-client.yml (#2379) 2024-02-27 08:08:33 +08:00
apolcyn da2038226c
Merge pull request #2370 from apolcyn/bump_branch
Bump Grpc.Tools to 1.61.0
2024-02-07 16:52:00 -08:00
Alexander Polcyn 7cd4bc2447 bump Grpc.Tools 2024-02-07 21:07:42 +00:00
Tom Kerkhove 6d1ea08ce3
proposal: Build changelog based on previous stable version (#2269)
Co-authored-by: James Newton-King <james@newtonking.com>
Co-authored-by: Steve Dougherty <steve@asksteved.com>
2024-02-06 08:24:50 +08:00
James Newton-King 1a8435477f
Add missing package mapping for net9 feed (#2366) 2024-02-06 06:39:55 +08:00
James Newton-King 7f5b4574aa
Add .NET 9 NuGet feed (#2365) 2024-01-31 05:39:49 +08:00
James Newton-King 3103c6937f
Allow GrpcChannel to use WinHttpHandler on Windows Server 2019 (#2362) 2024-01-18 08:05:06 +08:00
James Newton-King 0cad7497d0
Add key services tests for service and interceptor (#2356) 2024-01-11 20:18:14 +08:00
dependabot[bot] 4b0b3589db
Bump follow-redirects from 1.15.3 to 1.15.4 in /testassets/InteropTestsGrpcWebWebsite/Tests (#2352)
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.3 to 1.15.4.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.3...v1.15.4)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-09 19:11:24 +08:00
James Newton-King e5c9528912
Grpc.StatusProto clean up (#2349) 2024-01-09 07:59:41 +08:00
James Newton-King abaaf4415c
Add ProtoStatus example (#2273) 2024-01-09 07:59:02 +08:00
tony 934bcec442
First pass at Grpc.StatusProto API (#2205) 2024-01-04 11:03:03 +08:00
James Newton-King f075c79e18
Fix cancellation token reported when using retries (#2345) 2024-01-03 07:29:05 +08:00
Stanley Cheung 87cce280d7
Bump dev version to 2.61.0-dev on master branch (#2337) 2023-12-13 16:52:53 -08:00
James Newton-King 998a8cc63b
Update Grpc.Tools to 2.60.0 (#2336) 2023-12-13 07:36:08 +08:00
James Newton-King 1625f89427
Trim regex from Grpc.AspNetCore (#2326) 2023-11-28 08:37:10 +08:00
James Newton-King 2bbb977dd2
Add Native AOT test (#2324) 2023-11-21 09:01:25 +08:00
James Newton-King ca9b756d73
Update to use Directory.Packages.props (#2315) 2023-11-18 12:55:16 +08:00
James Newton-King 4a60f414a1
Update to GA .NET 8 SDK (#2321) 2023-11-17 08:06:17 +08:00
dependabot[bot] e5afb085e0
Bump browserify-sign from 4.2.1 to 4.2.2 in /examples/Spar/Server/ClientApp (#2311)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-16 12:53:14 +08:00
dependabot[bot] 5e505b017a
Bump axios and wait-on in /testassets/InteropTestsGrpcWebWebsite/Tests (#2322)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-16 12:52:53 +08:00
dependabot[bot] 8d33f094d2
Bump @babel/traverse from 7.21.4 to 7.23.2 in /testassets/InteropTestsGrpcWebWebsite/Tests (#2300)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-16 12:30:50 +08:00
apolcyn e52049a94d
Merge pull request #2303 from apolcyn/update_59
Update grpc tools to 2.59
2023-10-24 11:56:11 -07:00
Alexander Polcyn 51ad5ab757 update grpc tools to 2.59 2023-10-19 17:06:17 +00:00
dependabot[bot] 3c4abbada1
Bump @babel/traverse from 7.17.3 to 7.23.2 in /examples/Spar/Server/ClientApp (#2298)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-18 08:26:41 +08:00
James Newton-King 91be3925c1
Fix HttpContext race by copying values to reader and writer (#2294) 2023-10-18 08:26:12 +08:00
apolcyn 683fbdfa5c
Merge pull request #2290 from apolcyn/bump_deps
Bump GrpcToolsPackageVersion to 2.58.0
2023-10-06 16:41:54 -07:00
Alexander Polcyn bad41ff570 bump GrpcToolsPackageVersion to 2.58.0 2023-10-06 17:07:13 +00:00
James Newton-King 207e8066f3
Dispose socket after connection failure (#2287) 2023-10-03 09:09:49 +08:00
James Newton-King 97f6fbd3fe
Fix detecting inherited WinHttpHandler (#2288) 2023-10-03 09:09:27 +08:00
James Newton-King 7e62218646
Add debugger display to Status (#2281) 2023-09-28 07:14:13 +08:00
James Newton-King 46480fca2f
Remove netstandard1.5 from some projects (#2279) 2023-09-21 21:50:13 +08:00
James Newton-King 40a26c9877
Support disabling load balancing with SocketsHttpHandler.Properties (#2274) 2023-09-12 13:33:15 +08:00
James Newton-King 246c43d457
Add request and channel to call debugging (#2271) 2023-09-06 10:27:29 +08:00
James Newton-King 91130a7c89
Update ServiceBinderBase.AddMethod annotations to allow null handler (#2270) 2023-09-05 21:50:58 +08:00
Jan Tattermusch 3f90844449
Start 2.58 development cycle. (#2267)
* Update version.props

* Update VersionInfo.cs
2023-08-31 16:17:08 +02:00
James Newton-King b50e46f851
Fix connection bugs from BalancerAddress changes (#2265) 2023-08-31 08:09:32 +08:00
James Newton-King 311f8784c6
Change subchannel BalancerAddress when attributes change (#2228) 2023-08-30 11:56:19 +08:00
James Newton-King b421751176
Fix unobserved exceptions with retries (#2255) 2023-08-29 09:19:51 +08:00
James Newton-King 41f67ad900
Log socket lifetime when closing unusable sockets (#2258) 2023-08-26 10:22:53 +08:00
James Newton-King a9e810c3df
Update call debugger display to show status code (#2259) 2023-08-26 10:21:57 +08:00
James Newton-King 6429ae2f57
Reduce logger allocations by not using generic CreateLogger (#2256) 2023-08-26 10:21:12 +08:00
James Newton-King 3db1683820
Add transport status to subchannel picked log (#2261) 2023-08-26 09:30:59 +08:00
Jan Tattermusch 01049834be
Update Grpc.Tools dependency to 2.57.0 (#2257) 2023-08-25 10:47:38 +02:00
James Newton-King ca3f2b9d51
Change subchannel ID to include a channel ID (#2253) 2023-08-24 20:50:24 +08:00
Jan Tattermusch aa2bc14f5e
upgrade QpsWorker to net8 (#2250) 2023-08-22 10:48:51 +02:00
James Newton-King a970fec15d
Clear IAsyncStreamReader<T>.Current value before reading next value (#2248) 2023-08-21 11:31:46 +08:00
James Newton-King 89dd217257
Update Grpc.Net.Client to use ActivitySource (#2244) 2023-08-18 07:37:19 +08:00
James Newton-King 2b1da779bf
Force yielding after awaiting CallTask to avoid holding onto locks (#2245) 2023-08-16 09:05:50 +08:00
dependabot[bot] 6ca24ef45b
Bump semver from 6.3.0 to 6.3.1 in /testassets/InteropTestsGrpcWebWebsite/Tests (#2243)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-15 11:57:15 +08:00
James Newton-King 5a8e2baf37
Update to use .NET 8 (#2021) 2023-08-15 10:19:29 +08:00
James Newton-King 854e0fd3d0
Update implementation_comparison.md (#2240) 2023-08-12 10:58:05 +08:00
James Newton-King 22a9549897
Update OS version detection to get version directly from Windows (#2239) 2023-08-12 08:17:32 +08:00
James Newton-King 870bf8443f
Improve comment in GrpcChannel for WinHttpHandler + OS validation (#2237) 2023-08-10 09:07:28 +08:00
James Newton-King 89e6611d2d
Fix load balancing flaky test (#2223) 2023-08-10 08:34:02 +08:00
James Newton-King a61e11f1e0
Consistently don't log message errors on cancellation (#2221) 2023-08-10 08:31:58 +08:00
James Newton-King d49fbe40d5
Update Newtonsoft.Json to 13.0.3 (#2219) 2023-08-10 08:31:45 +08:00
James Newton-King 4367702140
Update Grpc.Net.Client to remove ValueTask usage (#2222) 2023-08-10 07:43:31 +08:00
James Newton-King d305ee4bc6
Improve BalancerAttributes debugging (#2235) 2023-08-07 21:08:50 +08:00
James Newton-King 19e059f073
Support infinite idle connection timeout values (#2231) 2023-08-06 22:04:44 +08:00
James Newton-King cec98b28d5
Validate Windows version when using WinHttpHandler (#2229) 2023-08-04 16:59:10 +08:00
Jan Tattermusch 6420a8cf9f
Start 2.57.x development cycle (#2227)
* Update version.props

* Update VersionInfo.cs
2023-08-04 10:10:34 +02:00
Stephen Toub 6a4bca703a
Add net462 build to Grpc.Net.Client with WinHttpHandler default (#2220) 2023-08-02 10:53:02 +08:00
James Newton-King a2d005c86b
Correctly check socket on stream creation (#2215) 2023-08-02 09:34:21 +08:00
James Newton-King 1d1234064c
Support idle connection timeout with pending sockets (#2213) 2023-07-28 22:43:23 +08:00
James Newton-King 0ab3ada34a
Fix gRPC client retry deadlock (#2209) 2023-07-26 14:35:41 +08:00
James Newton-King bff852c7f1
Improve gRPC channel and client debugging (#2196) 2023-07-25 08:37:57 +08:00
James Newton-King e0677497de
Update SocketConnectivitySubchannelTransport.cs (#2202) 2023-07-25 08:19:29 +08:00
James Newton-King 03d9b01fbb
Socket transport: Don't close socket on available data (#2179) 2023-07-21 09:26:03 +08:00
Theodore Tsirpanis 6307ca7ead
Remove System.Memory dependency on .NET Standard 2.1 in Grpc.Core.Api. (#2186)
Co-authored-by: James Newton-King <james@newtonking.com>
2023-07-20 15:45:53 +08:00
dependabot[bot] 8275c602a9
Bump semver from 6.3.0 to 6.3.1 in /testassets/InteropTestsGrpcWebWebsite/Tests (#2189)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-20 09:36:15 +08:00
dependabot[bot] 1e32a39efa
Bump tough-cookie from 4.0.0 to 4.1.3 in /testassets/InteropTestsGrpcWebWebsite/Tests (#2187)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-20 08:45:44 +08:00
dependabot[bot] 5751c4dd3e
Bump word-wrap from 1.2.3 to 1.2.4 in /examples/Spar/Server/ClientApp (#2198)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-20 08:28:04 +08:00
dependabot[bot] 067bfc8fd8
Bump word-wrap from 1.2.3 to 1.2.4 in /testassets/InteropTestsGrpcWebWebsite/Tests (#2199)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-20 08:27:58 +08:00
James Newton-King d884b50a27
Even better gRPC debugging (#2193) 2023-07-17 18:12:00 +08:00
James Newton-King 85f34398df
Improve grpc-dotnet debugging (#2192) 2023-07-16 20:34:41 +08:00
Jan Tattermusch 16e01b9369
Start 2.56.x development cycle (on master branch) (#2185)
* Update version.props

* Update VersionInfo.cs

* Update dependencies.props
2023-06-30 17:11:08 +02:00
Varorbc 42cc09eb8f
update readme (#2183) 2023-06-28 20:35:35 +08:00
Jan Tattermusch 83d12ea1cb
Update version to 2.55.0-dev (on master branch) (#2177)
* Update version.props

* Update VersionInfo.cs
2023-06-23 14:28:22 +02:00
apolcyn 99604e5a9a
Merge pull request #2175 from apolcyn/revert
Revert "update 2.55 branch to 2.55-pre1"
2023-06-22 17:04:07 -07:00
Alexander Polcyn bc6da06036 Revert "update 2.55 branch to 2.55-pre1"
This reverts commit 266be407f6.
2023-06-22 23:35:39 +00:00
apolcyn 5a2887497e
Merge pull request #2174 from apolcyn/update_255
Update 2.55 branch to 2.55-pre1
2023-06-22 16:34:47 -07:00
Alexander Polcyn 266be407f6 update 2.55 branch to 2.55-pre1 2023-06-22 16:42:01 +00:00
apolcyn c72ada62e6
Update Grpc.Tools to 2.55 (#2171)
Co-authored-by: James Newton-King <james@newtonking.com>
2023-06-22 15:12:31 +08:00
James Newton-King 2be676ad3b
WriteAsync cancellation throws an error with the calls completed status if possible (#2170) 2023-06-22 15:12:17 +08:00
James Newton-King 73c726bf4e
Fix client factory extension method validation issues (#2159) 2023-06-14 19:52:18 +08:00
James Newton-King 697f3492f2
Refactor healthchecks service mapping to support filtering on check (#2142) 2023-06-14 13:11:42 +08:00
James Newton-King ff1a07b90c
Update Google.Protobuf to 3.23.1 (#2136) 2023-06-01 09:24:58 +08:00
James Newton-King 6bc44e97d7
Fix flaky streaming test (#2134) 2023-05-25 11:36:22 +08:00
James Newton-King f9a00bc490
Fix capturing ExecutionContext by timers and background tasks (#2129) 2023-05-17 10:27:38 +08:00
James Newton-King 2dc971e013
Add IReadOnlyDictionary to BalancerAttributes collection (#2121) 2023-05-17 07:17:35 +08:00
apolcyn 1412c31924
Merge pull request #2127 from JamesNK/jamesnk/grpctools-2.54.0
Update Grpc.Tools to 2.54.0
2023-05-16 08:41:46 -07:00
James Newton-King a95f0f08e9
Update Grpc.Tools to 2.54.0 2023-05-16 11:01:03 +08:00
James Newton-King 7786079da6
Fix bugs related to channel dispose while there are active calls (#2120) 2023-05-16 06:00:55 +08:00
James Newton-King 38738af700
Fix missing port from DnsResolver host override value (#2111) 2023-05-05 21:53:03 +08:00
James Newton-King 9427a740a4
Remove host override from container sample (#2109) 2023-05-02 13:26:36 +08:00
James Newton-King b83aece3cf
Make CancellationToken available in call credentials interceptor (#2107) 2023-05-02 06:28:29 +08:00
James Newton-King 8af472314e
Add remove method to balancer attributes collection (#2110) 2023-05-02 06:27:59 +08:00
James Newton-King 94a8167500
Change some gRPC client error logs to debug level (#2106) 2023-04-29 09:11:08 +08:00
Marc Gravell e270f816b4
Enable nullable throughout solution (#2102) 2023-04-27 20:42:51 +08:00
Jan Tattermusch 6bf44820a2
Update version to 2.54.0-dev (on master branch) (#2096)
* Update version.props

* Update VersionInfo.cs
2023-04-12 11:18:04 +02:00
Jan Tattermusch 0998624ce9
Update dependencies.props (#2094) 2023-04-12 10:37:33 +02:00
James Newton-King 54d7f29913
Change proxy detection to log a message (#2087) 2023-04-06 11:29:09 +08:00
James Newton-King b82c0c7354
Fix unobserved exception when using a client interceptor (#2082) 2023-03-22 15:34:37 +08:00
dependabot[bot] fb315ca62b
Bump webpack from 5.75.0 to 5.76.0 in /examples/Browser/Server/wwwroot (#2073)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-21 21:38:22 +08:00
James Newton-King c24dfebe22
Fix .NET 6 trimming constraint constructor (#2080) 2023-03-21 20:48:05 +08:00
James Newton-King 95cf7fc928
Improve error message with invalid headers (#2068) 2023-03-09 18:11:40 +08:00
Jan Tattermusch f056e80af0
Bump version to 2.53.0-dev (on master) (#2067)
* Update version.props

* Update VersionInfo.cs
2023-03-06 08:54:57 +01:00
Jan Tattermusch 23cd81fbdb
Update version to 2.52.0-dev on master (#2063)
* update version to 2.52.0-dev on master

* Update VersionInfo.cs

* Update dependencies.props
2023-03-02 14:50:11 +01:00
James Newton-King cfb839bd7c
Refactor gRPC content-type constraint to be inline (#2065)
* Refactor gRPC content-type constraint to be inline

* Fix tests

* Clean up

* Comment

* Comment
2023-03-02 12:50:26 +01:00
James Newton-King c2274eb07d
Add .editorconfig and fix warnings (#2055) 2023-02-25 21:43:59 +08:00
James Newton-King a456d47405
Wrap EventSource calls with IsEnabled (#2052) 2023-02-21 19:02:16 +08:00
James Newton-King 84718236a9
Update Google.Protobuf version (#2051) 2023-02-21 18:46:26 +08:00
James Newton-King 0b365bf463
Add additional connection and request logging to client (#2047) 2023-02-13 22:17:58 +08:00
dependabot[bot] 0f9300c439
Bump @sideway/formula from 3.0.0 to 3.0.1 in /testassets/InteropTestsGrpcWebWebsite/Tests (#2045)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-09 10:16:00 +08:00
James Newton-King ad54bc69ed
Add test that uses localization (#2039) 2023-02-06 11:12:54 +08:00
Pavel Voronin fc4d087d63
Mention Metadata.BinaryHeaderSuffix in xmldoc comments of Metadata.En… (#2027)
Co-authored-by: James Newton-King <james@newtonking.com>
2023-02-05 12:01:14 +08:00
James Newton-King 674758e4d3
Fix gRPC perf client counter (#2035) 2023-02-03 06:38:56 +08:00
James Newton-King 2cdbf1c308
Fix reporting RpcException from server streaming error (#2034) 2023-02-02 07:02:32 +08:00
James Newton-King 4bf9312123
Trimming issue workaround in .NET 8 (#2022) 2023-01-20 08:34:44 +08:00
James Newton-King 0a26b0cad6
Report user canceled cancellation token (#2018)
Co-authored-by: Brennan <brecon@microsoft.com>
2023-01-18 11:01:31 +08:00
James Newton-King b81a92d17b
Don't warn about Android native handler with grpc-web (#2020) 2023-01-18 09:01:41 +08:00
James Newton-King 4c07771aea
Update microsoft-support.md (#2009) 2023-01-18 06:45:04 +08:00
James Newton-King 948be08b08
Fix wrong namespace (#2015) 2023-01-11 20:15:12 +08:00
James Newton-King 96ea3836b4
Support zero-byte read in gRPC client (#1985) 2023-01-11 10:35:00 +08:00
James Newton-King 33f6ae36c9
Set WaitForDataBeforeAllocatingBuffer to false in benchmark app (#2012) 2023-01-09 07:42:50 +08:00
James Newton-King b92eb109f1
Add host override to resolvers (#2002) 2023-01-06 08:14:57 +08:00
James Newton-King f7e186f18e
Support running health checks in Check method (#1987) 2023-01-06 07:44:21 +08:00
James Newton-King 2ea8177bc8
Fix reconnecting after connection timeout (#1998) 2023-01-05 07:08:04 +08:00
James Newton-King 3a356b3719
Add client factory to client linker test app (#1972) 2023-01-05 07:04:10 +08:00
dependabot[bot] ff89215fbc
Bump json5 from 1.0.1 to 1.0.2 in /examples/Spar/Server/ClientApp (#2007)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-04 09:41:27 +08:00
dependabot[bot] 9ab0b4508f
Bump json5 from 2.2.0 to 2.2.3 in /testassets/InteropTestsGrpcWebWebsite/Tests (#2005)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-04 09:41:19 +08:00
dependabot[bot] d2c8146302
Bump json5, webpack and webpack-cli in /examples/Browser/Server/wwwroot (#2003)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-04 09:32:44 +08:00
Jan Tattermusch d2c5a7a5b9
Additional dependency version cleanup (after moving some nuget packages to from grpc to grpc-dotnet) (#1786) 2023-01-04 09:21:59 +08:00
James Newton-King 8474b75b41
Support writing to response stream with gRPC-Web middleware (#1993) 2022-12-21 07:03:54 +08:00
Jan Tattermusch d4704d8f44
RpcException API improvements (#1992)
* RpcException: include status.DebugException as InnerException

* make Status.ToString() less verbose

* add tests

* Apply suggestions from code review

Co-authored-by: James Newton-King <james@newtonking.com>

Co-authored-by: James Newton-King <james@newtonking.com>
2022-12-20 19:44:26 +01:00
James Newton-King 11e7cfa3da
Update MAINTAINERS.md (#1979) 2022-12-15 10:54:33 +01:00
James Newton-King 1a9cf64a72
Cancel pending state change watchers on dispose (#1986) 2022-12-13 09:58:44 +08:00
James Newton-King 5a0b1eec01
Skip active connections when proxy is configured (#1863) 2022-12-08 16:23:24 +08:00
James Newton-King 17ef8fdbe5
Make ChannelCredentials.Create work with allowing insecure credentials (#1802) 2022-12-08 11:01:49 +08:00
dependabot[bot] cb88ac90ca
Bump decode-uri-component from 0.2.0 to 0.2.2 in /examples/Browser/Server/wwwroot (#1976)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-08 11:01:12 +08:00
dependabot[bot] c72d1a82a5
Bump decode-uri-component from 0.2.0 to 0.2.2 in /examples/Spar/Server/ClientApp (#1977)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-08 11:00:55 +08:00
James Newton-King 3ae11a4cef
Add logging to resolve to indicate resolve is complete (#1978) 2022-12-08 10:11:43 +08:00
James Newton-King a98c6218e0
Update dotnet-grpc tool to require .NET 6 (#1932) 2022-12-08 07:53:01 +08:00
Jan Tattermusch 664f5559f6
Update version to 2.51.0-dev (on master branch) (#1973)
* update version to 2.51.0-dev

* Update VersionInfo.cs

* Update Grpc.Tools dependency version
2022-12-07 15:54:35 +01:00
Felix Winterhalter e28a43ffed
fix: Fixes missing constructor in trimmed builds (#1970)
Closes https://github.com/grpc/grpc-dotnet/issues/1969
2022-12-07 10:07:22 +08:00
dependabot[bot] bb406e8bfa
Bump minimatch from 3.0.4 to 3.1.2 in /examples/Browser/Server/wwwroot (#1958)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-23 21:08:34 +08:00
dependabot[bot] 80e2fabcf9
Bump loader-utils and webpack-cli in /examples/Browser/Server/wwwroot (#1957)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-22 10:20:22 +08:00
James Newton-King 23047e0d49
Change channel transport property to readonly (#1947) 2022-11-16 15:10:09 +08:00
James Newton-King 91ac7754f2
Update to GA .NET 7 SDK (#1943) 2022-11-11 22:15:34 +08:00
James Newton-King faf6234b3d
Add .NET 8 feed to sources (#1940) 2022-11-10 09:39:32 +08:00
Jan Tattermusch 25f7b137d7
Revert "Update version to 2.50.0-pre1 (on v2.50.x branch) (#1935)" (#1936)
This reverts commit 0828c036bb.
2022-11-03 09:07:43 +01:00
James Newton-King 97b7f6d4d7
Improve logging message when gRPC status OK in header (#1931) 2022-11-03 09:29:52 +08:00
Jan Tattermusch 0828c036bb
Update version to 2.50.0-pre1 (on v2.50.x branch) (#1935)
* Update version to 2.50.0-pre1 (on v2.50.x branch)

* Update VersionInfo.cs
2022-11-02 15:43:25 +01:00
Jan Tattermusch 6c48114e67
Update Grpc.Tools dependency to 2.50.0 (#1934) 2022-11-02 10:01:28 +01:00
James Newton-King 7154cb470d
Detect native HttpHandler on Android (#1927) 2022-11-01 16:43:11 +08:00
James Newton-King 4c2e66ed85
Enable AOT analysis and fix warnings (#1924) 2022-10-25 06:12:30 +08:00
James Newton-King 45dd5d171c
Fix build failure on benchmark server V2 (#1920) 2022-10-19 06:15:18 +08:00
James Newton-King 947a24aefe
Upgrade dotnet-grpc dependencies (#1914) 2022-10-18 08:57:10 +08:00
James Newton-King 22ac73b110
Fix build failure on benchmark server (#1913) 2022-10-17 13:09:24 +08:00
dependabot[bot] e7fd8004c0
Bump minimist, minimist and mkdirp in /examples/Browser/Server/wwwroot (#1910)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-12 04:07:42 +08:00
dependabot[bot] e86adbf656
Bump ansi-regex from 3.0.0 to 3.0.1 in /examples/Spar/Server/ClientApp (#1911)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-12 04:07:30 +08:00
dependabot[bot] 3617dc1c78
Bump ansi-regex from 4.1.0 to 4.1.1 in /examples/Browser/Server/wwwroot (#1909)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-12 04:07:20 +08:00
James Newton-King cb02fb7e8f
Update transcoder example (#1887) 2022-10-12 03:51:08 +08:00
Brennan ad67dc8d27
Fix grpc benchmark cancellation (#1901) 2022-10-06 07:27:29 +08:00
James Newton-King 456098bcfe
Update Grpc.DotNet.sln to use file scoped namespaces (#1894) 2022-10-05 22:17:09 +08:00
Eduard Llull 371d74fc95
Use the extending class name when throwing ObjectDisposedException (#1890) 2022-09-26 21:50:07 +08:00
Jan Tattermusch 0f5c5782e3
Update Grpc.Core and Grpc.Tools dependencies. (#1892) 2022-09-26 12:26:10 +02:00
James Newton-King 0ab5e2c509
Change examples to use WebApplication V3 (#1878) 2022-09-17 10:28:31 +08:00
James Newton-King 9950fd717b
Fix race condition in flaky test (#1883) 2022-09-14 08:49:46 +08:00
James Newton-King 9852674a88
Fix detecting message accept encoding with whitespace (#1882) 2022-09-14 08:39:39 +08:00
James Newton-King 54fa142547
Change examples to use WebApplication V4 (#1879) 2022-09-13 12:41:50 +08:00
James Newton-King 195e1c0922
Change examples to use WebApplication V2 (#1877) 2022-09-13 12:07:07 +08:00
James Newton-King 7980069be0
Change examples to use WebApplication V1 (#1875) 2022-09-13 10:29:46 +08:00
James Newton-King 884d918e3c
Improve transcoder example with swagger (#1871) 2022-09-05 14:15:27 +08:00
James Newton-King 792eb3b570
Fix using disposed token in connect and resulting status (#1872) 2022-09-01 21:34:21 +08:00
Jan Tattermusch 8ae9c96c18
Update the version to v2.50.0-dev (on master branch) (#1867)
* Update version.props

* Update VersionInfo.cs
2022-09-01 15:25:30 +02:00
James Newton-King 937869c130
Log sync errors in client logger interceptor example (#1868) 2022-08-31 09:39:53 +08:00
James Newton-King 2116d1efce
Configure pooled connection lifetime in client factory (#1862) 2022-08-30 06:31:28 +08:00
James Newton-King 7bfd8e385a
Update solution to .NET 7 (#1803) 2022-08-27 12:42:38 +08:00
James Newton-King 922d314630
Load balancing fix to clear disposed subchannels on resolver error (#1853)
Co-authored-by: Francois Nel <francois.nel@iotnxt.com>
2022-08-26 08:56:09 +08:00
James Newton-King 0551be8b6b
Remove bad deadline test (#1859) 2022-08-26 07:29:27 +08:00
James Newton-King 1d7f98834c
Add Channeler example (#1851) 2022-08-25 09:55:31 +08:00
James Newton-King 4f06b601aa
Change nullable GetValueOrDefault to Value (#1855)
Co-authored-by: Günther Foidl <gue@korporal.at>
2022-08-24 14:20:54 +08:00
Mayuki Sawatari 77ae8af69c
Use PoolingAsyncValueTaskMethodBuilder on ReadStreamMessageAsync method (#1850)
Co-authored-by: James Newton-King <james@newtonking.com>
2022-08-18 13:41:05 +08:00
Jan Tattermusch d250e28e70
Update version to 2.49.0-dev (on master branch) (#1849)
* bump version to 2.49

* Update VersionInfo.cs
2022-08-17 12:59:58 +02:00
Jan Tattermusch 4e9077c9ae
Update Grpc.Tools dependency to 2.48.0 (#1847) 2022-08-17 11:57:15 +02:00
James Newton-King 3934c6c702
Improve tester example to log errors and have non-success test (#1841) 2022-08-12 11:18:29 +08:00
James Newton-King a3717a3587
Add more load balancing logging (#1791) 2022-07-30 16:28:07 +08:00
dependabot[bot] ca40f28ab7
Bump terser from 4.4.3 to 4.8.1 in /examples/Browser/Server/wwwroot (#1827)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-30 11:16:38 +08:00
James Newton-King 5ff18048d1
Use SocketsHttpHandler.ConnectTimeout on connect (#1829)
Co-authored-by: Brennan <brecon@microsoft.com>
2022-07-29 20:17:34 +08:00
James Newton-King 9d0919fe05
Use Array.Empty in benchmark when response size is zero (#1819) 2022-07-14 09:27:15 +08:00
James Newton-King c319c44ec8
Add locator example (#1796)
Co-authored-by: Bruno Oliveira <brunolins16@users.noreply.github.com>
2022-07-13 13:51:22 +08:00
James Newton-King 25c2b9115a
Update README.md (#1816) 2022-07-13 06:17:11 +08:00
James Newton-King b77a58963b
Update README.md (#1817) 2022-07-13 06:17:02 +08:00
James Newton-King a984c6d55c
Fix client factory trim warning (#1806) 2022-07-06 06:03:55 +08:00
James Newton-King 7a6e2fe207
Use NuGet package in Vigor example (#1805)
Co-authored-by: Michael Maxwell <mike.ian.maxwell@gmail.com>
2022-07-03 10:36:56 +08:00
Xue Qianming 5f587ae2e0
Don't use sum for latency (#1798) 2022-07-02 08:05:54 +08:00
James Newton-King 6507e9bf37
Update open telemetry packages (#1801) 2022-07-02 07:26:01 +08:00
James Newton-King 2923260a0c
Populate DebugException on some cancellation scenarios (#1780) 2022-06-29 06:08:11 +08:00
James Newton-King de472b186c
Add health service integration test (#1793)
Co-authored-by: Brennan <brecon@microsoft.com>
2022-06-29 06:07:01 +08:00
Jan Tattermusch d9755701cf
Update version to 2.48.0-dev (#1795)
* Update version to 2.48.0-dev

* Update VersionInfo.cs
2022-06-28 13:45:40 +02:00
Jan Tattermusch cbb0836991
Update release_process.md to match the current state of things (#1788) 2022-06-28 10:06:29 +02:00
James Newton-King 78d11d14ad
Fix sharing SocketsHttpHandler between channels (#1792) 2022-06-28 08:07:30 +08:00
Jan Tattermusch 6bbbf36277
Use GrpcToolsPackageVersion property for Grpc.Tools dependencies (#1785)
* introduce new GrpcToolsPackageVersion property

* use GrpcToolsPackageVersion in dotnet-grpc.csproj

* update release_process.md

* update GrpcPackageVersion
2022-06-23 13:28:52 +02:00
James Newton-King 58cd9dc9cb
Fix benchmarks when callCount isn't specified (#1783) 2022-06-23 07:47:08 +08:00
James Newton-King 543c363c5e
Add HTTP event source logging to gRPC benchmark server (#1773) 2022-06-21 12:25:50 +08:00
James Newton-King 2c175e01ca
Pass call count argument to benchmark client (#1772) 2022-06-19 15:11:30 +08:00
James Newton-King f850d75d85
Add HTTP event source logging to gRPC benchmark client (#1771) 2022-06-19 13:53:14 +08:00
Jan Tattermusch 0ddbb72c3e
Revert "Change InteropTestClient to net5.0 (#1514)" (#1765)
This reverts commit d2035de5f6.
2022-06-07 10:11:05 +02:00
James Newton-King c0779fc83f
Validate AddCallCredentials are used by client (#1756) 2022-05-24 18:53:28 +08:00
James Newton-King fedf5ab017
Make getting lazy properties on ServiceConfig threadsafe (#1752)
Co-authored-by: Brennan <brecon@microsoft.com>
2022-05-20 09:16:18 +08:00
James Newton-King 1f5186e6a7
Fix warnings when running benchmarks in .NET 7 (#1749) 2022-05-20 07:37:44 +08:00
James Newton-King 4b10c6c7bf
Transcoder sample clean up (#1753) 2022-05-19 20:36:54 +08:00
Jan Tattermusch e616db6506
Revert "Transcoding example cleanup (#1734)" (#1751)
This reverts commit 9e073cd6e6.
2022-05-18 16:21:17 +02:00
James Newton-King 9e073cd6e6
Transcoding example cleanup (#1734) 2022-05-16 12:51:46 +08:00
James Newton-King 52c6154435
Catch any potential error from deadline callback (#1737) 2022-05-16 12:41:16 +08:00
James Newton-King be641b6ffe
Re-enable trim analysis and fix warnings (#1744) 2022-05-16 12:40:46 +08:00
Daniel Vieira Vega 248c580a7c
Ensuring required services are registered when using the server reflection (#1732) 2022-05-14 20:37:44 +08:00
James Newton-King 7cf2aa077c
Add JSON transcoding example (#1724) 2022-05-11 00:26:19 +08:00
James Newton-King d7cf5a83dd
Add AddCallCredentials overload that actually takes CallCredentials (#1723) 2022-05-09 08:18:50 +08:00
Jan Tattermusch 3f63a9ac94
Run interop tests against another language instead of Grpc C# (Grpc.Core) (#1721)
* run interop tests against Java instead of Grpc C# (Grpc.Core)

* run interop against C++ to avoid needing to clone another repo
2022-04-29 15:06:45 +02:00
Jan Tattermusch 3ac2881a7a
add Grpc.Auth, Grpc.Core.Api, Grpc.HealthCheck and Grpc.Reflection to build_nuget.sh (#1717) 2022-04-29 15:06:28 +02:00
Jan Tattermusch c46859372f
Move Grpc.HealthCheck and Grpc.Reflection from grpc/grpc (#1708)
* add Grpc.HealthCheck, Grpc.Reflection subtrees (and corresponding tests) at fb4b6c7776a961d0106bb46a6d2ab8832dd87c0c

* initial Grpc.HealthCheck adjustments

* make analyzer for Grpc.HealthCheck happy

* get rid of the Grpc.HealthCheck GRPC_SUPPORT_WATCH ifdef

* add Grpc.HealthCheck readme

* add a TODO

* make Grpc.Reflection buildable

* add Grpc.Reflection README.md

* progress to make Grpc.HealthCheck.Tests work

* progress to make Grpc.Reflection.Tests work

* projectreference to Grpc.HealthCheck and Grpc.Reflection

* add Grpc.HealthCheck and Grpc.Reflection to the solution

* add Grpc.HeathCheck.Tests and Grpc.Reflection.Tests to the solution

* make Grpc.HealthCheck.Tests and Grpc.Reflection.Tests temporarily depend on Grpc.Core nuget
2022-04-29 10:13:10 +02:00
Jan Tattermusch 38845e5523
Move Grpc.Auth nuget from grpc/grpc (#1652)
* add Grpc.Auth tree at 730599bd5b68f12436907cd96ab3fb20579734e7

730599bd5b/src/csharp/Grpc.Auth

* Grpc.Auth adjustments

* fix nullability warning

* add a TODO

* Grpc.Auth.csproj cleanup

* update references to Grpc.Auth to ProjectReference

* add Grpc.Auth.csproj to the solution

* fix doc comment format

Co-authored-by: James Newton-King <james@newtonking.com>

* remove unnecessary .gitignore

Co-authored-by: James Newton-King <james@newtonking.com>
2022-04-29 09:37:30 +02:00
Jan Tattermusch 819dea5af6
Move Grpc.Core.Api nuget from grpc/grpc (#1651)
* add Grpc.Core.Api tree (at SHA dd14f803c3beb433c41be91672c6a7a6eeb8727c)

dd14f803c3/src/csharp/Grpc.Core.Api

* initial adjustments to make Grpc.Core.Api buildable

* fix analyzer warnings in Grpc.Core.Api

* net462 fixup

* bin obj already in gitignore

* add TODOs

* add Grpc.Core.Api to the solution

* pack README.md

* start using net45 again

* add Grpc.Core.Tests tree at e9ece8f7469e667d5202be134bd88980630dba95

e9ece8f746/src/csharp/Grpc.Core.Tests

* remove gitignore

* initial adjustments

* more project adjustments

* remove Grpc.Core specific tests

* Grpc.Core.Api: make internals visible to Grpc.Core.Api.Tests

* remove ChannelOptionsTest (only relevant to Grpc.Core

* CallOptions.Normalize is only implemented in Grpc.Core

* CallCredential.ToNativeCredentials extension method only exists in Grpc.Core

* CallOptionsTest: add TODO

* ChannelCredentials.ToNativeCredentials() only exists in Grpc.Core

* add Grpc.Core.Api.Tests to the solution

* cleanup Grpc.Core.Api.Tests.csproj

* fix versions in VersionInfo.cs

* Version.cs no longer needed (same attributes set elsewhere

* add VersionInfoTest to make sure VersionInfo.cs stays up to date

* cleanup Grpc.Core.Api.csproj

* remove net45-compatibility code

* switch Grpc.Core.Api to net462

* use ProjectReference for Grpc.Core.Api

* add script for updating VersionInfo.cs

* update VersionInfo.cs
2022-04-28 10:22:46 +02:00
Jan Tattermusch 7d2c3c169a
Update version to 2.47.0-dev (on master branch) (#1716) 2022-04-28 10:08:53 +02:00
James Newton-King 7d013e0121
Add call credential methods to client factory and flag to always use call credentials (#1705)
* Add auth interceptor helpers to client factory and flag to always use

* Clean up

* Clean up

* Refactor to use context

* Clean up
2022-04-28 09:48:45 +02:00
James Newton-King a2c907f69d
Fix race when using shared config (#1714) 2022-04-28 09:38:18 +02:00
James Newton-King 24245fd677
Create microsoft-support.md (#1316) 2022-04-28 08:52:04 +08:00
James Newton-King 5982753253
Fix benchmarks defaulting call count to zero (#1711) 2022-04-27 19:08:45 +08:00
James Newton-King 770947bd25
Upgrade System.Commandline and add command line tests (#1700) 2022-04-23 22:16:22 +08:00
Sébastien Ros c9b8aa7dec
Update server address variable for new profiles (#1701) 2022-04-22 05:30:59 +08:00
James Newton-King af4a858335
Place XML comment hrefs in see elements (#1696) 2022-04-20 06:07:08 +08:00
tal66 713935fbf7
Add downloader example (#1695) 2022-04-18 22:13:21 +08:00
James Newton-King d2cc71676a
Add resolver retry to PollingResolver (#1685) 2022-04-18 11:31:23 +08:00
James Newton-King 0ebfff1e83
Update Directory.Build.targets (#1692) 2022-04-18 11:31:09 +08:00
James Newton-King db0dafc78a
Fix call cancellation impacting other calls (#1688) 2022-04-18 11:21:51 +08:00
Wade Pickett 2bb25cab6c
Update README.md: small edit to indicate .NET 3.0 or later. (#1693) 2022-04-18 10:28:36 +08:00
James Newton-King 197b43bbf7
Update MAINTAINERS.md (#1674) 2022-04-14 11:05:28 +02:00
James Newton-King d02f71a759
Fix up nullable annotations for additionalImportDirs (#1673) 2022-04-11 07:34:33 +08:00
James Newton-King 70dd439625
Fix flaky load balancer test (#1677) 2022-04-11 07:31:57 +08:00
Jan Tattermusch 4728d65414
Update version to 2.46.0-dev on master (#1676) 2022-04-07 09:15:45 +02:00
Jan Tattermusch d45c350307
Update Grpc.Core dependency to 2.45.0 (#1659) 2022-04-06 17:16:56 +02:00
Bruno Martins 737f712afe
Issue #1665: added null validation (#1666)
Co-authored-by: James Newton-King <james@newtonking.com>
2022-04-06 08:35:18 +08:00
James Newton-King bfe312a3ba
Support WriteAsync cancellation token (#1645) 2022-04-06 08:20:35 +08:00
James Newton-King 295165518d
Reconnect backoff configuration (#1668) 2022-04-06 08:09:37 +08:00
James Newton-King 87680d504a
Fix unobserved exception from failed calls (#1660) 2022-04-06 07:57:13 +08:00
James Newton-King bbbfdc0f02
Fix calls throw TaskCanceledException after previous call is canceled (#1664) 2022-04-06 07:35:12 +08:00
dependabot[bot] 9f83f9b5ef
Bump minimist from 1.2.5 to 1.2.6 in /testassets/InteropTestsGrpcWebWebsite/Tests (#1662)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-02 09:04:01 +08:00
dependabot[bot] 6d3e6af1e1
Bump minimist from 1.2.5 to 1.2.6 in /examples/Spar/Server/ClientApp (#1658)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-02 09:03:36 +08:00
James Newton-King f238855fcb
Update Grpc.Core.Api to 2.45.0-pre1 and remove nullable todos (#1644) 2022-03-23 12:36:45 +08:00
James Newton-King d0272085d9
Update examples to use 2.44.0 (#1636) 2022-03-18 15:31:29 +08:00
James Newton-King ea5f673c10
Add port to subdirectory handler and remove old references (#1635) 2022-03-17 18:19:00 +08:00
dependabot[bot] 1cc747cfbf
Bump lodash from 4.17.15 to 4.17.21 in /examples/Browser/Server/wwwroot (#1639)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-16 17:14:58 +08:00
James Newton-King 0551d6aa2e
Add gRPC benchmark QpsWorker (#1617) 2022-03-16 13:34:51 +08:00
James Newton-King b401c2c7e3
Log HTTP method when adding endpoint (#1637) 2022-03-16 09:20:42 +08:00
Jan Tattermusch 05c25a3c5e
Update version to v2.45.0-dev (on master branch) (#1633) 2022-03-09 12:15:50 +01:00
Jan Tattermusch 502648751e
Update Grpc dependency to 2.44.0 (#1631)
* Update Grpc dependency to 2.44.0

* update protobuf version to 3.19.2
2022-03-09 06:32:51 +01:00
James Newton-King d4ee8babcd
Final load balancing review feedback (#1626) 2022-03-02 14:54:33 +08:00
James Newton-King b001e02756
Add ISubchannelCallTracker (#1621) 2022-03-01 10:26:33 +08:00
James Newton-King 41b8e2e76a
Log DebugException from RpcException if present (#1625) 2022-03-01 09:19:53 +08:00
James Newton-King f47ac6bfb8
Update interceptors example to use new GetValue method (#1624) 2022-03-01 09:19:10 +08:00
James Newton-King f01df42b02
Update interop tests to use modern package lock file (#1615) 2022-02-22 19:33:11 +13:00
James Newton-King 7057da7ae7
Narrow GrpcWebMiddleware rules to only rewrite POST requests (#1618) 2022-02-22 17:01:36 +13:00
James Newton-King 15d027bc93
Update spar example app to use modern package lock file (#1614) 2022-02-22 15:17:36 +13:00
James Newton-King 5c206d0e9f
Fix formatting (#1601) 2022-02-17 14:27:24 +13:00
dependabot[bot] b3e8ba64ee
Bump follow-redirects in /testassets/InteropTestsGrpcWebWebsite/Tests (#1612)
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.5 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.5...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-15 17:46:43 +13:00
dependabot[bot] 85b92220ec
Bump ajv from 6.10.2 to 6.12.6 in /examples/Browser/Server/wwwroot (#1611)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-15 14:53:01 +13:00
dependabot[bot] 5641257032
Bump ajv from 6.12.2 to 6.12.6 in /examples/Spar/Server/ClientApp (#1610)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-15 14:52:29 +13:00
dependabot[bot] a007d43bc7
Bump y18n from 3.2.1 to 3.2.2 in /examples/Browser/Server/wwwroot (#1606)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-11 09:05:36 +13:00
dependabot[bot] bdcd0eaf12
Bump tar from 4.4.13 to 4.4.19 in /examples/Browser/Server/wwwroot (#1605)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-11 09:04:47 +13:00
James Newton-King 11d7151e7f
Increase deadline precision offset (#1604) 2022-02-11 08:55:04 +13:00
James Newton-King fa546befa2
NuGet readme clean up and fixes (#1602) 2022-02-11 07:57:33 +13:00
James Newton-King 21a1412b87
Remove unused HasBufferedMessage property (#1600) 2022-02-08 15:46:42 +13:00
James Newton-King aed01fe9f4
Fix multiple context propagation configs (#1596) 2022-02-04 15:49:20 +13:00
Ernest Nguyen 137e377efb
Complete Interceptor example (#1598)
Co-authored-by: James Newton-King <james@newtonking.com>
2022-02-03 13:07:11 +13:00
James Newton-King 306abc2979
Update samples to use v2.43-pre1 (#1594) 2022-02-01 16:32:37 +13:00
James Newton-King 915b15de18
Improve EnableCallContextPropagation docs (#1591) 2022-02-01 16:28:32 +13:00
Jan Tattermusch 1d60a7c02d
Update version to 2.44.0-dev (#1593) 2022-01-28 20:29:05 +01:00
James Newton-King 282fa2af8f
Remove Subchannel.State and track state inside load balancer (#1590) 2022-01-28 09:55:22 +13:00
dependabot[bot] 82f89083ed
Bump color-string from 1.5.3 to 1.9.0 in /examples/Spar/Server/ClientApp (#1588)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-26 13:14:32 +13:00
dependabot[bot] 3a355c21c7
Bump ws from 5.2.2 to 5.2.3 in /examples/Spar/Server/ClientApp (#1587)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-26 13:14:19 +13:00
dependabot[bot] 1d18ed324b
Bump path-parse from 1.0.6 to 1.0.7 in /examples/Spar/Server/ClientApp (#1586)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-26 10:09:08 +13:00
James Newton-King 7b95a53cf2
Add readonly to record structs (#1584) 2022-01-26 09:57:12 +13:00
James Newton-King 3add750544
Add failure microbenchmark (#1581) 2022-01-22 07:37:13 +13:00
James Newton-King a08e7372ff
Fix running HTTP/3 on benchmark environment (#1580) 2022-01-22 07:36:21 +13:00
James Newton-King da6dcc5ca2
Fix running microbenchmarks on .NET 6 (#1579) 2022-01-22 07:35:58 +13:00
Jan Tattermusch 6cc34ee5e7
Update Grpc dependency to 2.43.0 (#1576)
Co-authored-by: James Newton-King <james@newtonking.com>
2022-01-21 07:06:58 +13:00
Jan Tattermusch 257da89bf1
Update version to 2.43.0-dev on master branch (#1575) 2022-01-20 09:27:55 +01:00
James Newton-King ea7a00e7e2
Lower client error logging level (#1577) 2022-01-20 10:01:32 +13:00
James Newton-King 687fbb44a0
Split AsyncResolver out of Resolver (#1573) 2022-01-19 21:49:55 +13:00
James Newton-King 1215046255
Add embedded readme to most used NuGet packages (#1570) 2022-01-19 10:36:42 +13:00
James Newton-King 6d4892c487
Add health checks service mapping configuration (#1565) 2022-01-19 10:36:02 +13:00
James Newton-King 2ff1f4ef8e
Subchannel sockets transport cleanup and tests (#1562) 2022-01-15 21:52:10 +13:00
彭伟 eb813a798a
Fix different activitiy types sent to diagnostic source (#1559)
Co-authored-by: James Newton-King <james@newtonking.com>
2022-01-14 08:52:01 +13:00
James Newton-King 518a6362ba
Fix load balancing subchannel compare and dispose error (#1554) 2022-01-11 15:25:36 +13:00
James Newton-King a04684ab23
Add client testing to Tester example (#1551) 2022-01-05 08:21:53 +13:00
James Newton-King a23602367d
Fix race between deadline and Stream.ReadAsync (#1550) 2022-01-04 11:10:29 +13:00
James Newton-King 1ac3a3f3be
Use IHttpActivityFeature to get host activity (#1545)
Co-authored-by: Safia Abdalla <safia@safia.rocks>
2022-01-04 08:59:36 +13:00
James Newton-King 9c936f3ca5
Add deflate compression to .NET 6 (#1548) 2022-01-04 08:42:53 +13:00
James Newton-King 6acecf4ad4
Fix client with custom ConnectCallback (#1542) 2021-12-29 09:21:39 +13:00
Jan Tattermusch 3ebcc938a9
Update Grpc.Core.Api dependency to 2.42.0 (#1539)
Co-authored-by: James Newton-King <james@newtonking.com>
2021-12-29 09:15:31 +13:00
James Newton-King 8fa8389812
Add uploader sample (#1529) 2021-12-22 16:48:33 +13:00
James Newton-King bce585246d
Code clean up across solution (#1530) 2021-12-22 15:52:54 +13:00
James Newton-King 7d081d7c26
Add accept header to grpc-web-text requests (#1522) 2021-12-16 11:27:23 +13:00
James Newton-King 520c57415e
Change Resolver.ResolveAsync to virtual (#1523) 2021-12-16 11:27:09 +13:00
James Newton-King d5626ab20b
Publish Grpc.AspNetCore.HealthChecks package (#1509) 2021-12-02 16:03:48 +13:00
James Newton-King d2035de5f6
Change InteropTestClient to net5.0 (#1514) 2021-12-01 13:09:53 +13:00
James Newton-King fb42fc0c8a
Add diagnostic listener to interop client (#1513) 2021-12-01 10:24:38 +13:00
James Newton-King 16a1bb4ca4
Log BalancerAddress instead of DnsEndPoint in load balancing (#1504) 2021-12-01 09:41:21 +13:00
James Newton-King 78bf205a90
Update examples to .NET 6 (#1507) 2021-12-01 09:33:15 +13:00
James Newton-King 747088e5b8
Update JS test packages (#1505) 2021-12-01 09:21:58 +13:00
James Newton-King b9cb8806ae
Update all solution projects to .NET 6 (#1503)
Co-authored-by: Safia Abdalla <safia@safia.rocks>
2021-11-24 20:41:18 +13:00
James Newton-King 0d5a300154
Add interceptor with GetStatus tests (#1502) 2021-11-24 20:11:36 +13:00
James Newton-King 868adfe377
Various fixes recommended by analysis (#1498) 2021-11-22 13:14:51 +13:00
James Newton-King f5e4ad7384
Add .NET 7 package source to fix benchmarks (#1496) 2021-11-22 13:08:55 +13:00
James Newton-King 7ef184f3c4
Enable implicit namespaces and clean up usings (#1497) 2021-11-22 13:05:14 +13:00
Maksim Ivanyuk 5d447fdc8e
set backslash as path separator for Protobuf item (#1323)
* set backslash as path separator for Protobuf item

* add tests

* remove unused method
2021-11-16 17:17:59 -08:00
James Newton-King dce1ef72d8
DNS resolver fix port usage (#1493)
Co-authored-by: Vuk Vasić <hasterson123@gmail.com>
2021-11-17 06:13:39 +13:00
James Newton-King 202985251b
Refactor client load balancing resolver (#1491) 2021-11-16 21:20:53 +13:00
James Newton-King e48a0364d5
Resolver has separate error for fetching service config (#1475) 2021-11-16 20:50:33 +13:00
James Newton-King 00f7601709
Add unit test for client factory and HTTP/3 (#1487) 2021-11-16 20:16:24 +13:00
James Newton-King 763d3b99a3
Unit test least used balancer (#1473) 2021-11-12 12:58:25 +13:00
Jan Tattermusch a7c6c47bc4
Update Grpc.Core.Api dependency to 2.41.0 (on master branch) (#1484) 2021-11-12 06:42:33 +13:00
Jan Tattermusch b1e7b44387
Sanity check for user agent string length not useful (#1485) 2021-11-12 06:40:05 +13:00
Jan Tattermusch b04688b437
Update version to 2.42.0-dev (on master branch) (#1480) 2021-11-11 10:31:39 +01:00
James Newton-King 530eb1c25c
Add support for per-address attributes (#1472) 2021-11-09 12:00:27 +13:00
James Newton-King 82dec0ff51
Fix server trim error from dependency injection (#1471) 2021-11-08 21:07:43 +13:00
James Newton-King a9b0064a66
Fix trim warnings (#1465) 2021-11-05 15:47:08 +13:00
James Newton-King d5682d4823
Update retrier sample (#1464) 2021-11-04 10:19:46 +13:00
James Newton-King afe2100cda
Update example README.md with container example (#1437) 2021-10-12 14:28:11 +13:00
James Newton-King c85ca5c432
Reset HTTP/3 request on deadline exceeded (#1446) 2021-10-12 14:27:16 +13:00
James Newton-King 48eb2e9074
Ensure That Timer Callback Does not Call Method on Disposed Timer (#1445)
Co-authored-by: thefringeninja <495495+thefringeninja@users.noreply.github.com>
2021-10-12 08:08:55 +13:00
Safia Abdalla f777808fa1
Address followups in UserAgentGenerator code (#1423)
* Address followups in UserAgentGenerator code

* Address more feedback from review

* Fix typo in method name
2021-10-07 20:45:35 -07:00
James Newton-King cb2f9d7826
Fix race by throwing response error after completing call (#1443) 2021-10-08 10:30:49 +13:00
James Newton-King 17b2beb9b7
Refactor client factory channel and interceptor lifetime (#1430) 2021-10-06 14:34:50 +13:00
James Newton-King b63993f40d
Add detail to server RPC error log message and remove exception (#1436) 2021-10-05 16:43:28 +13:00
James Newton-King 056e386ad9
Enable preview features for HTTP/3 (#1438) 2021-10-05 16:42:59 +13:00
James Newton-King c1d3bbfccd
Update Google.Protobuf to 3.18.0 (#1432) 2021-10-05 09:35:01 +13:00
James Newton-King ac3b3f4309
Fix race between CompleteAsync and call dispose (#1429) 2021-10-01 07:21:21 +13:00
James Newton-King 3469513fe7
Fix hardcoded SDK in get-dotnet.sh (#1427) 2021-09-29 09:53:11 +13:00
Safia Abdalla 5f762ae977
Update check for secure channel in ReadCredentials (#1428)
* Update check for secure channel in ReadCredentials

* Apply suggestions from code review

* Update test/FunctionalTests/Balancer/ConnectionTests.cs

Co-authored-by: James Newton-King <james@newtonking.com>

Co-authored-by: James Newton-King <james@newtonking.com>
2021-09-28 13:30:18 -07:00
James Newton-King 8666a11362
Fix streaming with no response messages not successful (#1401) 2021-09-28 11:51:33 +13:00
James Newton-King 0f26bd7b2f
Client handle server cancellation for deadline (#1402) 2021-09-27 16:43:55 +13:00
James Newton-King 7c35727de4
Fix deadline counter not being incremented if server returns first (#1399) 2021-09-24 18:20:48 +12:00
James Newton-King a01ea842a7
Fix combining auth and retry (#1414) 2021-09-22 15:00:18 +12:00
Safia Abdalla bb9284fb62
Add more info to UserAgent header (#1411)
* Add more info to UserAgent header

* Address feedback from peer review

* Some cleanups
2021-09-17 12:30:50 -07:00
James Newton-King 094532f0fb
Fix flakey test timeouts (#1390)
* Fix flakey test timeouts

* Clean up

* Deflake test

* More clean up

* Fix

* Update test/FunctionalTests/Web/Server/DeadlineTests.cs

* Apply suggestions from code review

Co-authored-by: Safia Abdalla <safia@safia.rocks>
2021-09-09 11:52:53 +02:00
Jan Tattermusch 7be660d629
Bump version to 2.41.0-dev (on master branch) (#1405)
* bump version to 2.41.0-dev

* update Grpc.Core.Api dependency to 2.40.0
2021-09-09 11:39:02 +02:00
James Newton-King c804021ac3
Fix gRPC retry calls not unregistering from cancellation token (#1398) 2021-09-04 09:28:53 +12:00
James Newton-King 15158af86d
Fix client timeout when error in custom CallCredential (#1388) 2021-08-24 07:52:27 +12:00
James Newton-King 95ea1dcb1b
Fix error from tests HttpEventSourceListener (#1387) 2021-08-23 20:56:30 +12:00
James Newton-King e3a2c06639
Default HTTP version to 1.1 when using gRPC-Web on netfx (#1377) 2021-08-20 10:21:05 +12:00
James Newton-King 36df3c2e31
Update containers sample to use .NET 6 SDK image (#1379) 2021-08-20 10:20:44 +12:00
James Newton-King a6eccf0dc3
Make load balancing log IDs unique (#1376) 2021-08-20 10:01:33 +12:00
James Newton-King 11f0958d12
Additional functional test logging for .NET 6 (#1382) 2021-08-20 09:59:54 +12:00
James Newton-King 1cd34bd832
Update MAINTAINERS.md (#1383) 2021-08-19 10:58:29 +02:00
James Newton-King f77622b3bd
Update benchmark to use generated cert instead of default cert (#1385) 2021-08-19 08:57:40 +12:00
James Newton-King f552a4982f
Fix flakey load balancing fallback tests (#1370) 2021-08-15 17:17:29 +12:00
apolcyn d585f36132
Merge pull request #1355 from apolcyn/b
Bump GrpcPackageVersion to 2.39.1
2021-08-14 10:56:50 -07:00
Alexander Polcyn 420ca57ac2 bump GrpcPackageVersion to 2.39.0-pre1 2021-08-13 12:19:39 -07:00
James Newton-King e920c52048
Update SDK and targets to .NET 6 (#1359) 2021-08-10 22:16:17 +12:00
James Newton-King 8db4604542
Fix using gRPC reflection with services that have a base type (#1352) 2021-07-30 09:51:28 +12:00
Paul 8b30ef9c7a
fix typo in README.md link (#1354) 2021-07-30 09:48:05 +12:00
James Newton-King a1389a0811
Fix error when HedgingDelay is null (#1351) 2021-07-27 21:57:51 +12:00
James Newton-King bf26e0377a
Add client streaming interceptor test (#1337) 2021-07-16 13:44:33 +12:00
James Newton-King 6920e2abd0
gRPC client-side load balancing (#1286) 2021-07-05 18:50:44 +12:00
James Newton-King f54a118569
Fix not using invariant culture with duration text (#1327) 2021-06-16 09:25:38 +12:00
Kia Panahi Rad 5bb5f48fc4
Improvements in Ticketer example (#1315) 2021-06-03 13:38:51 +12:00
John Luo 31009f6de1
Fix refresh argument arity (#1313) 2021-06-03 10:05:57 +12:00
Kia Panahi Rad 5d223d540e
Minor improvements in examples codebase: Mailer (#1312)
Co-authored-by: James Newton-King <james@newtonking.com>
2021-06-02 15:51:56 +12:00
Sébastien Ros e0b839290f
Migrate to Crank.EventSources package (#1297)
Co-authored-by: James Newton-King <james@newtonking.com>
2021-05-14 09:53:19 +12:00
James Newton-King 560e141e68
Add retrier example app (#1284) 2021-05-07 12:09:47 +12:00
Jan Tattermusch 4c410dcc39
Update docs on the recommended C# implementation (#1278)
* update README.md

* update implementation_comparison.md

* Update README.md

Co-authored-by: James Newton-King <james@newtonking.com>

Co-authored-by: James Newton-King <james@newtonking.com>
2021-05-03 13:49:42 +02:00
Jan Tattermusch 650aaa110f
Update implementation_comparison.md (#1270) 2021-04-26 13:35:33 +02:00
Jan Tattermusch 2ab0587190
Update version to v2.38.0-dev (on master branch) (#1272) 2021-04-20 06:48:39 +02:00
Jan Tattermusch 9f72e70c6a
Prepare master branch for 2.37.x release (#1268) 2021-04-14 14:03:49 +02:00
James Newton-King ebf7bbd9b2
Update WinHttpHandler to version available on NuGet (#1266) 2021-04-14 21:30:48 +12:00
James Newton-King bb14b9b2ea
Update .NET SDK version (#1263) 2021-04-14 18:27:16 +12:00
James Newton-King 85883a2d4b
Record benchmark request errors as requests (#1260) 2021-04-08 12:03:00 +12:00
James Newton-King 2844af7c2c
Update benchmark apps to use optimized way to create ByteString (#1261) 2021-04-08 11:58:59 +12:00
James Newton-King 7f341664d6
Update exception and documentation links to be human readable (#1259) 2021-04-08 11:56:40 +12:00
James Newton-King 78306e4723
Add validation of the channel address (#1258) 2021-04-06 13:40:40 +12:00
James Newton-King 57a7ad5339
Throw an error when ConfigureHttpClient is used with gRPC (#1257) 2021-04-02 11:08:11 +13:00
James Newton-King 7e3f2c3115
Move static Log classes out of generic types (#1253) 2021-04-01 17:28:20 +13:00
James Newton-King 6fd69504c7
Add netstandard2.0 to Grpc.Net.ClientFactory (#1248) 2021-03-20 11:47:25 +13:00
Jan Tattermusch 4f61419d80
Update version to 2.37.0-dev on the master branch (#1243) 2021-03-18 06:48:31 +01:00
James Newton-King 45ab5036e7
Add Frameworker example (#1234) 2021-03-18 08:57:07 +13:00
James Newton-King b93d87eff1
Fix streaming flaky tests (#1235) 2021-03-17 07:05:07 +13:00
James Newton-King b95400a20f
Fix client hang when call has missing or invalid trailers (#1232) 2021-03-11 13:27:16 +13:00
James Newton-King ab79d7fc40
Minor XML docs improvement (#1230) 2021-03-11 13:26:19 +13:00
James Newton-King b8a2408f18
Report docker build failures from gRPC-Web tests (#1227) 2021-03-10 09:30:56 +13:00
Jan Tattermusch 250331e390
Prepare for v2.36.x branch cut. (#1228)
* Update dependencies.props

* Update version.props
2021-03-09 19:15:08 +01:00
James Newton-King 761bfe8f71
Update many NuGet packages to latest verions (#1221) 2021-03-09 13:30:49 +13:00
James Newton-King be36d78d79
Add comment about WinHttp to client (#1225) 2021-03-09 11:50:18 +13:00
James Newton-King 4b4a7bd2b5
Update error message when no HttpHandler configured (#1220) 2021-03-09 11:19:34 +13:00
James Newton-King 37653639d6
gRPC client retries (#1187) 2021-03-09 11:18:26 +13:00
James Newton-King 978200abd5
Fix client not raising HTTP diagnostic source events (#1211) 2021-03-03 10:39:30 +13:00
James Newton-King 5c7cf6cf33
Update context propagation to use call static delegates (#1216) 2021-03-01 10:28:36 +13:00
hanabi1224 37660f5de4
update sample spar to use latest protobuf and grpc-web (#1212) 2021-02-28 21:32:30 +13:00
James Newton-King a72397cebb
Remove DiagnosticsSource package reference from .NET 5 client (#1207) 2021-02-24 10:24:20 +13:00
James Newton-King 08024e350d
gRPC-Web - Add .NET Standard 2.0 support (#1203) 2021-02-18 10:25:01 +13:00
James Newton-King 3c675bed8f
Fix .NET Standard 2.0 merge (#1204) 2021-02-17 15:24:32 +13:00
James Newton-King 927c0e5d72
Target .NET Framework (#1118) 2021-02-17 10:36:16 +13:00
James Newton-King 538e3720a6
Fix deadline timer rescheduling because of timer precision (#1201) 2021-02-13 12:19:19 +13:00
James Newton-King 9c3385ad84
Fix response stream errors not updating call status (#1198) 2021-02-10 10:59:07 +13:00
James Newton-King 4a8a120317
Change some RequestStream.WriteAsync errors to match Grpc.Core (#1199) 2021-02-10 10:56:07 +13:00
John Luo a3e67446a2
Add clarification on how to run examples (#1185)
* Add clarification on how to run examples

* Update examples/README.md

* Update examples/README.md

* Update examples/README.md

Co-authored-by: James Newton-King <james@newtonking.com>
2021-02-02 14:14:16 -08:00
James Newton-King 822c36fea4
Change gRPC client factory to set HttpHandler (#1183) 2021-02-02 14:29:01 +13:00
Jan Tattermusch 76ae64d3b0
Prepare master branch for 2.35.x release (#1178)
* Prepare master branch for 2.35.x release

* Update Grpc.Core dependency to 2.35.0
2021-01-26 14:05:36 +01:00
John Luo d8d982b291
Roll forward using LatestMajor behaviour (#1167)
* Roll forward using LatestMajor behaviour

Instead of Major behaviour

* Update comment
2021-01-13 08:51:28 -08:00
James Newton-King ec6de5c047
Improve error message when CORS is not configured correctly (#1171) 2021-01-13 08:42:49 +13:00
James Newton-King e34cef6c64
Fix setting user-agent in client when running in the browser (#1165) 2021-01-12 18:17:46 +13:00
James Newton-King 7d6683e3b3
Write grpc-web trailer names to response as lowercase (#1170) 2021-01-12 18:02:53 +13:00
James Newton-King ab2efbaed1
Clean up sources.props (#1169) 2021-01-12 17:41:44 +13:00
James Newton-King df29d5274c
Fix build on benchmark server (#1148) 2020-12-17 11:54:25 +13:00
James Newton-King 291ddf395c
Add code-first sample (#1142) 2020-12-12 10:10:56 +13:00
James Newton-King 543ee70bc8
Add separate gRPC-Web test build job (#1137) 2020-12-04 07:50:09 +13:00
Jan Tattermusch 4da20fba32
Improve github actions workflow (#1136) 2020-12-03 09:06:41 +13:00
James Newton-King bbf8ffe982
Fix running in benchmarks environment with net60 (#1133) 2020-12-03 08:29:09 +13:00
Jan Tattermusch ac2523fc2a
Remove .travis.yaml in favor of github actions (#1135)
* remove .travis.yaml in favor of github actions

* run pull request tests even on release branches
2020-12-02 11:12:59 +01:00
Jan Tattermusch 04b0a1cdb7
Upgrade Grpc.Core packages to 2.34.0-pre1 (#1130) 2020-12-01 10:13:29 +01:00
James Newton-King c637a4e9f1
Improve streaming error messages when call is complete (#1121) 2020-12-01 13:40:44 +13:00
James Newton-King dfd2cb3f96
Improve transporter sample error (#1127) 2020-12-01 11:12:15 +13:00
James Newton-King 850f455753
Add more gRPC-Web authentication tests (#1119) 2020-12-01 11:11:11 +13:00
James Newton-King cd2e76860c
Update Blazor sample to use navigation manager by default (#1129) 2020-12-01 11:10:20 +13:00
James Newton-King a435b71956
Update gRPC and Protobuf package versions (#1117) 2020-11-17 14:27:31 +13:00
James Newton-King 123ae72fb5
Fix GrpcWebHandler with TLS+HTTP/1.1 endpoints in .NET 5 (#1111) 2020-11-16 18:22:14 +13:00
James Newton-King dd4dca5b7b
Optimize deadline logic (#1102) 2020-11-12 12:09:15 +13:00
James Newton-King e7e779f35f
Update to .NET 5 RTM (#1109) 2020-11-12 10:52:21 +13:00
James Newton-King 922b8dfd39
Update Microservicer sample to net5.0 (#1079) 2020-11-07 19:59:16 +13:00
James Newton-King 13a4bf1b2d
Clean up RpcException logic in client (#1099) 2020-11-04 10:02:12 +13:00
James Newton-King c48ae4442f
Change exceptions to be more consistent with Grpc.Core (#1092) 2020-11-02 09:13:49 +13:00
James Newton-King bf3b057e32
Fix flaky max concurrent streams test (#1088) 2020-10-27 10:58:19 +13:00
Jan Tattermusch 3807a8cb58
Bump version to 2.34.0-dev (on master branch) (#1087) 2020-10-22 11:37:14 +02:00
Jan Tattermusch e37e2f13a1
Update Grpc.Core.Api dependency to 2.33.1 (#1085) 2020-10-22 10:46:54 +02:00
James Newton-King 874cb5535e
Fix flakiness when calling GetStatus after error (#1083) 2020-10-22 20:32:15 +13:00
James Newton-King e36e1218e9
Fix race condition between deadline and call finishing (#1082) 2020-10-22 09:42:59 +13:00
James Newton-King 96c06f45e7
Support aggressive trimming (#1060) 2020-10-21 14:31:20 +13:00
James Newton-King be778112dc
Support netcoreapp3.1 in benchmark apps and call count limit (#1078) 2020-10-20 11:54:13 +13:00
James Newton-King 4827aea48d
Remove TestServer workaround handler (#1069) 2020-10-14 13:04:12 +13:00
James Newton-King 00d6a0b4a8
Fix potential torn reads by counters (#1073) 2020-10-14 12:47:49 +13:00
James Newton-King 27257a7c3b
Update 2.32.0 dependency (#1068) 2020-10-06 13:02:04 +13:00
James Newton-King 3518cd7570
Remove old benchmarks project (#1066) 2020-10-01 11:27:00 +13:00
James Newton-King a2918b07a2
Client response MoveNext cancellation cancels call (#1062) 2020-09-25 07:57:31 +12:00
James Newton-King 5395000b37
Avoid calling async local Activity.Current multiple times (#1059) 2020-09-25 07:56:58 +12:00
James Newton-King 86f4600121
Client response MoveNext cancellation cancels call 2020-09-24 21:24:10 +12:00
James Newton-King f418e5d5f7
Update example projects to net5.0 (#1058) 2020-09-22 14:19:24 +12:00
James Newton-King 11a7146c9e
Update to RC2 and re-add transporter example (#1056) 2020-09-17 09:04:50 +12:00
James Newton-King 637afdbec6
Don't include server header in benchmarks for real this time (#1055) 2020-09-16 08:40:55 +12:00
James Newton-King 59062ec54d
Extra metadata filtering in client and server (#1052) 2020-09-15 12:14:27 +12:00
James Newton-King 7fe4595de9
Skip server header in benchmark website (#1050) 2020-09-12 10:27:37 +12:00
James Newton-King 139040e840
Fix client to only filter known gRPC headers (#1046) 2020-09-12 09:56:57 +12:00
James Newton-King 0a37300796
Don't write response grpc-encoding header when identity (#1047) 2020-09-12 09:35:04 +12:00
James Newton-King 84f6a3e7d0
Fix repeatedly decoding base64 with large grpc-web-text request (#1045) 2020-09-10 13:43:38 +12:00
apolcyn a76308fd2b
Merge pull request #1039 from apolcyn/bump_version
Bump Grpc.Core dependency to 2.32.0-pre1
2020-09-03 13:55:21 -07:00
Alexander Polcyn 47b7506e1f Bump Grpc.Core dependency to 2.32.0-pre1 2020-09-03 12:25:44 -07:00
James Newton-King 1e82c56974
React to connection abstractions removal. Remove transporter (#1038) 2020-09-03 14:35:22 +12:00
James Newton-King cc7b97f6da
Client factory handler supports multiple HTTP/2 connections (#1037) 2020-09-03 12:27:38 +12:00
James Newton-King b10480cbe0
Client serialization optimizations (#1033) 2020-09-02 15:54:35 +12:00
James Newton-King fdb96193ba
Re-enable gRPC-Web interop tests in CI build (#1034) 2020-09-02 09:40:50 +12:00
James Newton-King a9827e5ccc
Add transporter example (#1025) 2020-08-28 11:40:06 +12:00
James Newton-King 55cde44349
Update Grpc.Core and Google.Protobuf dependencies (#1031) 2020-08-28 09:09:59 +12:00
James Newton-King af709ddf42
Check SocketsHttpHandler.IsSupported before creating handler (#1030) 2020-08-27 10:18:38 +12:00
James Newton-King 5faaabef72
Fix Blazor interop project SDK (#1024) 2020-08-22 08:03:52 +12:00
James Newton-King 4bf32368ee
Decrease log level of server message errors to Information (#1023) 2020-08-21 08:16:37 +12:00
James Newton-King ef77760676
Multi-target .NET 5 (#987) 2020-08-20 23:38:01 +12:00
James Newton-King 6df196c110
Suppress routing auth check in benchmark server (#1014) 2020-08-12 06:41:38 +12:00
James Newton-King 4c92b23cfb
Additional channel tests (#1003) 2020-08-06 09:32:44 +12:00
James Newton-King c42358b2c3
Fix benchmarks app on net5.0 (#1009) 2020-08-04 20:29:59 +12:00
Jan Tattermusch 1b44bef567
Bump Grpc.Core dependency to 2.31.0-pre2 (#1001)
* Bump Grpc.Core dependency to 2.31.0-pre2

* Update dependencies.props

* Fix nullable warnings

* Fix package version

Co-authored-by: John Luo <johluo@microsoft.com>
Co-authored-by: James Newton-King <james@newtonking.com>
2020-08-03 19:28:59 +02:00
James Newton-King 49fc4f1841
Fix benchmark client incorrectly measuring warmup RPS (#1007) 2020-08-03 09:20:48 +12:00
James Newton-King 634fda1fec
Use latest version of OpenTelemetry with gRPC in sample (#973) 2020-08-01 16:35:56 +12:00
James Newton-King 797619b329
Racer example reports progress in realtime (#1000) 2020-07-30 12:35:50 +12:00
James Newton-King aca0a8def5
Add liber example (#992) 2020-07-23 09:00:32 +12:00
James Newton-King 75c5cbb082
Fix failing actions test (#993) 2020-07-21 20:36:22 +12:00
Jan Tattermusch e911dac2e5
Try fix build and test with github actions. (#990)
* Try fix build and test with github actions.

* Update test.yml
2020-07-20 12:52:19 +02:00
Jan Tattermusch 39c2dcd78e
try github actions (#985) 2020-07-20 11:10:37 +02:00
James Newton-King 6b65f9b2ad
Update Grpc.* dependencies to 2.30.0 (#986) 2020-07-17 11:35:52 +12:00
James Newton-King 59ac331075
Update microservicer example readme (#982) 2020-07-16 11:52:00 +12:00
James Newton-King 27cf289089
Add microservice example (#981) 2020-07-16 11:28:12 +12:00
James Newton-King 02883fb00d
Rename variables and args related to client certificate benchmark (#971) 2020-07-09 14:27:15 +12:00
James Newton-King 08a0a558c7
Fix MaxReceiveMessageSize/MaxSendMessageSize null issues (#967) 2020-07-07 18:28:41 +12:00
James Newton-King 9c294e0394
Extra deadline logs, don't write message when deadline exceeded (#961) 2020-06-30 16:06:48 +12:00
James Newton-King b9f862170a
Update extensions dependencies to 3.0.3 (#962) 2020-06-27 09:29:12 +12:00
Jan Tattermusch 7e8b6e85f1
Update version to 2.31.0-dev on master (#957) 2020-06-23 13:06:51 +01:00
James Newton-King 4daaf07a26
Set unexpected errors in Status.DebugException (#947) 2020-06-12 16:08:37 +02:00
James Newton-King e02fd189d1
Update Grpc dependency to 2.30.0-pre1 (#945)
* Update Grpc dependency to 2.30.0-pre1

* Use Metadata helper methods
2020-06-12 09:02:24 +02:00
Andrew Stanton-Nurse ba05ea11b8
Remove @anurse from maintainers (#941) 2020-06-08 18:22:02 -07:00
James Newton-King e1669ed6f2
Remove explicit dotnet versions from GrpcClient (#939) 2020-06-05 11:22:00 +12:00
James Newton-King 8251675415
Add issue config file with link to grpc/grpc (#937) 2020-06-04 09:53:50 +12:00
James Newton-King ff32e56713
Update example projects to 2.29.0 (#929) 2020-06-04 07:23:23 +12:00
James Newton-King 64efb1cd68
Update benchmark app branches to use grpc-dotnet (#935) 2020-06-04 06:41:18 +12:00
hanabi1224 f89cfc2fa9
Upgrade grpc-web npm package to latest (#931) 2020-06-02 16:19:56 +12:00
James Newton-King 283098b2d5
Add gRPC benchmark client (#891) 2020-06-02 16:04:44 +12:00
Varorbc 9b759a54d0
optimize package dependencies (#877) 2020-06-02 15:50:02 +12:00
James Newton-King 241b21df05
Fix Source Link warning and enable CI build in build script (#927) 2020-05-29 12:19:51 +12:00
James Newton-King 1344beb663
Change error status when no message is returned in unary calls (#920) 2020-05-27 11:50:44 +12:00
James Newton-King c2cf53641f
Fix sending and receiving duplicate header names (#918) 2020-05-22 08:03:55 +12:00
James Newton-King 074b17a573
Update samples to use latest grpc-dotnet and Blazor (#914) 2020-05-21 17:28:12 +12:00
James Newton-King 90c0ecc41c
Additional ReadAllAsync tests (#911) 2020-05-19 09:12:32 +12:00
Günther Foidl 32df65a6c3
Fixed AsyncStreamReaderExtensions.ReadAllAsync argument validation (#909) 2020-05-16 11:13:43 +12:00
Jan Tattermusch 5de614014d
Upgrade to Grpc.Core.Api to 2.29 (#906) 2020-05-15 11:28:37 +02:00
James Newton-King 103105e75f
Update dependencies and fix warnings (#899) 2020-05-13 18:40:27 +12:00
James Newton-King 9bc4d27d39
Check for in-progress write in ServerStreamWriter (#903) 2020-05-13 18:24:30 +12:00
James Newton-King 41618a497b
Write unary content with single Stream.WriteAsync (#901) 2020-05-13 09:17:45 +12:00
James Newton-King 90609adec0
Add GrpcChannelOptions.HttpHandler and channel default to invoker (#896) 2020-05-06 12:31:56 +12:00
James Newton-King 1b3588ca21
Update interop client to use System.Commandline (#890) 2020-05-06 08:21:36 +12:00
James Newton-King 97af9b2fa5
Update System.CommandLine package (#889) 2020-05-06 08:10:13 +12:00
James Newton-King 035c791b10
Add test for ResponseStream.MoveNext cancellation (#897) 2020-05-06 06:47:52 +12:00
James Newton-King 38ea7e8441
Build non-preview gRPC-Web packages (#888) 2020-05-05 07:47:11 +12:00
James Newton-King 54add4f70f
Update benchmark apps to use latest framework and include required feed (#887) 2020-04-30 11:17:05 +12:00
James Newton-King 4d7cad8e00
Fix flaky client cancellation tests (#885) 2020-04-30 08:46:16 +12:00
James Newton-King f182c41f1f
Add gRPC-Web Blazor interop tests (#859) 2020-04-29 10:25:08 +12:00
James Newton-King 52165289fe
Add SubdirectoryHandler for injecting a subdirectory into gRPC calls (#882) 2020-04-29 07:48:43 +12:00
James Newton-King cf09aafced
Update Blazor sample to preview 5 (#881) 2020-04-24 10:35:13 +12:00
James Newton-King 1df26fe32d
Fix nullable warnings from latest VS version (#878) 2020-04-24 10:03:16 +12:00
James Newton-King bba2e5d385
Fix race condition when finishing streaming and getting trailers (#876) 2020-04-22 14:48:36 +12:00
James Newton-King f99787e28f
Set property to enable streaming in WASM and gRPC-Web (#872) 2020-04-21 09:24:44 +12:00
James Newton-King 6f452e10b7
Dispose timer from long running deadline (#873) 2020-04-21 09:13:45 +12:00
James Newton-King 1ca4245af8
Merge pull request #851 from JamesNK/mgravell-marc/generalize-client-factory
Support per-client factories and non-ClientBase implementations
2020-04-18 11:17:07 +12:00
James Newton-King 70d9728aa7
Refactor to a creator on factory client options 2020-04-18 11:04:06 +12:00
mgravell 305cb17e2a
proposed changes for generalizing client factory to other implementations (see: protobuf-net.Grpc) 2020-04-18 11:04:03 +12:00
James Newton-King 3ce9b10452
Update exposed CORS headers in tests and samples (#869) 2020-04-17 17:04:53 +12:00
James Newton-King 95159e54c7
Update Blazor sample to preview 4 (#871) 2020-04-17 17:03:27 +12:00
James Newton-King c6b8f6c706
Change global options to be configured with UseGrpcWeb method (#865) 2020-04-16 13:29:06 +12:00
James Newton-King 58b2e1c9b3
Update Blazor sample to latest preview (#852) 2020-04-08 07:10:36 +12:00
James Newton-King cb7c70e2ef
Add streams benchmark definitions (#850) 2020-04-03 11:39:18 +13:00
James Newton-King a5d970b5f2
Add catch to server unary interceptor (#847) 2020-04-03 11:16:22 +13:00
James Newton-King 554ea26113
Fix building Vigor sample in VS (#846) 2020-03-31 10:37:02 +13:00
James Newton-King 262de5b28c
Add compressor example (#840) 2020-03-31 10:16:59 +13:00
James Newton-King afc2b21761
Support custom ServerCallContext types with GetHttpContext (#841) 2020-03-30 18:53:03 +13:00
James Newton-King fced036711
Merge pull request #835 from JamesNK/jamesnk/spar-example
Add CORS example
2020-03-28 15:59:02 +13:00
James Newton-King dfb34ae672
Update readme and spar sample to be consistent with other sample 2020-03-28 15:48:02 +13:00
hanabi1224 2c2b8adf43
Add CORS example 2020-03-28 15:48:02 +13:00
James Newton-King 04bbe4fc59
Improve GetHttpContext (#838) 2020-03-28 15:47:17 +13:00
James Newton-King 57fa08534b
Fix flaky DuplexStream_SendToUnimplementedMethod_ThrowError (#839) 2020-03-28 15:34:28 +13:00
James Newton-King 03778703f3
Update browser sample to not require HTTP/2 (#834) 2020-03-28 10:16:58 +13:00
James Newton-King 95c99074b0
Support multiple streams per connection in benchmark client (#831) 2020-03-25 00:08:22 +13:00
James Newton-King 799a8a1f66
Improve logging interceptor sample (#827) 2020-03-24 10:28:34 +13:00
Jiangtao Li 5dd0eef830
Sync and up test credentials from grpc main repo (#826) 2020-03-23 15:47:42 +01:00
James Newton-King 5c6080a204
Fix ServerCallContext.Peer with IPv6 (#824) 2020-03-19 08:53:39 +13:00
James Newton-King adf4deb6ed
Change GrpcWebHandler version to a property (#822) 2020-03-19 08:04:19 +13:00
James Newton-King 3a9b23de55
Reduce logging noise at startup from gRPC service discovery (#819) 2020-03-17 10:13:07 +13:00
James Newton-King b26695aceb
Fix gRPC-web auth flaky test (#821) 2020-03-17 10:07:18 +13:00
James Newton-King a656d7abb6
Client factory integration option to ignore context not found (#814) 2020-03-16 22:13:14 +13:00
James Newton-King cc00b55b06
Change server streaming benchmark to reuse response (#815) 2020-03-12 08:08:46 +13:00
James Newton-King 0b5320af97
Fix GrpcWebHandler not always resetting HTTP version back to 2.0 (#809) 2020-03-07 10:11:23 +13:00
James Newton-King 663b228bdb
Remove service related allocations in benchmark (#808) 2020-03-06 13:49:37 +13:00
James Newton-King 76abb53787
Remove task allocation in unary call handler (#807) 2020-03-06 13:33:35 +13:00
John Luo 4864460865
Include inner exception messages in RpcException status detail (#804)
* Include inner exception messages in RpcException status detail.

* Clean up

* PR feedback

* Clean up
2020-03-04 21:38:37 -08:00
1240 changed files with 124471 additions and 39409 deletions

3
.dockerignore Normal file
View File

@ -0,0 +1,3 @@
**/bin
**/obj
.vs

406
.editorconfig Normal file
View File

@ -0,0 +1,406 @@
; EditorConfig to support per-solution formatting.
; Use the EditorConfig VS add-in to make this work.
; http://editorconfig.org/
;
; Here are some resources for what's supported for .NET/C#
; https://kent-boogaart.com/blog/editorconfig-reference-for-c-developers
; https://learn.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference
;
; Be **careful** editing this because some of the rules don't support adding a severity level
; For instance if you change to `dotnet_sort_system_directives_first = true:warning` (adding `:warning`)
; then the rule will be silently ignored.
; This is the default for the codeline.
root = true
[*]
indent_style = space
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.cs]
indent_size = 4
dotnet_sort_system_directives_first = true
# Don't use this. qualifier
dotnet_style_qualification_for_field = false:suggestion
dotnet_style_qualification_for_property = false:suggestion
# use int x = .. over Int32
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
# use int.MaxValue over Int32.MaxValue
dotnet_style_predefined_type_for_member_access = true:suggestion
# Require var all the time.
csharp_style_var_for_built_in_types = true:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = true:suggestion
# Disallow throw expressions.
csharp_style_throw_expression = false:suggestion
# Newline settings
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
# Namespace settings
csharp_style_namespace_declarations = file_scoped
# Brace settings
csharp_prefer_braces = true # Prefer curly braces even for one line of code
[*.{xml,config,*proj,nuspec,props,resx,targets,yml,tasks}]
indent_size = 2
# Xml config files
[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}]
indent_size = 2
[*.json]
indent_size = 2
[*.{ps1,psm1}]
indent_size = 4
[*.sh]
indent_size = 4
end_of_line = lf
[*.{razor,cshtml}]
charset = utf-8-bom
[*.{cs,vb}]
# SYSLIB1054: Use 'LibraryImportAttribute' instead of 'DllImportAttribute' to generate P/Invoke marshalling code at compile time
dotnet_diagnostic.SYSLIB1054.severity = warning
# CA1018: Mark attributes with AttributeUsageAttribute
dotnet_diagnostic.CA1018.severity = warning
# CA1047: Do not declare protected member in sealed type
dotnet_diagnostic.CA1047.severity = warning
# CA1305: Specify IFormatProvider
dotnet_diagnostic.CA1305.severity = warning
# CA1507: Use nameof to express symbol names
dotnet_diagnostic.CA1507.severity = warning
# CA1510: Use ArgumentNullException throw helper
dotnet_diagnostic.CA1510.severity = warning
# CA1511: Use ArgumentException throw helper
dotnet_diagnostic.CA1511.severity = warning
# CA1512: Use ArgumentOutOfRangeException throw helper
dotnet_diagnostic.CA1512.severity = warning
# CA1513: Use ObjectDisposedException throw helper
dotnet_diagnostic.CA1513.severity = warning
# CA1725: Parameter names should match base declaration
dotnet_diagnostic.CA1725.severity = suggestion
# CA1802: Use literals where appropriate
dotnet_diagnostic.CA1802.severity = warning
# CA1805: Do not initialize unnecessarily
dotnet_diagnostic.CA1805.severity = warning
# CA1810: Do not initialize unnecessarily
dotnet_diagnostic.CA1810.severity = warning
# CA1821: Remove empty Finalizers
dotnet_diagnostic.CA1821.severity = warning
# CA1822: Make member static
dotnet_diagnostic.CA1822.severity = warning
dotnet_code_quality.CA1822.api_surface = private, internal
# CA1823: Avoid unused private fields
dotnet_diagnostic.CA1823.severity = warning
# CA1825: Avoid zero-length array allocations
dotnet_diagnostic.CA1825.severity = warning
# CA1826: Do not use Enumerable methods on indexable collections. Instead use the collection directly
dotnet_diagnostic.CA1826.severity = warning
# CA1827: Do not use Count() or LongCount() when Any() can be used
dotnet_diagnostic.CA1827.severity = warning
# CA1828: Do not use CountAsync() or LongCountAsync() when AnyAsync() can be used
dotnet_diagnostic.CA1828.severity = warning
# CA1829: Use Length/Count property instead of Count() when available
dotnet_diagnostic.CA1829.severity = warning
# CA1830: Prefer strongly-typed Append and Insert method overloads on StringBuilder
dotnet_diagnostic.CA1830.severity = warning
# CA1831: Use AsSpan or AsMemory instead of Range-based indexers when appropriate
# CA1832: Use AsSpan or AsMemory instead of Range-based indexers when appropriate
# CA1833: Use AsSpan or AsMemory instead of Range-based indexers when appropriate
dotnet_diagnostic.CA1831.severity = warning
dotnet_diagnostic.CA1832.severity = warning
dotnet_diagnostic.CA1833.severity = warning
# CA1834: Consider using 'StringBuilder.Append(char)' when applicable
dotnet_diagnostic.CA1834.severity = warning
# CA1835: Prefer the 'Memory'-based overloads for 'ReadAsync' and 'WriteAsync'
dotnet_diagnostic.CA1835.severity = warning
# CA1836: Prefer IsEmpty over Count
dotnet_diagnostic.CA1836.severity = warning
# CA1837: Use 'Environment.ProcessId'
dotnet_diagnostic.CA1837.severity = warning
# CA1838: Avoid 'StringBuilder' parameters for P/Invokes
dotnet_diagnostic.CA1838.severity = warning
# CA1839: Use 'Environment.ProcessPath'
dotnet_diagnostic.CA1839.severity = warning
# CA1840: Use 'Environment.CurrentManagedThreadId'
dotnet_diagnostic.CA1840.severity = warning
# CA1841: Prefer Dictionary.Contains methods
dotnet_diagnostic.CA1841.severity = warning
# CA1842: Do not use 'WhenAll' with a single task
dotnet_diagnostic.CA1842.severity = warning
# CA1843: Do not use 'WaitAll' with a single task
dotnet_diagnostic.CA1843.severity = warning
# CA1844: Provide memory-based overrides of async methods when subclassing 'Stream'
dotnet_diagnostic.CA1844.severity = warning
# CA1845: Use span-based 'string.Concat'
dotnet_diagnostic.CA1845.severity = warning
# CA1846: Prefer AsSpan over Substring
dotnet_diagnostic.CA1846.severity = warning
# CA1847: Use string.Contains(char) instead of string.Contains(string) with single characters
dotnet_diagnostic.CA1847.severity = warning
# CA1852: Seal internal types
dotnet_diagnostic.CA1852.severity = warning
# CA1854: Prefer the IDictionary.TryGetValue(TKey, out TValue) method
dotnet_diagnostic.CA1854.severity = warning
# CA1855: Prefer 'Clear' over 'Fill'
dotnet_diagnostic.CA1855.severity = warning
# CA1856: Incorrect usage of ConstantExpected attribute
dotnet_diagnostic.CA1856.severity = error
# CA1857: A constant is expected for the parameter
dotnet_diagnostic.CA1857.severity = warning
# CA1858: Use 'StartsWith' instead of 'IndexOf'
dotnet_diagnostic.CA1858.severity = warning
# CA2007: Consider calling ConfigureAwait on the awaited task
dotnet_diagnostic.CA2007.severity = warning
# CA2008: Do not create tasks without passing a TaskScheduler
dotnet_diagnostic.CA2008.severity = warning
# CA2009: Do not call ToImmutableCollection on an ImmutableCollection value
dotnet_diagnostic.CA2009.severity = warning
# CA2011: Avoid infinite recursion
dotnet_diagnostic.CA2011.severity = warning
# CA2012: Use ValueTask correctly
dotnet_diagnostic.CA2012.severity = warning
# CA2013: Do not use ReferenceEquals with value types
dotnet_diagnostic.CA2013.severity = warning
# CA2014: Do not use stackalloc in loops.
dotnet_diagnostic.CA2014.severity = warning
# CA2016: Forward the 'CancellationToken' parameter to methods that take one
dotnet_diagnostic.CA2016.severity = warning
# CA2200: Rethrow to preserve stack details
dotnet_diagnostic.CA2200.severity = warning
# CA2208: Instantiate argument exceptions correctly
dotnet_diagnostic.CA2208.severity = warning
# CA2245: Do not assign a property to itself
dotnet_diagnostic.CA2245.severity = warning
# CA2246: Assigning symbol and its member in the same statement
dotnet_diagnostic.CA2246.severity = warning
# CA2249: Use string.Contains instead of string.IndexOf to improve readability.
dotnet_diagnostic.CA2249.severity = warning
# IDE0005: Remove unnecessary usings
dotnet_diagnostic.IDE0005.severity = warning
# IDE0011: Curly braces to surround blocks of code
dotnet_diagnostic.IDE0011.severity = warning
# IDE0020: Use pattern matching to avoid is check followed by a cast (with variable)
dotnet_diagnostic.IDE0020.severity = warning
# IDE0029: Use coalesce expression (non-nullable types)
dotnet_diagnostic.IDE0029.severity = warning
# IDE0030: Use coalesce expression (nullable types)
dotnet_diagnostic.IDE0030.severity = warning
# IDE0031: Use null propagation
dotnet_diagnostic.IDE0031.severity = warning
# IDE0035: Remove unreachable code
dotnet_diagnostic.IDE0035.severity = warning
# IDE0036: Order modifiers
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
dotnet_diagnostic.IDE0036.severity = warning
# IDE0038: Use pattern matching to avoid is check followed by a cast (without variable)
dotnet_diagnostic.IDE0038.severity = warning
# IDE0043: Format string contains invalid placeholder
dotnet_diagnostic.IDE0043.severity = warning
# IDE0044: Make field readonly
dotnet_diagnostic.IDE0044.severity = warning
# IDE0051: Remove unused private members
dotnet_diagnostic.IDE0051.severity = warning
# IDE0055: All formatting rules
dotnet_diagnostic.IDE0055.severity = suggestion
# IDE0059: Unnecessary assignment to a value
dotnet_diagnostic.IDE0059.severity = warning
# IDE0060: Remove unused parameter
dotnet_code_quality_unused_parameters = non_public
dotnet_diagnostic.IDE0060.severity = warning
# IDE0062: Make local function static
dotnet_diagnostic.IDE0062.severity = warning
# IDE0161: Convert to file-scoped namespace
dotnet_diagnostic.IDE0161.severity = warning
# IDE0200: Lambda expression can be removed
dotnet_diagnostic.IDE0200.severity = warning
# IDE2000: Disallow multiple blank lines
dotnet_style_allow_multiple_blank_lines_experimental = false
dotnet_diagnostic.IDE2000.severity = warning
[{test,tests,testassets,examples,perf,scripts,stress}/**.cs]
# CA1018: Mark attributes with AttributeUsageAttribute
dotnet_diagnostic.CA1018.severity = suggestion
# CA1507: Use nameof to express symbol names
dotnet_diagnostic.CA1507.severity = suggestion
# CA1510: Use ArgumentNullException throw helper
dotnet_diagnostic.CA1510.severity = suggestion
# CA1511: Use ArgumentException throw helper
dotnet_diagnostic.CA1511.severity = suggestion
# CA1512: Use ArgumentOutOfRangeException throw helper
dotnet_diagnostic.CA1512.severity = suggestion
# CA1513: Use ObjectDisposedException throw helper
dotnet_diagnostic.CA1513.severity = suggestion
# CA1802: Use literals where appropriate
dotnet_diagnostic.CA1802.severity = suggestion
# CA1805: Do not initialize unnecessarily
dotnet_diagnostic.CA1805.severity = suggestion
# CA1810: Do not initialize unnecessarily
dotnet_diagnostic.CA1810.severity = suggestion
# CA1822: Make member static
dotnet_diagnostic.CA1822.severity = suggestion
# CA1823: Avoid zero-length array allocations
dotnet_diagnostic.CA1825.severity = suggestion
# CA1826: Do not use Enumerable methods on indexable collections. Instead use the collection directly
dotnet_diagnostic.CA1826.severity = suggestion
# CA1827: Do not use Count() or LongCount() when Any() can be used
dotnet_diagnostic.CA1827.severity = suggestion
# CA1829: Use Length/Count property instead of Count() when available
dotnet_diagnostic.CA1829.severity = suggestion
# CA1834: Consider using 'StringBuilder.Append(char)' when applicable
dotnet_diagnostic.CA1834.severity = suggestion
# CA1835: Prefer the 'Memory'-based overloads for 'ReadAsync' and 'WriteAsync'
dotnet_diagnostic.CA1835.severity = suggestion
# CA1837: Use 'Environment.ProcessId'
dotnet_diagnostic.CA1837.severity = suggestion
# CA1838: Avoid 'StringBuilder' parameters for P/Invokes
dotnet_diagnostic.CA1838.severity = suggestion
# CA1841: Prefer Dictionary.Contains methods
dotnet_diagnostic.CA1841.severity = suggestion
# CA1844: Provide memory-based overrides of async methods when subclassing 'Stream'
dotnet_diagnostic.CA1844.severity = suggestion
# CA1845: Use span-based 'string.Concat'
dotnet_diagnostic.CA1845.severity = suggestion
# CA1846: Prefer AsSpan over Substring
dotnet_diagnostic.CA1846.severity = suggestion
# CA1847: Use string.Contains(char) instead of string.Contains(string) with single characters
dotnet_diagnostic.CA1847.severity = suggestion
# CA1852: Seal internal types
dotnet_diagnostic.CA1852.severity = suggestion
# CA1854: Prefer the IDictionary.TryGetValue(TKey, out TValue) method
dotnet_diagnostic.CA1854.severity = suggestion
# CA1855: Prefer 'Clear' over 'Fill'
dotnet_diagnostic.CA1855.severity = suggestion
# CA1856: Incorrect usage of ConstantExpected attribute
dotnet_diagnostic.CA1856.severity = suggestion
# CA1857: A constant is expected for the parameter
dotnet_diagnostic.CA1857.severity = suggestion
# CA1858: Use 'StartsWith' instead of 'IndexOf'
dotnet_diagnostic.CA1858.severity = suggestion
# CA2007: Consider calling ConfigureAwait on the awaited task
dotnet_diagnostic.CA2007.severity = suggestion
# CA2008: Do not create tasks without passing a TaskScheduler
dotnet_diagnostic.CA2008.severity = suggestion
# CA2012: Use ValueTask correctly
dotnet_diagnostic.CA2012.severity = suggestion
# CA2249: Use string.Contains instead of string.IndexOf to improve readability.
dotnet_diagnostic.CA2249.severity = suggestion
# IDE0005: Remove unnecessary usings
dotnet_diagnostic.IDE0005.severity = suggestion
# IDE0020: Use pattern matching to avoid is check followed by a cast (with variable)
dotnet_diagnostic.IDE0020.severity = suggestion
# IDE0029: Use coalesce expression (non-nullable types)
dotnet_diagnostic.IDE0029.severity = suggestion
# IDE0030: Use coalesce expression (nullable types)
dotnet_diagnostic.IDE0030.severity = suggestion
# IDE0031: Use null propagation
dotnet_diagnostic.IDE0031.severity = suggestion
# IDE0038: Use pattern matching to avoid is check followed by a cast (without variable)
dotnet_diagnostic.IDE0038.severity = suggestion
# IDE0044: Make field readonly
dotnet_diagnostic.IDE0044.severity = suggestion
# IDE0051: Remove unused private members
dotnet_diagnostic.IDE0051.severity = suggestion
# IDE0059: Unnecessary assignment to a value
dotnet_diagnostic.IDE0059.severity = suggestion
# IDE0060: Remove unused parameters
dotnet_diagnostic.IDE0060.severity = suggestion
# IDE0062: Make local function static
dotnet_diagnostic.IDE0062.severity = suggestion
# IDE0200: Lambda expression can be removed
dotnet_diagnostic.IDE0200.severity = suggestion
# CA2016: Forward the 'CancellationToken' parameter to methods that take one
dotnet_diagnostic.CA2016.severity = suggestion

5
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -0,0 +1,5 @@
blank_issues_enabled: true
contact_links:
- name: Issue with Grpc.Core
url: https://github.com/grpc/grpc/issues/new/choose
about: Please open issues relating to Grpc.Core in grpc/grpc.

46
.github/workflows/test.yml vendored Normal file
View File

@ -0,0 +1,46 @@
name: Build and Test
on:
push:
branches: [ master ]
pull_request:
branches: [ '**' ]
schedule:
- cron: 0 0 * * * # daily at 00:00
env:
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
jobs:
build:
name: Basic Tests
runs-on: ubuntu-22.04
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Install dotnet
run: ./build/get-dotnet.sh
- name: Build and run tests
run: ./build_and_test.sh
- uses: actions/upload-artifact@v4
if: always()
with:
name: artifacts
path: artifacts
if-no-files-found: error
grpc_web:
name: gRPC-Web Tests
runs-on: ubuntu-22.04
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Run interop tests
run: ./grpcweb_interoptests.sh

1
.gitignore vendored
View File

@ -34,7 +34,6 @@ launchSettings.json
BenchmarkDotNet.Artifacts/
BDN.Generated/
binaries/
global.json
.vscode/
*.binlog
build/feed

View File

@ -1,14 +0,0 @@
language: csharp
sudo: required
dist: xenial
env:
global:
- DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
mono: none
branches:
only:
- master
install:
- ./build/get-dotnet.sh
script:
- ./build_and_test.sh

View File

@ -1,6 +1,4 @@
<Project>
<Import Project="build\sources.props" />
<Import Project="build\dependencies.props" />
<Import Project="build\version.props" />
<PropertyGroup>
@ -12,12 +10,23 @@
<AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)keys\Grpc.snk</AssemblyOriginatorKeyFile>
<SignAssembly>true</SignAssembly>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<CheckEolTargetFramework>false</CheckEolTargetFramework>
<SuppressNETCoreSdkPreviewMessage>true</SuppressNETCoreSdkPreviewMessage>
<!-- Don't make missing XML docs a fatal build error, but still surface so we have visibility into undocumented APIs. -->
<WarningsNotAsErrors>$(WarningsNotAsErrors);CS1591</WarningsNotAsErrors>
<LangVersion>8.0</LangVersion>
<!-- Disable warnings about AOT and trimming features on older targets, e.g. netstandard2.0.
For now, continue to apply these features to these targets because some packages don't have a target that supports them -->
<NoWarn>$(NoWarn);NETSDK1195;NETSDK1210</NoWarn>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<LangVersion>12.0</LangVersion>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<!-- Some packages generate warnings when used on TFMs that are out of support (or almost out of support) -->
<SuppressTfmSupportBuildWarnings>true</SuppressTfmSupportBuildWarnings>
</PropertyGroup>
</Project>

View File

@ -17,14 +17,38 @@
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
<CodeAnalysisRuleset>$(MSBuildThisFileDirectory)Grpc.DotNet.ruleset</CodeAnalysisRuleset>
<IsTrimmable>true</IsTrimmable>
<EnableAOTAnalyzer>true</EnableAOTAnalyzer>
</PropertyGroup>
<!-- IsGrpcPublishedPackage is set in csproj so related config must be in targets file -->
<ItemGroup Condition="'$(IsGrpcPublishedPackage)' == 'true'">
<None Include="$(PackageIconFullPath)" Pack="true" PackagePath="\"/>
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="$(MicrosoftCodeAnalysisFxCopAnalyzersPackageVersion)" PrivateAssets="All" />
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="$(MicrosoftSourceLinkGitHubPackageVersion)" PrivateAssets="All" />
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" PrivateAssets="All" />
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" />
</ItemGroup>
<ItemGroup Condition="$(MSBuildProjectName.EndsWith('Tests'))">
<Using Include="NUnit.Framework.Legacy.ClassicAssert" Alias="Assert" />
<Using Include="NUnit.Framework.Legacy" />
<Using Include="NUnit.Framework" />
</ItemGroup>
<!--
Make a netstandard2.1 copy of the .net ILLinkPack to work around a trimming issue.
See https://github.com/dotnet/linker/issues/3175
TODO: Remove once .NET 8 + trimming + netstandard2.1 is fixed.
-->
<Target Name="_FixKnownILLinkPack"
BeforeTargets="ProcessFrameworkReferences">
<ItemGroup>
<KnownILLinkPack Include="@(KnownILLinkPack)"
Condition="'%(TargetFramework)' == 'net8.0'"
TargetFramework="netstandard2.1"
ILLinkPackVersion="%(KnownILLinkPack.ILLinkPackVersion)" />
</ItemGroup>
</Target>
</Project>

88
Directory.Packages.props Normal file
View File

@ -0,0 +1,88 @@
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<MicrosoftAspNetCoreAppPackageVersion>10.0.0-preview.6.25358.103</MicrosoftAspNetCoreAppPackageVersion>
<MicrosoftAspNetCoreApp9PackageVersion>9.0.4</MicrosoftAspNetCoreApp9PackageVersion>
<MicrosoftAspNetCoreApp8PackageVersion>8.0.15</MicrosoftAspNetCoreApp8PackageVersion>
<GrpcDotNetPackageVersion>2.70.0</GrpcDotNetPackageVersion>
<OpenTelemetryPackageVersion>1.6.0</OpenTelemetryPackageVersion>
<OpenTelemetryIntergationPackageVersion>1.8.1</OpenTelemetryIntergationPackageVersion>
<OpenTelemetryGrpcPackageVersion>1.8.0-beta.1</OpenTelemetryGrpcPackageVersion>
<MicrosoftExtensionsPackageVersion>10.0.0-preview.6.25358.103</MicrosoftExtensionsPackageVersion>
<MicrosoftExtensionsLtsPackageVersion>8.0.0</MicrosoftExtensionsLtsPackageVersion>
</PropertyGroup>
<ItemGroup>
<!-- ASP.NET Core -->
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="$(MicrosoftAspNetCoreAppPackageVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="$(MicrosoftAspNetCoreAppPackageVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="$(MicrosoftAspNetCoreAppPackageVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.Certificate" Version="$(MicrosoftAspNetCoreAppPackageVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="$(MicrosoftAspNetCoreAppPackageVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="$(MicrosoftAspNetCoreAppPackageVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="$(MicrosoftAspNetCoreAppPackageVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Grpc.JsonTranscoding" Version="$(MicrosoftAspNetCoreAppPackageVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Grpc.Swagger" Version="0.8.0" />
<!-- Extensions -->
<PackageVersion Include="Microsoft.Extensions.Http" Version="$(MicrosoftExtensionsPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="$(MicrosoftExtensionsPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="$(MicrosoftExtensionsPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="$(MicrosoftExtensionsPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsPackageVersion)" />
<!-- gRPC -->
<PackageVersion Include="Grpc.Tools" Version="2.71.0" />
<PackageVersion Include="Grpc.Core" Version="2.46.6" />
<PackageVersion Include="Grpc.Core.Api" Version="$(GrpcDotNetPackageVersion)"/>
<PackageVersion Include="Grpc.Net.Client" Version="$(GrpcDotNetPackageVersion)" />
<PackageVersion Include="Grpc.Net.Client.Web" Version="$(GrpcDotNetPackageVersion)" />
<PackageVersion Include="Grpc.Net.ClientFactory" Version="$(GrpcDotNetPackageVersion)" />
<PackageVersion Include="Grpc.AspNetCore" Version="$(GrpcDotNetPackageVersion)" />
<PackageVersion Include="Grpc.AspNetCore.Server" Version="$(GrpcDotNetPackageVersion)" />
<PackageVersion Include="Grpc.AspNetCore.Web" Version="$(GrpcDotNetPackageVersion)" />
<PackageVersion Include="Grpc.Reflection" Version="$(GrpcDotNetPackageVersion)" />
<PackageVersion Include="Grpc.AspNetCore.Server.Reflection" Version="$(GrpcDotNetPackageVersion)" />
<PackageVersion Include="Grpc.HealthCheck" Version="$(GrpcDotNetPackageVersion)" />
<PackageVersion Include="Grpc.AspNetCore.HealthChecks" Version="$(GrpcDotNetPackageVersion)" />
<PackageVersion Include="Grpc.Auth" Version="$(GrpcDotNetPackageVersion)" />
<PackageVersion Include="Grpc.StatusProto" Version="$(GrpcDotNetPackageVersion)" />
<!-- OpenTelemetry -->
<PackageVersion Include="OpenTelemetry" Version="$(OpenTelemetryPackageVersion)" />
<PackageVersion Include="OpenTelemetry.Exporter.Zipkin" Version="$(OpenTelemetryPackageVersion)" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="$(OpenTelemetryPackageVersion)" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="$(OpenTelemetryIntergationPackageVersion)" />
<PackageVersion Include="OpenTelemetry.Instrumentation.GrpcNetClient" Version="$(OpenTelemetryGrpcPackageVersion)" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="$(OpenTelemetryIntergationPackageVersion)" />
<!-- Other -->
<PackageVersion Include="BenchmarkDotNet" Version="0.15.2" />
<PackageVersion Include="CommandLineParser" Version="2.5.0" />
<PackageVersion Include="Google.Api.CommonProtos" Version="2.16.0" />
<PackageVersion Include="Google.Apis.Auth" Version="1.70.0" />
<PackageVersion Include="Google.Protobuf" Version="3.31.1" />
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="8.0.0" />
<PackageVersion Include="Microsoft.Build.Locator" Version="1.5.5" />
<PackageVersion Include="Microsoft.Build" Version="17.3.2" />
<PackageVersion Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="10.0.0-preview.25358.103" />
<PackageVersion Include="Microsoft.Crank.EventSources" Version="0.2.0-alpha.25128.2" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
<PackageVersion Include="Microsoft.Win32.Registry" Version="4.6.0" />
<PackageVersion Include="Moq" Version="4.20.70" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
<PackageVersion Include="Nunit" Version="4.3.2" />
<PackageVersion Include="NUnit3TestAdapter" Version="5.0.0" />
<PackageVersion Include="protobuf-net.Grpc.AspNetCore" Version="1.0.140" />
<PackageVersion Include="protobuf-net.Grpc" Version="1.0.140" />
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
<PackageVersion Include="System.CommandLine.Rendering" Version="0.4.0-alpha.22272.1" />
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="6.0.1" />
<PackageVersion Include="System.Memory" Version="4.5.3" />
<PackageVersion Include="System.Net.Http.WinHttpHandler" Version="8.0.3" />
<PackageVersion Include="System.Security.Principal.Windows" Version="5.0.0" />
<PackageVersion Include="System.Text.Json" Version="8.0.6" />
<PackageVersion Include="System.Threading.Channels" Version="4.6.0" />
</ItemGroup>
</Project>

View File

@ -1,271 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.28527.54
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{8C62055F-8CD7-4859-9001-634D544DF2AE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{CECC4AE8-9C4E-4727-939B-517CC2E58D65}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.AspNetCore.Server", "src\Grpc.AspNetCore.Server\Grpc.AspNetCore.Server.csproj", "{89ED416F-92F1-4425-9379-D4E76A285860}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.AspNetCore.Server.Tests", "test\Grpc.AspNetCore.Server.Tests\Grpc.AspNetCore.Server.Tests.csproj", "{278B1311-41BF-4345-947E-7B70E277FC3C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.AspNetCore.FunctionalTests", "test\FunctionalTests\Grpc.AspNetCore.FunctionalTests.csproj", "{B190F61D-854C-4EE1-9532-B81AB3215F90}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{4163E1B3-4D75-46B4-9107-9A158FD708FC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{59C7B1F0-EE4D-4098-8596-0ADDBC305234}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Proto", "Proto", "{BF1393D4-6099-4EF9-85BB-7EE6CBEB920C}"
ProjectSection(SolutionItems) = preProject
testassets\Proto\any.proto = testassets\Proto\any.proto
testassets\Proto\authorize.proto = testassets\Proto\authorize.proto
testassets\Proto\chat.proto = testassets\Proto\chat.proto
testassets\Proto\compression.proto = testassets\Proto\compression.proto
testassets\Proto\count.proto = testassets\Proto\count.proto
testassets\Proto\greet.proto = testassets\Proto\greet.proto
testassets\Proto\lifetime.proto = testassets\Proto\lifetime.proto
testassets\Proto\nested.proto = testassets\Proto\nested.proto
examples\Proto\race.proto = examples\Proto\race.proto
testassets\Proto\singleton.proto = testassets\Proto\singleton.proto
testassets\Proto\streaming.proto = testassets\Proto\streaming.proto
testassets\Proto\unimplemented.proto = testassets\Proto\unimplemented.proto
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FunctionalTestsWebsite", "testassets\FunctionalTestsWebsite\FunctionalTestsWebsite.csproj", "{7B95289B-4992-4C0D-B26F-8EC58F81FC96}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarkapps", "benchmarkapps", "{1B8B6117-CE39-4580-BAFA-D8026102767A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BenchmarkClient", "perf\benchmarkapps\BenchmarkClient\BenchmarkClient.csproj", "{B10D4986-25D2-4414-B500-627D89505914}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{310E5783-455A-4D09-A7AE-39DC2AB09504}"
ProjectSection(SolutionItems) = preProject
perf\benchmarkapps\Shared\benchmark_service.proto = perf\benchmarkapps\Shared\benchmark_service.proto
perf\benchmarkapps\Shared\BenchmarkConfigurationHelpers.cs = perf\benchmarkapps\Shared\BenchmarkConfigurationHelpers.cs
perf\benchmarkapps\Shared\BenchmarkServiceImpl.cs = perf\benchmarkapps\Shared\BenchmarkServiceImpl.cs
perf\benchmarkapps\Shared\messages.proto = perf\benchmarkapps\Shared\messages.proto
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.AspNetCore.Microbenchmarks", "perf\Grpc.AspNetCore.Microbenchmarks\Grpc.AspNetCore.Microbenchmarks.csproj", "{98500D54-FC3F-4A42-B74D-51930C19B175}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InteropTestsWebsite", "testassets\InteropTestsWebsite\InteropTestsWebsite.csproj", "{A551D7B1-D75A-43F0-A8E3-BAEA5EDF616A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BenchmarkWorkerWebsite", "testassets\BenchmarkWorkerWebsite\BenchmarkWorkerWebsite.csproj", "{C3D6C3BD-4E56-4B0F-88FD-4F2D68F0CD25}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Certs", "Certs", "{39320CA8-D8F0-45B6-B704-A04C16870226}"
ProjectSection(SolutionItems) = preProject
perf\benchmarkapps\Shared\Certs\testCert.pfx = perf\benchmarkapps\Shared\Certs\testCert.pfx
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.AspNetCore.Server.Reflection", "src\Grpc.AspNetCore.Server.Reflection\Grpc.AspNetCore.Server.Reflection.csproj", "{55813F20-1269-4B19-B03E-7E4A90148F92}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InteropTestsClient", "testassets\InteropTestsClient\InteropTestsClient.csproj", "{291E5BA5-608D-406D-A2DB-389412D907F3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Certs", "Certs", "{743F8EC2-004E-4640-B04F-5BAFDA8BF112}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "InteropTests", "InteropTests", "{50CF39FF-2644-4B5F-BE1A-B57487B9723B}"
ProjectSection(SolutionItems) = preProject
testassets\Certs\InteropTests\ca.pem = testassets\Certs\InteropTests\ca.pem
testassets\Certs\InteropTests\README.md = testassets\Certs\InteropTests\README.md
testassets\Certs\InteropTests\server1.key = testassets\Certs\InteropTests\server1.key
testassets\Certs\InteropTests\server1.pem = testassets\Certs\InteropTests\server1.pem
testassets\Certs\InteropTests\server1.pfx = testassets\Certs\InteropTests\server1.pfx
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "grpc", "grpc", "{6DC078D2-8FB1-4685-B9BE-61F1C0ED8053}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testing", "testing", "{88AC787E-603C-48C3-AEBA-D90F3E2142CA}"
ProjectSection(SolutionItems) = preProject
testassets\Proto\grpc\testing\empty.proto = testassets\Proto\grpc\testing\empty.proto
testassets\Proto\grpc\testing\messages.proto = testassets\Proto\grpc\testing\messages.proto
testassets\Proto\grpc\testing\test.proto = testassets\Proto\grpc\testing\test.proto
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InteropTestsNativeServer", "testassets\InteropTestsNativeServer\InteropTestsNativeServer.csproj", "{D15CAEF6-0A5D-416E-B6F7-DE75C4B1D89B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-grpc", "src\dotnet-grpc\dotnet-grpc.csproj", "{EBD5D978-1519-45ED-AC20-EC43C7FA552C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-grpc.Tests", "test\dotnet-grpc.Tests\dotnet-grpc.Tests.csproj", "{265CD0AA-A1BD-40B8-A1E6-B3CB5F7591B8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.AspNetCore.Server.ClientFactory", "src\Grpc.AspNetCore.Server.ClientFactory\Grpc.AspNetCore.Server.ClientFactory.csproj", "{BF9F5674-2BC3-446E-BBEA-3055A4A2B889}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.AspNetCore.Server.ClientFactory.Tests", "test\Grpc.AspNetCore.Server.ClientFactory.Tests\Grpc.AspNetCore.Server.ClientFactory.Tests.csproj", "{4306E048-9D81-44A8-8069-2C294289FC00}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.Net.Client", "src\Grpc.Net.Client\Grpc.Net.Client.csproj", "{095F2B46-16DC-4A2E-A075-A0373D902294}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.Net.Client.Tests", "test\Grpc.Net.Client.Tests\Grpc.Net.Client.Tests.csproj", "{7C299E2C-A5FE-439D-A346-2A676302BD04}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.Net.ClientFactory", "src\Grpc.Net.ClientFactory\Grpc.Net.ClientFactory.csproj", "{F68DBD76-196A-4F55-BBEB-97278655017F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.Net.ClientFactory.Tests", "test\Grpc.Net.ClientFactory.Tests\Grpc.Net.ClientFactory.Tests.csproj", "{0C98BD64-8A57-46A1-B47B-EAF260DEE25A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.AspNetCore", "src\Grpc.AspNetCore\Grpc.AspNetCore.csproj", "{F6CA82C9-85C6-4A5F-B892-4DF8A20B1C05}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.Net.Common", "src\Grpc.Net.Common\Grpc.Net.Common.csproj", "{69C50655-71EE-4E69-BC2C-ABCA568F6E76}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GrpcAspNetCoreServer", "perf\benchmarkapps\GrpcAspNetCoreServer\GrpcAspNetCoreServer.csproj", "{1D9AB69D-244C-4871-867E-DCEC52B552A4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GrpcCoreServer", "perf\benchmarkapps\GrpcCoreServer\GrpcCoreServer.csproj", "{781111FC-8F3C-433E-BC96-D88ADAEE3064}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.Net.Client.Web", "src\Grpc.Net.Client.Web\Grpc.Net.Client.Web.csproj", "{429EB088-94FF-4F06-8E54-72157089C8C3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.AspNetCore.Web", "src\Grpc.AspNetCore.Web\Grpc.AspNetCore.Web.csproj", "{778DB6EE-E5B2-4875-A209-40010B5A3E21}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.AspNetCore.HealthChecks", "src\Grpc.AspNetCore.HealthChecks\Grpc.AspNetCore.HealthChecks.csproj", "{39A9F2B5-2541-423E-83C9-46C7BFF53F41}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{89ED416F-92F1-4425-9379-D4E76A285860}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{89ED416F-92F1-4425-9379-D4E76A285860}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89ED416F-92F1-4425-9379-D4E76A285860}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89ED416F-92F1-4425-9379-D4E76A285860}.Release|Any CPU.Build.0 = Release|Any CPU
{278B1311-41BF-4345-947E-7B70E277FC3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{278B1311-41BF-4345-947E-7B70E277FC3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{278B1311-41BF-4345-947E-7B70E277FC3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{278B1311-41BF-4345-947E-7B70E277FC3C}.Release|Any CPU.Build.0 = Release|Any CPU
{B190F61D-854C-4EE1-9532-B81AB3215F90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B190F61D-854C-4EE1-9532-B81AB3215F90}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B190F61D-854C-4EE1-9532-B81AB3215F90}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B190F61D-854C-4EE1-9532-B81AB3215F90}.Release|Any CPU.Build.0 = Release|Any CPU
{7B95289B-4992-4C0D-B26F-8EC58F81FC96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7B95289B-4992-4C0D-B26F-8EC58F81FC96}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7B95289B-4992-4C0D-B26F-8EC58F81FC96}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7B95289B-4992-4C0D-B26F-8EC58F81FC96}.Release|Any CPU.Build.0 = Release|Any CPU
{B10D4986-25D2-4414-B500-627D89505914}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B10D4986-25D2-4414-B500-627D89505914}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B10D4986-25D2-4414-B500-627D89505914}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B10D4986-25D2-4414-B500-627D89505914}.Release|Any CPU.Build.0 = Release|Any CPU
{98500D54-FC3F-4A42-B74D-51930C19B175}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{98500D54-FC3F-4A42-B74D-51930C19B175}.Debug|Any CPU.Build.0 = Debug|Any CPU
{98500D54-FC3F-4A42-B74D-51930C19B175}.Release|Any CPU.ActiveCfg = Release|Any CPU
{98500D54-FC3F-4A42-B74D-51930C19B175}.Release|Any CPU.Build.0 = Release|Any CPU
{A551D7B1-D75A-43F0-A8E3-BAEA5EDF616A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A551D7B1-D75A-43F0-A8E3-BAEA5EDF616A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A551D7B1-D75A-43F0-A8E3-BAEA5EDF616A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A551D7B1-D75A-43F0-A8E3-BAEA5EDF616A}.Release|Any CPU.Build.0 = Release|Any CPU
{C3D6C3BD-4E56-4B0F-88FD-4F2D68F0CD25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C3D6C3BD-4E56-4B0F-88FD-4F2D68F0CD25}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C3D6C3BD-4E56-4B0F-88FD-4F2D68F0CD25}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C3D6C3BD-4E56-4B0F-88FD-4F2D68F0CD25}.Release|Any CPU.Build.0 = Release|Any CPU
{55813F20-1269-4B19-B03E-7E4A90148F92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{55813F20-1269-4B19-B03E-7E4A90148F92}.Debug|Any CPU.Build.0 = Debug|Any CPU
{55813F20-1269-4B19-B03E-7E4A90148F92}.Release|Any CPU.ActiveCfg = Release|Any CPU
{55813F20-1269-4B19-B03E-7E4A90148F92}.Release|Any CPU.Build.0 = Release|Any CPU
{291E5BA5-608D-406D-A2DB-389412D907F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{291E5BA5-608D-406D-A2DB-389412D907F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{291E5BA5-608D-406D-A2DB-389412D907F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{291E5BA5-608D-406D-A2DB-389412D907F3}.Release|Any CPU.Build.0 = Release|Any CPU
{D15CAEF6-0A5D-416E-B6F7-DE75C4B1D89B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D15CAEF6-0A5D-416E-B6F7-DE75C4B1D89B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D15CAEF6-0A5D-416E-B6F7-DE75C4B1D89B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D15CAEF6-0A5D-416E-B6F7-DE75C4B1D89B}.Release|Any CPU.Build.0 = Release|Any CPU
{EBD5D978-1519-45ED-AC20-EC43C7FA552C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EBD5D978-1519-45ED-AC20-EC43C7FA552C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EBD5D978-1519-45ED-AC20-EC43C7FA552C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EBD5D978-1519-45ED-AC20-EC43C7FA552C}.Release|Any CPU.Build.0 = Release|Any CPU
{265CD0AA-A1BD-40B8-A1E6-B3CB5F7591B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{265CD0AA-A1BD-40B8-A1E6-B3CB5F7591B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{265CD0AA-A1BD-40B8-A1E6-B3CB5F7591B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{265CD0AA-A1BD-40B8-A1E6-B3CB5F7591B8}.Release|Any CPU.Build.0 = Release|Any CPU
{BF9F5674-2BC3-446E-BBEA-3055A4A2B889}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BF9F5674-2BC3-446E-BBEA-3055A4A2B889}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BF9F5674-2BC3-446E-BBEA-3055A4A2B889}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BF9F5674-2BC3-446E-BBEA-3055A4A2B889}.Release|Any CPU.Build.0 = Release|Any CPU
{4306E048-9D81-44A8-8069-2C294289FC00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4306E048-9D81-44A8-8069-2C294289FC00}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4306E048-9D81-44A8-8069-2C294289FC00}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4306E048-9D81-44A8-8069-2C294289FC00}.Release|Any CPU.Build.0 = Release|Any CPU
{095F2B46-16DC-4A2E-A075-A0373D902294}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{095F2B46-16DC-4A2E-A075-A0373D902294}.Debug|Any CPU.Build.0 = Debug|Any CPU
{095F2B46-16DC-4A2E-A075-A0373D902294}.Release|Any CPU.ActiveCfg = Release|Any CPU
{095F2B46-16DC-4A2E-A075-A0373D902294}.Release|Any CPU.Build.0 = Release|Any CPU
{7C299E2C-A5FE-439D-A346-2A676302BD04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7C299E2C-A5FE-439D-A346-2A676302BD04}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7C299E2C-A5FE-439D-A346-2A676302BD04}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7C299E2C-A5FE-439D-A346-2A676302BD04}.Release|Any CPU.Build.0 = Release|Any CPU
{F68DBD76-196A-4F55-BBEB-97278655017F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F68DBD76-196A-4F55-BBEB-97278655017F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F68DBD76-196A-4F55-BBEB-97278655017F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F68DBD76-196A-4F55-BBEB-97278655017F}.Release|Any CPU.Build.0 = Release|Any CPU
{0C98BD64-8A57-46A1-B47B-EAF260DEE25A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0C98BD64-8A57-46A1-B47B-EAF260DEE25A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0C98BD64-8A57-46A1-B47B-EAF260DEE25A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0C98BD64-8A57-46A1-B47B-EAF260DEE25A}.Release|Any CPU.Build.0 = Release|Any CPU
{F6CA82C9-85C6-4A5F-B892-4DF8A20B1C05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F6CA82C9-85C6-4A5F-B892-4DF8A20B1C05}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F6CA82C9-85C6-4A5F-B892-4DF8A20B1C05}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F6CA82C9-85C6-4A5F-B892-4DF8A20B1C05}.Release|Any CPU.Build.0 = Release|Any CPU
{69C50655-71EE-4E69-BC2C-ABCA568F6E76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{69C50655-71EE-4E69-BC2C-ABCA568F6E76}.Debug|Any CPU.Build.0 = Debug|Any CPU
{69C50655-71EE-4E69-BC2C-ABCA568F6E76}.Release|Any CPU.ActiveCfg = Release|Any CPU
{69C50655-71EE-4E69-BC2C-ABCA568F6E76}.Release|Any CPU.Build.0 = Release|Any CPU
{1D9AB69D-244C-4871-867E-DCEC52B552A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1D9AB69D-244C-4871-867E-DCEC52B552A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1D9AB69D-244C-4871-867E-DCEC52B552A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1D9AB69D-244C-4871-867E-DCEC52B552A4}.Release|Any CPU.Build.0 = Release|Any CPU
{781111FC-8F3C-433E-BC96-D88ADAEE3064}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{781111FC-8F3C-433E-BC96-D88ADAEE3064}.Debug|Any CPU.Build.0 = Debug|Any CPU
{781111FC-8F3C-433E-BC96-D88ADAEE3064}.Release|Any CPU.ActiveCfg = Release|Any CPU
{781111FC-8F3C-433E-BC96-D88ADAEE3064}.Release|Any CPU.Build.0 = Release|Any CPU
{429EB088-94FF-4F06-8E54-72157089C8C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{429EB088-94FF-4F06-8E54-72157089C8C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{429EB088-94FF-4F06-8E54-72157089C8C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{429EB088-94FF-4F06-8E54-72157089C8C3}.Release|Any CPU.Build.0 = Release|Any CPU
{778DB6EE-E5B2-4875-A209-40010B5A3E21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{778DB6EE-E5B2-4875-A209-40010B5A3E21}.Debug|Any CPU.Build.0 = Debug|Any CPU
{778DB6EE-E5B2-4875-A209-40010B5A3E21}.Release|Any CPU.ActiveCfg = Release|Any CPU
{778DB6EE-E5B2-4875-A209-40010B5A3E21}.Release|Any CPU.Build.0 = Release|Any CPU
{39A9F2B5-2541-423E-83C9-46C7BFF53F41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{39A9F2B5-2541-423E-83C9-46C7BFF53F41}.Debug|Any CPU.Build.0 = Debug|Any CPU
{39A9F2B5-2541-423E-83C9-46C7BFF53F41}.Release|Any CPU.ActiveCfg = Release|Any CPU
{39A9F2B5-2541-423E-83C9-46C7BFF53F41}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{89ED416F-92F1-4425-9379-D4E76A285860} = {8C62055F-8CD7-4859-9001-634D544DF2AE}
{278B1311-41BF-4345-947E-7B70E277FC3C} = {CECC4AE8-9C4E-4727-939B-517CC2E58D65}
{B190F61D-854C-4EE1-9532-B81AB3215F90} = {CECC4AE8-9C4E-4727-939B-517CC2E58D65}
{59C7B1F0-EE4D-4098-8596-0ADDBC305234} = {CECC4AE8-9C4E-4727-939B-517CC2E58D65}
{BF1393D4-6099-4EF9-85BB-7EE6CBEB920C} = {59C7B1F0-EE4D-4098-8596-0ADDBC305234}
{7B95289B-4992-4C0D-B26F-8EC58F81FC96} = {59C7B1F0-EE4D-4098-8596-0ADDBC305234}
{1B8B6117-CE39-4580-BAFA-D8026102767A} = {4163E1B3-4D75-46B4-9107-9A158FD708FC}
{B10D4986-25D2-4414-B500-627D89505914} = {1B8B6117-CE39-4580-BAFA-D8026102767A}
{310E5783-455A-4D09-A7AE-39DC2AB09504} = {1B8B6117-CE39-4580-BAFA-D8026102767A}
{98500D54-FC3F-4A42-B74D-51930C19B175} = {4163E1B3-4D75-46B4-9107-9A158FD708FC}
{A551D7B1-D75A-43F0-A8E3-BAEA5EDF616A} = {59C7B1F0-EE4D-4098-8596-0ADDBC305234}
{C3D6C3BD-4E56-4B0F-88FD-4F2D68F0CD25} = {59C7B1F0-EE4D-4098-8596-0ADDBC305234}
{39320CA8-D8F0-45B6-B704-A04C16870226} = {310E5783-455A-4D09-A7AE-39DC2AB09504}
{55813F20-1269-4B19-B03E-7E4A90148F92} = {8C62055F-8CD7-4859-9001-634D544DF2AE}
{291E5BA5-608D-406D-A2DB-389412D907F3} = {59C7B1F0-EE4D-4098-8596-0ADDBC305234}
{743F8EC2-004E-4640-B04F-5BAFDA8BF112} = {59C7B1F0-EE4D-4098-8596-0ADDBC305234}
{50CF39FF-2644-4B5F-BE1A-B57487B9723B} = {743F8EC2-004E-4640-B04F-5BAFDA8BF112}
{6DC078D2-8FB1-4685-B9BE-61F1C0ED8053} = {BF1393D4-6099-4EF9-85BB-7EE6CBEB920C}
{88AC787E-603C-48C3-AEBA-D90F3E2142CA} = {6DC078D2-8FB1-4685-B9BE-61F1C0ED8053}
{D15CAEF6-0A5D-416E-B6F7-DE75C4B1D89B} = {59C7B1F0-EE4D-4098-8596-0ADDBC305234}
{EBD5D978-1519-45ED-AC20-EC43C7FA552C} = {8C62055F-8CD7-4859-9001-634D544DF2AE}
{265CD0AA-A1BD-40B8-A1E6-B3CB5F7591B8} = {CECC4AE8-9C4E-4727-939B-517CC2E58D65}
{BF9F5674-2BC3-446E-BBEA-3055A4A2B889} = {8C62055F-8CD7-4859-9001-634D544DF2AE}
{4306E048-9D81-44A8-8069-2C294289FC00} = {CECC4AE8-9C4E-4727-939B-517CC2E58D65}
{095F2B46-16DC-4A2E-A075-A0373D902294} = {8C62055F-8CD7-4859-9001-634D544DF2AE}
{7C299E2C-A5FE-439D-A346-2A676302BD04} = {CECC4AE8-9C4E-4727-939B-517CC2E58D65}
{F68DBD76-196A-4F55-BBEB-97278655017F} = {8C62055F-8CD7-4859-9001-634D544DF2AE}
{0C98BD64-8A57-46A1-B47B-EAF260DEE25A} = {CECC4AE8-9C4E-4727-939B-517CC2E58D65}
{F6CA82C9-85C6-4A5F-B892-4DF8A20B1C05} = {8C62055F-8CD7-4859-9001-634D544DF2AE}
{69C50655-71EE-4E69-BC2C-ABCA568F6E76} = {8C62055F-8CD7-4859-9001-634D544DF2AE}
{1D9AB69D-244C-4871-867E-DCEC52B552A4} = {1B8B6117-CE39-4580-BAFA-D8026102767A}
{781111FC-8F3C-433E-BC96-D88ADAEE3064} = {1B8B6117-CE39-4580-BAFA-D8026102767A}
{429EB088-94FF-4F06-8E54-72157089C8C3} = {8C62055F-8CD7-4859-9001-634D544DF2AE}
{778DB6EE-E5B2-4875-A209-40010B5A3E21} = {8C62055F-8CD7-4859-9001-634D544DF2AE}
{39A9F2B5-2541-423E-83C9-46C7BFF53F41} = {8C62055F-8CD7-4859-9001-634D544DF2AE}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {CD5C2B19-49B4-480A-990C-36D98A719B07}
EndGlobalSection
EndGlobal

90
Grpc.DotNet.slnx Normal file
View File

@ -0,0 +1,90 @@
<Solution>
<Folder Name="/perf/">
<Project Path="perf/Grpc.AspNetCore.Microbenchmarks/Grpc.AspNetCore.Microbenchmarks.csproj" />
</Folder>
<Folder Name="/perf/benchmarkapps/">
<Project Path="perf/benchmarkapps/GrpcAspNetCoreServer/GrpcAspNetCoreServer.csproj" />
<Project Path="perf/benchmarkapps/GrpcClient/GrpcClient.csproj" />
<Project Path="perf/benchmarkapps/GrpcCoreServer/GrpcCoreServer.csproj" />
<Project Path="perf/benchmarkapps/QpsWorker/QpsWorker.csproj" />
</Folder>
<Folder Name="/perf/benchmarkapps/Shared/">
<File Path="perf/benchmarkapps/Shared/BenchmarkConfigurationHelpers.cs" />
<File Path="perf/benchmarkapps/Shared/BenchmarkServiceImpl.cs" />
<File Path="perf/benchmarkapps/Shared/benchmark_service.proto" />
<File Path="perf/benchmarkapps/Shared/messages.proto" />
</Folder>
<Folder Name="/perf/benchmarkapps/Shared/Certs/">
<File Path="perf/benchmarkapps/Shared/Certs/testCert.pfx" />
</Folder>
<Folder Name="/src/">
<Project Path="src/dotnet-grpc/dotnet-grpc.csproj" />
<Project Path="src/Grpc.AspNetCore.HealthChecks/Grpc.AspNetCore.HealthChecks.csproj" />
<Project Path="src/Grpc.AspNetCore.Server.ClientFactory/Grpc.AspNetCore.Server.ClientFactory.csproj" />
<Project Path="src/Grpc.AspNetCore.Server.Reflection/Grpc.AspNetCore.Server.Reflection.csproj" />
<Project Path="src/Grpc.AspNetCore.Server/Grpc.AspNetCore.Server.csproj" />
<Project Path="src/Grpc.AspNetCore.Web/Grpc.AspNetCore.Web.csproj" />
<Project Path="src/Grpc.AspNetCore/Grpc.AspNetCore.csproj" />
<Project Path="src/Grpc.Auth/Grpc.Auth.csproj" />
<Project Path="src/Grpc.Core.Api/Grpc.Core.Api.csproj" />
<Project Path="src/Grpc.HealthCheck/Grpc.HealthCheck.csproj" />
<Project Path="src/Grpc.Net.Client.Web/Grpc.Net.Client.Web.csproj" />
<Project Path="src/Grpc.Net.Client/Grpc.Net.Client.csproj" />
<Project Path="src/Grpc.Net.ClientFactory/Grpc.Net.ClientFactory.csproj" />
<Project Path="src/Grpc.Net.Common/Grpc.Net.Common.csproj" />
<Project Path="src/Grpc.Reflection/Grpc.Reflection.csproj" />
<Project Path="src/Grpc.StatusProto/Grpc.StatusProto.csproj" />
</Folder>
<Folder Name="/tests/">
<Project Path="test/dotnet-grpc.Tests/dotnet-grpc.Tests.csproj" />
<Project Path="test/FunctionalTests/Grpc.AspNetCore.FunctionalTests.csproj" />
<Project Path="test/Grpc.AspNetCore.Server.ClientFactory.Tests/Grpc.AspNetCore.Server.ClientFactory.Tests.csproj" />
<Project Path="test/Grpc.AspNetCore.Server.Tests/Grpc.AspNetCore.Server.Tests.csproj" />
<Project Path="test/Grpc.Core.Api.Tests/Grpc.Core.Api.Tests.csproj" />
<Project Path="test/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj" />
<Project Path="test/Grpc.Net.Client.Tests/Grpc.Net.Client.Tests.csproj" />
<Project Path="test/Grpc.Net.Client.Web.Tests/Grpc.Net.Client.Web.Tests.csproj" />
<Project Path="test/Grpc.Net.ClientFactory.Tests/Grpc.Net.ClientFactory.Tests.csproj" />
<Project Path="test/Grpc.Reflection.Tests/Grpc.Reflection.Tests.csproj" />
<Project Path="test/Grpc.StatusProto.Tests/Grpc.StatusProto.Tests.csproj" />
</Folder>
<Folder Name="/tests/testassets/">
<Project Path="testassets/BenchmarkWorkerWebsite/BenchmarkWorkerWebsite.csproj" />
<Project Path="testassets/FunctionalTestsWebsite/FunctionalTestsWebsite.csproj" />
<Project Path="testassets/InteropTestsClient/InteropTestsClient.csproj" />
<Project Path="testassets/InteropTestsGrpcWebClient/InteropTestsGrpcWebClient.csproj" />
<Project Path="testassets/InteropTestsGrpcWebWebsite/InteropTestsGrpcWebWebsite.csproj" />
<Project Path="testassets/InteropTestsNativeServer/InteropTestsNativeServer.csproj" />
<Project Path="testassets/InteropTestsWebsite/InteropTestsWebsite.csproj" />
<Project Path="testassets/LinkerTestsClient/LinkerTestsClient.csproj" />
<Project Path="testassets/LinkerTestsWebsite/LinkerTestsWebsite.csproj" />
</Folder>
<Folder Name="/tests/testassets/Certs/" />
<Folder Name="/tests/testassets/Certs/InteropTests/">
<File Path="testassets/Certs/InteropTests/ca.pem" />
<File Path="testassets/Certs/InteropTests/README.md" />
<File Path="testassets/Certs/InteropTests/server1.key" />
<File Path="testassets/Certs/InteropTests/server1.pem" />
<File Path="testassets/Certs/InteropTests/server1.pfx" />
</Folder>
<Folder Name="/tests/testassets/Proto/">
<File Path="examples/Proto/race.proto" />
<File Path="testassets/Proto/any.proto" />
<File Path="testassets/Proto/authorize.proto" />
<File Path="testassets/Proto/chat.proto" />
<File Path="testassets/Proto/compression.proto" />
<File Path="testassets/Proto/count.proto" />
<File Path="testassets/Proto/greet.proto" />
<File Path="testassets/Proto/lifetime.proto" />
<File Path="testassets/Proto/nested.proto" />
<File Path="testassets/Proto/singleton.proto" />
<File Path="testassets/Proto/streaming.proto" />
<File Path="testassets/Proto/unimplemented.proto" />
</Folder>
<Folder Name="/tests/testassets/Proto/grpc/" />
<Folder Name="/tests/testassets/Proto/grpc/testing/">
<File Path="testassets/Proto/grpc/testing/empty.proto" />
<File Path="testassets/Proto/grpc/testing/messages.proto" />
<File Path="testassets/Proto/grpc/testing/test.proto" />
</Folder>
</Solution>

View File

@ -8,11 +8,17 @@ See [CONTRIBUTING.md](https://github.com/grpc/grpc-community/blob/master/CONTRIB
for general contribution guidelines.
## Maintainers (in alphabetical order)
- [anurse](https://github.com/anurse), Microsoft Corporation
- [adityamandaleeka](https://github.com/adityamandaleeka), Microsoft Corporation
- [amcasey](https://github.com/amcasey), Microsoft Corporation
- [apolcyn](https://github.com/apolcyn), Google LLC
- [benjaminpetit](https://github.com/benjaminpetit), Microsoft Corporation
- [BrennanConroy](https://github.com/BrennanConroy), Microsoft Corporation
- [davidfowl](https://github.com/davidfowl), Microsoft Corporation
- [JamesNK](https://github.com/JamesNK), Microsoft Corporation
- [jtattermusch](https://github.com/jtattermusch), Google LLC
- [JunTaoLuo](https://github.com/JunTaoLuo), Microsoft Corporation
- [mgravell](https://github.com/mgravell), Microsoft Corporation
- [ReubenBond](https://github.com/ReubenBond), Microsoft Corporation
- [stanley-cheung](https://github.com/stanley-cheung), Google LLC
## Emeritus Maintainers (in alphabetical order)
- [jtattermusch](https://github.com/jtattermusch)
- [JunTaoLuo](https://github.com/JunTaoLuo)

View File

@ -1,22 +1,23 @@
# gRPC for .NET
## Available now on .NET Core 3.0!
gRPC is a modern, open source, high-performance remote procedure call (RPC) framework that can run anywhere. gRPC enables client and server applications to communicate transparently, and simplifies the building of connected systems.
gRPC functionality for .NET Core 3.0 includes:
gRPC functionality for .NET Core 3.0 or later includes:
* [Grpc.AspNetCore](https://www.nuget.org/packages/Grpc.AspNetCore) &ndash; An ASP.NET Core framework for hosting gRPC services. gRPC on ASP.NET Core integrates with standard ASP.NET Core features like logging, dependency injection (DI), authentication and authorization.
* [Grpc.Net.Client](https://www.nuget.org/packages/Grpc.Net.Client) &ndash; A gRPC client for .NET Core that builds upon the familiar `HttpClient`. The client uses new HTTP/2 functionality in .NET Core.
* [Grpc.Net.ClientFactory](https://www.nuget.org/packages/Grpc.Net.ClientFactory) &ndash; gRPC client integration with `HttpClientFactory`. The client factory allows gRPC clients to be centrally configured and injected into your app with DI.
Please note that gRPC for .NET does not replace [gRPC for C#](https://github.com/grpc/grpc/tree/master/src/csharp) (gRPC C# API over native C-core binaries). These implementations coexist and share many of the same APIs to avoid lock-in. There are currently no plans for one implementation to replace the other one. gRPC for C# is the recommended solution for frameworks that gRPC for .NET does not support, such as .NET Framework.
For more information, see [An introduction to gRPC on .NET](https://docs.microsoft.com/aspnet/core/grpc/).
## gRPC for .NET is now the recommended implementation!
Starting from May 2021, gRPC for .NET is the recommended implemention of gRPC for C#. The original [gRPC for C#](https://github.com/grpc/grpc/tree/master/src/csharp) implementation (distributed as the `Grpc.Core` nuget package) is now in maintenance mode and will be deprecated in the future.
See [blogpost](https://grpc.io/blog/grpc-csharp-future/) for more details.
## To start using gRPC for .NET
The best place to start using gRPC for .NET is the gRPC template that comes with .NET Core 3.0. Use the template to [create a gRPC service website and client](https://docs.microsoft.com/aspnet/core/tutorials/grpc/grpc-start).
The best place to start using gRPC for .NET is the gRPC template that comes with .NET Core 3.0 or later. Use the template to [create a gRPC service website and client](https://docs.microsoft.com/aspnet/core/tutorials/grpc/grpc-start).
For additional examples of using gRPC in .NET refer to https://github.com/grpc/grpc-dotnet/tree/master/examples.
@ -61,14 +62,20 @@ startvs.cmd
To build from the command line:
```
dotnet build Grpc.DotNet.sln
dotnet build Grpc.DotNet.slnx
```
To run tests from the command line:
```
dotnet test Grpc.DotNet.sln
dotnet test Grpc.DotNet.slnx
```
### Alternative implementation using Code-First (external library)
An alternative way to use gRPC in .NET is to define the Protobuf contracts directly in C# using [protobuf-net](https://github.com/protobuf-net/protobuf-net.Grpc).
For more information, see the documentation on [learn.microsoft.com](https://learn.microsoft.com/aspnet/core/grpc/code-first) or the [protobuf-net.Grpc website](https://protobuf-net.github.io/protobuf-net.Grpc/).
## To contribute
Contributions are welcome!

View File

@ -1,27 +0,0 @@
<Project>
<PropertyGroup>
<BenchmarkDotNetPackageVersion>0.11.3</BenchmarkDotNetPackageVersion>
<CommandLineParserPackageVersion>2.3.0</CommandLineParserPackageVersion>
<GoogleProtobufPackageVersion>3.11.4</GoogleProtobufPackageVersion>
<GrpcDotNetPackageVersion>2.27.0-pre1</GrpcDotNetPackageVersion> <!-- Only use for example projects -->
<GrpcPackageVersion>2.27.0</GrpcPackageVersion>
<MicrosoftAspNetCorePackageVersion>3.1.2</MicrosoftAspNetCorePackageVersion>
<MicrosoftAspNetCoreBlazorPackageVersion>3.2.0-preview1.20073.1</MicrosoftAspNetCoreBlazorPackageVersion>
<MicrosoftBuildLocatorPackageVersion>1.2.2</MicrosoftBuildLocatorPackageVersion>
<MicrosoftBuildPackageVersion>16.0.461</MicrosoftBuildPackageVersion>
<MicrosoftCodeAnalysisFxCopAnalyzersPackageVersion>2.9.4</MicrosoftCodeAnalysisFxCopAnalyzersPackageVersion>
<MicrosoftExtensionsPackageVersion>2.1.1</MicrosoftExtensionsPackageVersion>
<MicrosoftExtensions30PackageVersion>3.0.0</MicrosoftExtensions30PackageVersion>
<MicrosoftNETTestSdkPackageVersion>16.2.0</MicrosoftNETTestSdkPackageVersion>
<MicrosoftSourceLinkGitHubPackageVersion>1.0.0-beta2-19367-01</MicrosoftSourceLinkGitHubPackageVersion>
<MicrosoftWin32RegistryLinePackageVersion>4.6.0</MicrosoftWin32RegistryLinePackageVersion>
<MoqPackageVersion>4.10.0</MoqPackageVersion>
<NewtonsoftJsonPackageVersion>12.0.2</NewtonsoftJsonPackageVersion>
<NunitPackageVersion>3.12.0</NunitPackageVersion>
<Nunit3TestAdapterPackageVersion>3.13.0</Nunit3TestAdapterPackageVersion>
<OpenTelemetryPackageVersion>0.2.0-alpha.100</OpenTelemetryPackageVersion>
<SystemCommandLinePackageVersion>0.3.0-alpha.19405.1</SystemCommandLinePackageVersion>
<SystemDiagnosticsDiagnosticSourcePackageVersion>4.5.1</SystemDiagnosticsDiagnosticSourcePackageVersion>
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0</SystemSecurityPrincipalWindowsPackageVersion>
</PropertyGroup>
</Project>

View File

@ -27,4 +27,11 @@ echo "Downloading install script: $install_script_url => $install_script_path"
curl -sSL -o $install_script_path $install_script_url
chmod +x $install_script_path
# Install .NET 8 SDK to run 8.0 test targets
$install_script_path -v 8.0.412 -i $dotnet_install_path
# Install .NET 9 SDK to run 9.0 test targets
$install_script_path -v 9.0.303 -i $dotnet_install_path
# Install .NET version specified by global.json
$install_script_path -v $sdk_version -i $dotnet_install_path

View File

@ -1,21 +0,0 @@
<Project>
<PropertyGroup Label="RestoreSources">
<RestoreSources>
$(RestoreSources);
https://api.nuget.org/v3/index.json;
https://dotnetfeed.blob.core.windows.net/aspnet-aspnetcore/index.json;
https://dotnetfeed.blob.core.windows.net/aspnet-extensions/index.json;
https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json;
https://dotnet.myget.org/F/roslyn/api/v3/index.json;
</RestoreSources>
<RestoreSources Condition="Exists('$(MSBuildThisFileDirectory)feed')">
$(RestoreSources);
$(MSBuildThisFileDirectory)feed;
</RestoreSources>
<!-- The following is used to ingest nightly gRPC packages -->
<RestoreSources>
$(RestoreSources);
https://grpc.jfrog.io/grpc/api/nuget/v3/grpc-nuget-dev;
</RestoreSources>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,32 @@
#!/bin/bash
# Copyright 2022 The gRPC Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Update Grpc.Core.Api's VersionInfo.cs with versions from version.props
set -e
cd "$(dirname "$0")"
# retrieve version strings from version.props
PACKAGE_VERSION=$(grep -o '<GrpcDotnetVersion>.*</GrpcDotnetVersion>' version.props | sed 's/<GrpcDotnetVersion>//' | sed 's/<\/GrpcDotnetVersion>//')
ASSEMBLY_VERSION=$(grep -o '<GrpcDotnetAssemblyVersion>.*</GrpcDotnetAssemblyVersion>' version.props | sed 's/<GrpcDotnetAssemblyVersion>//' | sed 's/<\/GrpcDotnetAssemblyVersion>//')
ASSEMBLY_FILE_VERSION=$(grep -o '<GrpcDotnetAssemblyFileVersion>.*</GrpcDotnetAssemblyFileVersion>' version.props | sed 's/<GrpcDotnetAssemblyFileVersion>//' | sed 's/<\/GrpcDotnetAssemblyFileVersion>//')
# update the contents of src/Grpc.Core.Api/VersionInfo.cs with the version strings
sed -i "s/CurrentVersion = \".*\"/CurrentVersion = \"${PACKAGE_VERSION}\"/g" ../src/Grpc.Core.Api/VersionInfo.cs
sed -i "s/CurrentAssemblyVersion = \".*\"/CurrentAssemblyVersion = \"${ASSEMBLY_VERSION}\"/g" ../src/Grpc.Core.Api/VersionInfo.cs
sed -i "s/CurrentAssemblyFileVersion = \".*\"/CurrentAssemblyFileVersion = \"${ASSEMBLY_FILE_VERSION}\"/g" ../src/Grpc.Core.Api/VersionInfo.cs
echo "Updated version strings in src/Grpc.Core.Api/VersionInfo.cs"

View File

@ -2,13 +2,13 @@
<PropertyGroup>
<!-- package version of grpc-dotnet -->
<GrpcDotnetVersion>2.28.0-dev</GrpcDotnetVersion>
<GrpcDotnetVersion>2.66.0-dev</GrpcDotnetVersion>
<!-- assembly version of grpc-dotnet -->
<GrpcDotnetAssemblyVersion>2.0.0.0</GrpcDotnetAssemblyVersion>
<!-- file version of all grpc-dotnet -->
<GrpcDotnetAssemblyFileVersion>2.28.0.0</GrpcDotnetAssemblyFileVersion>
<GrpcDotnetAssemblyFileVersion>2.66.0.0</GrpcDotnetAssemblyFileVersion>
</PropertyGroup>
</Project>

View File

@ -22,38 +22,21 @@ echo "Building solution"
dotnet build -c Release
echo "Building examples"
example_solutions=( $( ls examples/**/*.sln ) )
example_solutions=( $( ls examples/**/*.slnx ) )
for example_solution in "${example_solutions[@]}"
do
# dotnet build uses msbuild, and attempts to speed consecutive builds by reusing processes.
# This can become a problem when multiple versions of Grpc.Tools are used between builds.
# The different versions will conflict. Shutdown build processes between builds to avoid conflicts.
# Will be fixed in msbuild 16.5 - https://github.com/microsoft/msbuild/issues/1754
dotnet build-server shutdown
dotnet build $example_solution -c Release
done
echo "Testing solution"
has_failures=false
test_projects=( $( ls test/**/*Tests.csproj ) )
for test_project in "${test_projects[@]}"
do
# "dotnet test" is hanging when it writes to console for an unknown reason
# Tracking issue at https://github.com/microsoft/vstest/issues/2080
# Write test output to a text file and then write the text file to console as a workaround
{
dotnet test $test_project -c Release -v n --no-build &> ${test_project##*/}.log.txt &&
echo "Success" &&
cat ${test_project##*/}.log.txt
} || {
echo "Failure" &&
cat ${test_project##*/}.log.txt &&
exit 1
}
base_name=$(basename ${test_project%.*})
dotnet test $test_project -c Release --no-build --logger "trx;LogFilePrefix=$base_name" --results-directory artifacts/test-results -- NUnit.ConsoleOut=0 || has_failures=true
done
echo "Finished"
if [ "$has_failures" = true ]; then
exit 1
fi

View File

@ -11,23 +11,60 @@ This document summarizes the differences between the two available implementatio
## Criteria for choosing between grpc-dotnet and gRPC C#
One might choose one or the other implementation mostly for one of these reasons
Starting from May 2021, gRPC for .NET is the recommended implemention of gRPC for C#.
The original [gRPC C#](https://github.com/grpc/grpc/tree/master/src/csharp) implementation (distributed as the `Grpc.Core` nuget package) is now in maintenance mode and will be deprecated in the future.
See [blogpost](https://grpc.io/blog/grpc-csharp-future/) for more details.
- avoid use of native code
- ability to use .NET Core 3 and ASP.NET Core 3 (it's a brand new stack so not everyone will be able to use immediately)
- want seamless integration with ASP.NET Core 3, dependency injection etc.
- features available (see breakdown)
- maturity level
- performance (TODO: add data)
Here are some key points in which the two implementation differ:
- grpc-dotnet avoids the use of native code (while Grpc.Core use the native C-core library internally)
- grpc-dotnet requires a newer version of .NET (see the "Framework supported" section)
- grpc-dotnet server integrates seamlessly ASP.NET Core (and allows e.g. dependency injection)
- performance (while data we have data that seems to indicate that grpc-dotnet peforms at least as well as Grpc.Core, we strongly encourage to run your own benchmarks if performance matters for your application)
- features available (see breakdown below)
## Frameworks supported
Grpc.Core supports a wide range of .NET versions, including some very old ones. A more detailed overview is [here]( https://github.com/grpc/grpc/tree/master/src/csharp#supported-platforms)
grpc-dotnet uses features only available in modern .NET releases. It doesn't support some older versions of .NET. A detailed summary of .NET versions supported by grpc-dotnet is [here](https://docs.microsoft.com/aspnet/core/grpc/supported-platforms). There is limited support for [grpc-dotnet client support on
legacy .NET Framework](https://docs.microsoft.com/aspnet/core/grpc/netstandard).
## Comparison of supported features
Beyond the basic RPC functionality, there are a lot of gRPC features that may or may not be supported. The summary
of supported features in both implementation is available in this section.
### Proxyless service mesh (XDS) support
While support for some of the Proxyless service mesh functionality comes "for free" by virtue of using the implementation from C-core native library, we don't officially support the proxyless service mesh functionality in C#.
In grpc-dotnet, we currently don't provide proxyless service mesh support, but it's something that we plan to add in the future. One of the first features we want to integrate is XDS load balancing.
### Load Balancing
grpc-dotnet and Grpc.Core provides basic client load balancing policies PICK_FIRST, ROUND_ROBIN.
Grpc.Core also has implemented two client-lookaside LB policies, but we don't recommend using them:
- grpclb - limited use externally as there's no official implementation of the LB policy. We don't recommend using it as it's been deprecated by the XDS load balancing.
- XDS - Load balancing using the Envoy Universal Data Plane APIs (xDS). It does work in Grpc.Core (because it's implemented in C-core native library), but as noted above, we don't provide official support for the proxyless service mesh functionality in Grpc.Core.
Proxy load balancing is supported by both implementations because load balancing is done by a separate process (e.g. Envoy, ngingx etc.) that proxies the traffic.
grpc-dotnet allows user-provided custom load-balancing policies (= a plugin that provides the load-balancing logic).
Also see:
- https://learn.microsoft.com/aspnet/core/grpc/loadbalancing
- https://github.com/grpc/grpc/blob/master/doc/load-balancing.md
- https://github.com/grpc/grpc/blob/master/doc/naming.md
- https://github.com/grpc/proposal/blob/master/A5-grpclb-in-dns.md
- https://github.com/grpc/proposal/blob/master/A24-lb-policy-config.md
### Service config
Service config is currently only supported by Grpc.Core. Right now the feature is not that useful
Service config is supported by grpc-dotnet and Grpc.Core. Right now, the feature is not that useful
because support for service config encoded in DNS records hasn't been enabled yet by default.
Also see:
@ -45,52 +82,36 @@ Grpc.Core: currently not supported.
Both implementations support client and server interceptors from Grpc.Core.Interceptors namespace. Interceptors operate at post-deserialization and pre-serialization level (no access to binary payloads).
In addition to gRPC-aware interceptors, grpc-dotnet also allows interception at a HTTP/2 level:
In addition to gRPC-aware interceptors, grpc-dotnet also allows interception at an HTTP/2 level:
- Incoming gRPC HTTP/2 requests can be processed using [ASP.NET Core middleware](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/).
- Outgoing gRPC HTTP/2 requests can be processed using [HttpClient HttpMessageHandlers](https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpmessagehandler).
### Load Balancing
Grpc.Core provides basic client load balancing policies PICK_FIRST, ROUND_ROBIN and client-lookaside LB policies:
- grpclb - limited use externally as there's no official implementation of the LB policy
- XDS - Load balancing using the Envoy Universal Data Plane APIs (xDS). Currently this is work in progress but once ready, it will be the LB of choice for lookaside LB.
grpc-dotnet currently doesn't provide any loadbalancing policies. It is likely that to support the XDS loadbalancing policy, features will need to be added to .NET HttpClient.
Proxy loadbalancing is supported by both implementations because loadbalancing is done by a separate process (e.g. Envoy, ngingx etc.) that proxies the traffic.
None of the implementations currently allow user-provided custom loadbalancing policies (= a plugin that provides the loadbalancing logic).
- https://github.com/grpc/grpc/blob/master/doc/load-balancing.md
- https://github.com/grpc/grpc/blob/master/doc/naming.md
- https://github.com/grpc/proposal/blob/master/A5-grpclb-in-dns.md
- https://github.com/grpc/proposal/blob/master/A24-lb-policy-config.md
### Transport support
Both implementations fully support gRPC over HTTP/2 in both TLS and plaintext.
Grpc.Core gets support for other transports supported by C-Core for free. Some (minor) integration work might be required to actually use these transports with gRPC C#.
grpc-dotnet only supports the default transport.
grpc-dotnet supports other transports in .NET 5 or later. For example, grpc-dotnet [supports interprocess communication (IPC)](https://learn.microsoft.com/aspnet/core/grpc/interprocess) using named pipes and Unix domain sockets.
Notes:
- Grpc.Core allows connections over UDS socket (both server and client) on Unix systems. It doesn't support named pipes on windows.
- Grpc.Core supports additional "transports" like ALTS and cfstream thanks to being build on top of C-core.
- Grpc.Core could provide an inprocess transport support but currently this functionality is not exposed in C# API.
- grpc-dotnet support for TLS is platform dependent. TLS is fully supported on Windows and Linux, but doesn't work on MacOS.
- grpc-dotnet support UDS socket on the server-side (On Unix systems, but also on [Windows](https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/))
- grpc-dotnet support for TLS is platform dependent. TLS is fully supported on Windows and Linux. There is limited support for servers hosted on MacOS prior to .NET 8.
### Retries / Request Hedging
Grpc.Core: implementation in C-core in progress, but no ETA yet
grpc-dotnet: not implemented
grpc-dotnet: Retries and hedging are fully supported.
https://github.com/grpc/proposal/blob/master/A6-client-retries.md,
Also see:
- https://learn.microsoft.com/aspnet/core/grpc/retries
- https://github.com/grpc/proposal/blob/master/A6-client-retries.md
### Channelz
@ -112,7 +133,7 @@ https://github.com/grpc/grpc/blob/master/doc/binary-logging.md
Grpc.Core: supported (algorithms: `gzip`, `deflate`)
grpc-dotnet: supported (algorithms: `gzip`), also provides public API to provide custom compression algorithm.
grpc-dotnet: supported (algorithms: `gzip`, `deflate`), also provides public API to provide custom compression algorithm.
Performance implications of using compression in both implementations haven't been measured. Compression functionality is offered mostly to comply with the spec.
@ -123,7 +144,7 @@ https://github.com/grpc/grpc/blob/master/doc/compression_cookbook.md
Grpc.Core: supported (exposed publicly on Channel), provided by C-Core
grpc-dotnet: not supported (to provide support, changes to .NET HttpClient are needed, so adding support is non-trivial).
grpc-dotnet: Supported on .NET 5 or later
https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md
@ -147,7 +168,7 @@ https://github.com/grpc/grpc/blob/master/doc/keepalive.md
Grpc.Core: supported, provided by C-core
grpc-dotnet: not supported (implementing the wait_for_ready flag requires supporting channel connectivity first).
grpc-dotnet: Supported on .NET 5 or later
https://github.com/grpc/grpc/blob/master/doc/wait-for-ready.md
@ -155,7 +176,7 @@ https://github.com/grpc/grpc/blob/master/doc/wait-for-ready.md
Grpc.Core: conforms with the spec thanks to the C-core dependency. It is currently not possible to provide custom C# resolvers via resolver API (the APIs are in C core and aren't exposed in the C# layer).
grpc-dotnet: only resolves basic DNS names. No API to provide a custom resolver.
grpc-dotnet: Resolving is fully supported on .NET 5 or later. grpc-dotnet also provides an [API to write custom resolvers](https://learn.microsoft.com/aspnet/core/grpc/loadbalancingwrite-custom-resolvers-and-load-balancers).
https://github.com/grpc/grpc/blob/master/doc/naming.md
@ -165,7 +186,7 @@ grpc-dotnet allows port-sharing: serving both gRPC and non-gRPC traffic by the s
## Add-on Features
Features that don't necessarily require changes to implementation's internals. They usually come as a separate opt-in nuget package.
Features that don't necessarily require changes to the implementation's internals. They usually come as a separate opt-in nuget package.
### Addon: Server Reflection
Grpc.Core: supported via Grpc.Reflection nuget package
@ -197,4 +218,22 @@ grpc-dotnet supports integration with `HttpClientFactory` via the Grpc.Net.Clien
- Reuse of channel instances.
- Automatic propagation of cancellation and deadline when used in a `Grpc.AspNetCore` hosted gRPC service.
https://docs.microsoft.com/en-us/aspnet/core/grpc/clientfactory
### Addon: gRPC JSON transcoding
grpc-dotnet supports providing a RESTful JSON API using [gRPC JSON transcoding](https://learn.microsoft.com/aspnet/core/grpc/json-transcoding).
gRPC JSON transcoding is an extension for ASP.NET Core that creates RESTful JSON APIs for gRPC services. Once configured, transcoding allows apps to call gRPC services with familiar HTTP concepts:
- HTTP verbs
- URL parameter binding
- JSON requests/responses
gRPC can still be used to call services.
### Addon: gRPC-Web
grpc-dotnet supports the [gRPC-Web protocol](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-WEB.md).
gRPC-Web allows browser JavaScript and Blazor apps to call gRPC services. It's not possible to call a gRPC service over HTTP/2 from a browser-based app. gRPC services hosted in ASP.NET Core can be configured to support gRPC-Web alongside gRPC over HTTP/2.
https://learn.microsoft.com/aspnet/core/grpc/grpcweb

View File

@ -10,8 +10,9 @@ release that the new release depends on.
## Releasing a new version of grpc-dotnet (every 6 weeks)
- Before cutting the release branch
- If needed, on the master branch update the `<GrpcPackageVersion>` dependency version in [dependencies.props](https://github.com/grpc/grpc-dotnet/blob/master/build/dependencies.props)
to the latest pre-release of `Grpc.Core.Api` (that was just released as part of the grpc/grpc release process)
- If needed, on the master branch update the `Grpc.Tools` and `Grpc.Core` dependency versions in [Directory.Packages.props](https://github.com/grpc/grpc-dotnet/blob/master/Directory.Packages.props)
to the latest pre-release of `Grpc.Tools` or `Grpc.Core` (that was released as part of the grpc/grpc release process)
- Make sure that any patches/bugfixes from the last released branch have been applied to the master branch as well.
- Cut the release branch from master branch (the branch format is `v2.25.x`, `v2.26.x`, ...).
@ -19,22 +20,27 @@ release that the new release depends on.
- On the release branch, replace the `-dev` suffix by `-pre1` under `<GrpcDotnetVersion>` version release number in [version.props](https://github.com/grpc/grpc-dotnet/blob/master/build/version.props)
to prepare for building the pre-release nugets.
Also check that the minor version number matches the branch name.
- You'll also need to update `CurrentVersion` field in `Grpc.Core.Api`'s [VersionInfo.cs](https://github.com/grpc/grpc-dotnet/blob/6bbbf3627797ad8f787eced10b0e548cfd9ece15/src/Grpc.Core.Api/VersionInfo.cs#L44) to match the version number (otherwise tests will fail).
- Also check that the minor version number matches the branch name.
- Build the signed nuget packages and push them to nuget.org (internal process). **These are the pre-release packages.**
- Create a new release and tag in https://github.com/grpc/grpc-dotnet/releases (by creating the tag from the current release branch).
Mark the release as "pre-release" in the github UI. Fill in the release notes.
- Wait for the stable release of `Grpc.Core.Api` (as scheduled by the release schedule), keep checking the issue tracker for problems with the new grpc-dotnet pre-release packages.
- Wait for the stable release of `Grpc.Tools` from the `grpc/grpc` repository (as scheduled by the release schedule), keep checking the issue tracker for problems with the new grpc-dotnet pre-release packages.
If problems are discovered and they need to be fixed, the release manager might choose to release more pre-releases (`-pre2`, `-pre3`, ...) before deciding to release as stable.
- **Make sure at least 7 days have elapsed since the last pre-release before proceeding with the stable release**, to give users enough time to test the prerelease nugets and discover potential issues. This is to decrease the likelyhood of pushing a bad stable release.
- Once stable version of `Grpc.Core.Api` is pushed, remove `-pre1` suffix of the `<GrpcDotnetVersion>` version release number in [version.props](https://github.com/grpc/grpc-dotnet/blob/master/build/version.props) to prepare for the stable release.
- Once stable version of `Grpc.Tools` is pushed, remove `-pre1` suffix of the `<GrpcDotnetVersion>` version release number in [version.props](https://github.com/grpc/grpc-dotnet/blob/master/build/version.props) to prepare for the stable release.
- Update `CurrentVersion` field in `Grpc.Core.Api`'s [VersionInfo.cs](https://github.com/grpc/grpc-dotnet/blob/6bbbf3627797ad8f787eced10b0e548cfd9ece15/src/Grpc.Core.Api/VersionInfo.cs#L44) to match the version number (otherwise tests will fail).
- Build the signed nuget packages and push them to nuget.org (internal process). **These are the stable grpc-dotnet packages.**
- Create a new release and tag in https://github.com/grpc/grpc-dotnet/releases (by creating the tag from the current release branch).
This is the stable release. Fill in the release notes.
This is the stable release. Fill in the release notes and list changes since the previous _stable_ version.
### After the release

15
docker-compose.yml Normal file
View File

@ -0,0 +1,15 @@
services:
grpcweb-server:
build:
context: ./
dockerfile: ./testassets/InteropTestsWebsite/Dockerfile
image: grpc-dotnet/grpcweb-server
ports:
- "8080:80"
grpcweb-client:
build:
context: ./
dockerfile: ./testassets/InteropTestsGrpcWebWebsite/Dockerfile
image: grpc-dotnet/grpcweb-client
ports:
- "8081:80"

View File

@ -1,31 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29230.61
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server", "Server\Server.csproj", "{534AC5F8-2DF2-40BD-87A5-B3D8310118C4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client", "Client\Client.csproj", "{48A1D3BC-A14B-436A-8822-6DE2BEF8B747}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{534AC5F8-2DF2-40BD-87A5-B3D8310118C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{534AC5F8-2DF2-40BD-87A5-B3D8310118C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{534AC5F8-2DF2-40BD-87A5-B3D8310118C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{534AC5F8-2DF2-40BD-87A5-B3D8310118C4}.Release|Any CPU.Build.0 = Release|Any CPU
{48A1D3BC-A14B-436A-8822-6DE2BEF8B747}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{48A1D3BC-A14B-436A-8822-6DE2BEF8B747}.Debug|Any CPU.Build.0 = Debug|Any CPU
{48A1D3BC-A14B-436A-8822-6DE2BEF8B747}.Release|Any CPU.ActiveCfg = Release|Any CPU
{48A1D3BC-A14B-436A-8822-6DE2BEF8B747}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D22B3129-3BFB-41FA-9FCE-E45EBEF8C2DD}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,4 @@
<Solution>
<Project Path="Client/Client.csproj" />
<Project Path="Server/Server.csproj" />
</Solution>

View File

@ -2,7 +2,7 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
@ -10,9 +10,9 @@
<Protobuf Include="..\Proto\greet.proto" GrpcServices="None" Link="Protos\greet.proto"/>
<Protobuf Include="..\Proto\count.proto" GrpcServices="None" Link="Protos\count.proto"/>
<PackageReference Include="Google.Protobuf" Version="$(GoogleProtobufPackageVersion)" />
<PackageReference Include="Grpc.Net.Client" Version="$(GrpcDotNetPackageVersion)" />
<PackageReference Include="Grpc.Tools" Version="$(GrpcPackageVersion)" PrivateAssets="All" />
<PackageReference Include="Google.Protobuf" />
<PackageReference Include="Grpc.Net.Client" />
<PackageReference Include="Grpc.Tools" PrivateAssets="All" />
</ItemGroup>
</Project>

View File

@ -16,72 +16,54 @@
#endregion
using System;
using System.Threading;
using System.Threading.Tasks;
using Aggregate;
using Count;
using Greet;
using Grpc.Core;
using Grpc.Net.Client;
namespace Client
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Aggregator.AggregatorClient(channel);
await ServerStreamingCallExample(client);
await ClientStreamingCallExample(client);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
static async Task ServerStreamingCallExample(Aggregator.AggregatorClient client)
{
public class Program
var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(3.5));
using var call = client.SayHellos(new HelloRequest { Name = "AggregatorClient" }, cancellationToken: cts.Token);
try
{
static Random RNG = new Random();
static async Task Main(string[] args)
await foreach (var message in call.ResponseStream.ReadAllAsync())
{
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Aggregator.AggregatorClient(channel);
await ServerStreamingCallExample(client);
await ClientStreamingCallExample(client);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
private static async Task ServerStreamingCallExample(Aggregator.AggregatorClient client)
{
var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(3.5));
using (var replies = client.SayHellos(new HelloRequest { Name = "AggregatorClient" }, cancellationToken: cts.Token))
{
try
{
await foreach (var message in replies.ResponseStream.ReadAllAsync())
{
Console.WriteLine("Greeting: " + message.Message);
}
}
catch (RpcException ex) when (ex.StatusCode == StatusCode.Cancelled)
{
Console.WriteLine("Stream cancelled.");
}
}
}
private static async Task ClientStreamingCallExample(Aggregator.AggregatorClient client)
{
using (var call = client.AccumulateCount())
{
for (var i = 0; i < 3; i++)
{
var count = RNG.Next(5);
Console.WriteLine($"Accumulating with {count}");
await call.RequestStream.WriteAsync(new CounterRequest { Count = count });
await Task.Delay(2000);
}
await call.RequestStream.CompleteAsync();
var response = await call;
Console.WriteLine($"Count: {response.Count}");
}
Console.WriteLine("Greeting: " + message.Message);
}
}
catch (RpcException ex) when (ex.StatusCode == StatusCode.Cancelled)
{
Console.WriteLine("Stream cancelled.");
}
}
static async Task ClientStreamingCallExample(Aggregator.AggregatorClient client)
{
using var call = client.AccumulateCount();
for (var i = 0; i < 3; i++)
{
var count = Random.Shared.Next(5);
Console.WriteLine($"Accumulating with {count}");
await call.RequestStream.WriteAsync(new CounterRequest { Count = count });
await Task.Delay(2000);
}
await call.RequestStream.CompleteAsync();
var response = await call;
Console.WriteLine($"Count: {response.Count}");
}

View File

@ -16,23 +16,59 @@
#endregion
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Count;
using Greet;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
using Server;
namespace Server
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc();
builder.Services.AddSingleton<IncrementingCounter>();
if (bool.TryParse(builder.Configuration["EnableOpenTelemetry"], out var enableOpenTelemetry) && enableOpenTelemetry)
{
public class Program
{
public static void Main(string[] args)
builder.Services.AddOpenTelemetry()
.WithTracing(tracing =>
{
CreateHostBuilder(args).Build().Run();
}
tracing.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("aggregator"));
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
if (builder.Environment.IsDevelopment())
{
// We want to view all traces in development
tracing.SetSampler(new AlwaysOnSampler());
}
tracing.AddAspNetCoreInstrumentation()
.AddGrpcClientInstrumentation()
.AddHttpClientInstrumentation();
tracing.AddZipkinExporter();
});
}
// These clients will call back to the server
builder.Services
.AddGrpcClient<Greeter.GreeterClient>((s, o) => { o.Address = GetCurrentAddress(s); })
.EnableCallContextPropagation();
builder.Services
.AddGrpcClient<Counter.CounterClient>((s, o) => { o.Address = GetCurrentAddress(s); })
.EnableCallContextPropagation();
var app = builder.Build();
app.MapGrpcService<GreeterService>();
app.MapGrpcService<CounterService>();
app.MapGrpcService<AggregatorService>();
app.Run();
static Uri GetCurrentAddress(IServiceProvider serviceProvider)
{
// Get the address of the current server from the request
var context = serviceProvider.GetRequiredService<IHttpContextAccessor>()?.HttpContext;
if (context == null)
{
throw new InvalidOperationException("Could not get HttpContext.");
}
return new Uri($"{context.Request.Scheme}://{context.Request.Host.Value}");
}

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
@ -9,12 +9,13 @@
<Protobuf Include="..\Proto\greet.proto" GrpcServices="Both" Link="Protos\greet.proto" />
<Protobuf Include="..\Proto\count.proto" GrpcServices="Both" Link="Protos\count.proto" />
<PackageReference Include="Grpc.AspNetCore" Version="$(GrpcDotNetPackageVersion)" />
<PackageReference Include="Grpc.AspNetCore" />
<PackageReference Include="OpenTelemetry.Hosting" Version="$(OpenTelemetryPackageVersion)" />
<PackageReference Include="OpenTelemetry.Exporter.Zipkin" Version="$(OpenTelemetryPackageVersion)" />
<PackageReference Include="OpenTelemetry.Collector.Dependencies" Version="$(OpenTelemetryPackageVersion)" />
<PackageReference Include="OpenTelemetry.Collector.AspNetCore" Version="$(OpenTelemetryPackageVersion)" />
<PackageReference Include="OpenTelemetry.Exporter.Zipkin" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" />
<PackageReference Include="OpenTelemetry.Instrumentation.GrpcNetClient" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" />
</ItemGroup>
</Project>

View File

@ -1,97 +0,0 @@
#region Copyright notice and license
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using System;
using System.Diagnostics;
using Count;
using Greet;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using OpenTelemetry.Trace.Configuration;
namespace Server
{
public partial class Startup
{
private readonly IConfiguration _configuration;
private const string EnableOpenTelemetryKey = "EnableOpenTelemetry";
public Startup(IConfiguration configuration)
{
_configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc();
services.AddSingleton<IncrementingCounter>();
if (_configuration.GetValue<bool>(EnableOpenTelemetryKey))
{
services.AddOpenTelemetry(telemetry =>
{
telemetry.UseZipkin(o => o.ServiceName = "aggregator");
telemetry.AddDependencyCollector();
telemetry.AddRequestCollector();
});
}
// These clients will call back to the server
services
.AddGrpcClient<Greeter.GreeterClient>((s, o) => { o.Address = GetCurrentAddress(s); })
.EnableCallContextPropagation();
services
.AddGrpcClient<Counter.CounterClient>((s, o) => { o.Address = GetCurrentAddress(s); })
.EnableCallContextPropagation();
static Uri GetCurrentAddress(IServiceProvider serviceProvider)
{
// Get the address of the current server from the request
var context = serviceProvider.GetRequiredService<IHttpContextAccessor>()?.HttpContext;
if (context == null)
{
throw new InvalidOperationException("Could not get HttpContext.");
}
return new Uri($"{context.Request.Scheme}://{context.Request.Host.Value}");
}
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>();
endpoints.MapGrpcService<CounterService>();
endpoints.MapGrpcService<AggregatorService>();
});
}
}
}

View File

@ -1,31 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29521.150
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client", "Client\Client.csproj", "{B22D0F2E-D67A-413E-9450-4B64A60B56EF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server", "Server\Server.csproj", "{09CAF21C-D7D8-478C-9E74-3678DF615B8F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B22D0F2E-D67A-413E-9450-4B64A60B56EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B22D0F2E-D67A-413E-9450-4B64A60B56EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B22D0F2E-D67A-413E-9450-4B64A60B56EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B22D0F2E-D67A-413E-9450-4B64A60B56EF}.Release|Any CPU.Build.0 = Release|Any CPU
{09CAF21C-D7D8-478C-9E74-3678DF615B8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{09CAF21C-D7D8-478C-9E74-3678DF615B8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{09CAF21C-D7D8-478C-9E74-3678DF615B8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{09CAF21C-D7D8-478C-9E74-3678DF615B8F}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {95736335-0C8B-4FDA-8722-E08046339B83}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,4 @@
<Solution>
<Project Path="Client/Client.csproj" />
<Project Path="Server/Server.csproj" />
</Solution>

View File

@ -1,20 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<RazorLangVersion>3.0</RazorLangVersion>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Blazor" Version="$(MicrosoftAspNetCoreBlazorPackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Blazor.Build" Version="$(MicrosoftAspNetCoreBlazorPackageVersion)" PrivateAssets="all" />
<PackageReference Include="Microsoft.AspNetCore.Blazor.HttpClient" Version="$(MicrosoftAspNetCoreBlazorPackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Blazor.DevServer" Version="$(MicrosoftAspNetCoreBlazorPackageVersion)" PrivateAssets="all" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" PrivateAssets="all" />
<PackageReference Include="Google.Protobuf" Version="$(GoogleProtobufPackageVersion)" />
<PackageReference Include="Grpc.Tools" Version="$(GrpcPackageVersion)" PrivateAssets="All" />
<PackageReference Include="Grpc.Net.Client" Version="$(GrpcDotNetPackageVersion)" />
<PackageReference Include="Grpc.Net.Client.Web" Version="$(GrpcDotNetPackageVersion)" />
<PackageReference Include="Google.Protobuf" />
<PackageReference Include="Grpc.Tools" PrivateAssets="All" />
<PackageReference Include="Grpc.Net.Client" />
<PackageReference Include="Grpc.Net.Client.Web" />
<Protobuf Include="..\Proto\weather.proto" GrpcServices="Client" Link="Protos\weather.proto" Access="Internal" />
<Protobuf Include="..\Proto\count.proto" GrpcServices="Client" Link="Protos\count.proto" Access="Internal" />

View File

@ -1,6 +1,5 @@
@page "/counter"
@inject GrpcChannel Channel
@using Google.Protobuf.WellKnownTypes
@using Grpc.Core
<h1>Counter</h1>
@ -26,7 +25,7 @@
cts = new CancellationTokenSource();
var client = new Count.Counter.CounterClient(Channel);
var call = client.StartCounter(new Empty(), cancellationToken: cts.Token);
using var call = client.StartCounter(new CounterRequest() { Start = currentCount }, cancellationToken: cts.Token);
try
{

View File

@ -20,9 +20,10 @@ using System.Net.Http;
using System.Threading.Tasks;
using Grpc.Net.Client;
using Grpc.Net.Client.Web;
using Microsoft.AspNetCore.Blazor.Hosting;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Weather;
namespace Client
{
@ -31,25 +32,28 @@ namespace Client
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
// Blazor WA currently has an issue related to server streaming. No messages are returned from the server until the call is complete.
// Setting WasmHttpMessageHandler.StreamingEnabled to true (reflection required) allows server streaming to work - https://github.com/mono/mono/issues/18718
var wasmHttpMessageHandlerType = System.Reflection.Assembly.Load("WebAssembly.Net.Http").GetType("WebAssembly.Net.Http.HttpClient.WasmHttpMessageHandler");
var streamingProperty = wasmHttpMessageHandlerType.GetProperty("StreamingEnabled", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
streamingProperty.SetValue(null, true, null);
builder.RootComponents.Add<App>("#app");
builder.Services.AddSingleton(services =>
{
// Create a gRPC-Web channel pointing to the backend server.
// Get the service address from appsettings.json
var config = services.GetRequiredService<IConfiguration>();
var backendUrl = config["BackendUrl"];
// If no address is set then fallback to the current webpage URL
if (string.IsNullOrEmpty(backendUrl))
{
var navigationManager = services.GetRequiredService<NavigationManager>();
backendUrl = navigationManager.BaseUri;
}
// Create a channel with a GrpcWebHandler that is addressed to the backend server.
//
// GrpcWebText is used because server streaming requires it. If server streaming is not used in your app
// then GrpcWeb is recommended because it produces smaller messages.
var httpClient = new HttpClient(new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler()));
var httpHandler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler());
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions { HttpClient = httpClient });
return channel;
return GrpcChannel.ForAddress(backendUrl, new GrpcChannelOptions { HttpHandler = httpHandler });
});
await builder.Build().RunAsync();

View File

@ -0,0 +1,4 @@
{
// Explicit backend URL (override current site)
"BackendUrl": null
}

View File

@ -14,7 +14,7 @@ a, .btn-link {
border-color: #1861ac;
}
app {
#app {
position: relative;
display: flex;
flex-direction: column;
@ -151,7 +151,7 @@ app {
}
@media (min-width: 768px) {
app {
#app {
flex-direction: row;
}

View File

@ -11,7 +11,7 @@
</head>
<body>
<app>Loading...</app>
<div id="app">Loading...</div>
<div id="blazor-error-ui">
An unhandled error has occurred.

View File

@ -14,12 +14,14 @@
syntax = "proto3";
import "google/protobuf/empty.proto";
package count;
service Counter {
rpc StartCounter (google.protobuf.Empty) returns (stream CounterResponse);
rpc StartCounter (CounterRequest) returns (stream CounterResponse);
}
message CounterRequest {
int32 start = 1;
}
message CounterResponse {

View File

@ -16,25 +16,38 @@
#endregion
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.AspNetCore.ResponseCompression;
using Server.Services;
namespace Server
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc();
builder.Services.AddResponseCompression(opts =>
{
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
new[] { "application/octet-stream" });
});
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(new ConfigurationBuilder()
.AddCommandLine(args)
.Build())
.UseStartup<Startup>()
.Build();
}
var app = builder.Build();
app.UseResponseCompression();
if (app.Environment.IsDevelopment())
{
app.UseWebAssemblyDebugging();
}
else
{
app.UseHsts();
}
app.UseBlazorFrameworkFiles();
app.UseStaticFiles();
app.UseRouting();
app.UseGrpcWeb();
app.MapGrpcService<WeatherService>().EnableGrpcWeb();
app.MapGrpcService<CounterService>().EnableGrpcWeb();
app.MapFallbackToFile("index.html");
app.Run();

View File

@ -0,0 +1,29 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:59193/",
"sslPort": 44375
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Server": {
"commandName": "Project",
"launchBrowser": true,
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
}
}
}

View File

@ -1,16 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<UserSecretsId>46982f83-f153-443e-b589-4b2bc7b5945e</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<Protobuf Include="..\Proto\weather.proto" GrpcServices="Server" Link="Protos\weather.proto" />
<Protobuf Include="..\Proto\count.proto" GrpcServices="Server" Link="Protos\count.proto" />
<PackageReference Include="Microsoft.AspNetCore.Blazor.Server" Version="$(MicrosoftAspNetCoreBlazorPackageVersion)" />
<PackageReference Include="Grpc.AspNetCore" Version="$(GrpcDotNetPackageVersion)" />
<PackageReference Include="Grpc.AspNetCore.Web" Version="$(GrpcDotNetPackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" />
<PackageReference Include="Grpc.AspNetCore" />
<PackageReference Include="Grpc.AspNetCore.Web" />
</ItemGroup>
<ItemGroup>

View File

@ -19,19 +19,16 @@
using System;
using System.Threading.Tasks;
using Count;
using Google.Protobuf.WellKnownTypes;
using Grpc.Core;
namespace Server.Services
{
public class CounterService : Counter.CounterBase
{
public override async Task StartCounter(Empty request, IServerStreamWriter<CounterResponse> responseStream, ServerCallContext context)
public override async Task StartCounter(CounterRequest request, IServerStreamWriter<CounterResponse> responseStream, ServerCallContext context)
{
var count = 0;
var count = request.Start;
// Attempt to run until canceled by the client
// Blazor WA is unable to cancel a call that has started - https://github.com/mono/mono/issues/18717
while (!context.CancellationToken.IsCancellationRequested)
{
await responseStream.WriteAsync(new CounterResponse

View File

@ -1,69 +0,0 @@
#region Copyright notice and license
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using System.Linq;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.ResponseCompression;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Server.Services;
namespace Server
{
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc();
services.AddResponseCompression(opts =>
{
opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
new[] { "application/octet-stream" });
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseResponseCompression();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBlazorDebugging();
}
app.UseStaticFiles();
app.UseClientSideBlazorFiles<Client.Program>();
app.UseRouting();
app.UseGrpcWeb();
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<WeatherService>().EnableGrpcWeb();
endpoints.MapGrpcService<CounterService>().EnableGrpcWeb();
endpoints.MapFallbackToClientSideBlazor<Client.Program>("index.html");
});
}
}
}

View File

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information"
}
},
"AllowedHosts": "*"
}

View File

@ -1,25 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29230.61
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server", "Server\Server.csproj", "{534AC5F8-2DF2-40BD-87A5-B3D8310118C4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{534AC5F8-2DF2-40BD-87A5-B3D8310118C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{534AC5F8-2DF2-40BD-87A5-B3D8310118C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{534AC5F8-2DF2-40BD-87A5-B3D8310118C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{534AC5F8-2DF2-40BD-87A5-B3D8310118C4}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D22B3129-3BFB-41FA-9FCE-E45EBEF8C2DD}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,3 @@
<Solution>
<Project Path="Server/Server.csproj" />
</Solution>

View File

@ -16,23 +16,24 @@
#endregion
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Server.Services;
namespace Server
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseGrpcWeb();
app.MapGrpcService<GreeterService>().EnableGrpcWeb();
app.Run();

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<SpaRoot>wwwroot\</SpaRoot>
<DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**;$(SpaRoot)dist\**</DefaultItemExcludes>
</PropertyGroup>
@ -9,8 +9,8 @@
<ItemGroup>
<Protobuf Include="..\Proto\greet.proto" GrpcServices="Server" Link="Protos\greet.proto" />
<PackageReference Include="Grpc.AspNetCore" Version="$(GrpcDotNetPackageVersion)" />
<PackageReference Include="Grpc.AspNetCore.Web" Version="$(GrpcDotNetPackageVersion)" />
<PackageReference Include="Grpc.AspNetCore" />
<PackageReference Include="Grpc.AspNetCore.Web" />
</ItemGroup>
<Target Name="DebugEnsureNodeEnv" BeforeTargets="Build" Condition=" '$(Configuration)' == 'Debug' And !Exists('$(SpaRoot)node_modules') ">

View File

@ -1,59 +0,0 @@
#region Copyright notice and license
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Server.Services;
namespace Server
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseRouting();
app.UseGrpcWeb();
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>().EnableGrpcWeb();
});
}
}
}

View File

@ -4,10 +4,5 @@
"Default": "Information"
}
},
"AllowedHosts": "*",
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http2"
}
}
"AllowedHosts": "*"
}

View File

@ -10,7 +10,7 @@ var resultText = document.getElementById('result');
var streamingCall = null;
// Unary call
sendInput.onclick =function () {
sendInput.onclick = function () {
var request = new HelloRequest();
request.setName(nameInput.value);
@ -30,10 +30,15 @@ streamInput.onclick = function () {
request.setName(nameInput.value);
streamingCall = client.sayHellos(request, {});
streamingCall.on('data', function (response) {
streamingCall.on('data', (response) => {
resultText.innerHTML += htmlEscape(response.getMessage()) + '<br />';
});
streamingCall.on('end', function () {
streamingCall.on('status', (status) => {
if (status.code == 0) {
resultText.innerHTML += 'Done';
} else {
resultText.innerHTML += 'Error: ' + htmlEscape(status.details);
}
});
} else {
streamingCall.cancel();

File diff suppressed because it is too large Load Diff

View File

@ -5,9 +5,8 @@
"devDependencies": {
"@grpc/proto-loader": "^0.3.0",
"google-protobuf": "^3.6.1",
"grpc": "^1.15.0",
"grpc-web": "^1.0.0",
"webpack": "^4.16.5",
"webpack-cli": "^3.1.0"
"webpack": "^5.94.0",
"webpack-cli": "^5.0.1"
}
}

View File

@ -1,31 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29230.61
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Server", "Server\Server.csproj", "{534AC5F8-2DF2-40BD-87A5-B3D8310118C4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client", "Client\Client.csproj", "{48A1D3BC-A14B-436A-8822-6DE2BEF8B747}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{534AC5F8-2DF2-40BD-87A5-B3D8310118C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{534AC5F8-2DF2-40BD-87A5-B3D8310118C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{534AC5F8-2DF2-40BD-87A5-B3D8310118C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{534AC5F8-2DF2-40BD-87A5-B3D8310118C4}.Release|Any CPU.Build.0 = Release|Any CPU
{48A1D3BC-A14B-436A-8822-6DE2BEF8B747}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{48A1D3BC-A14B-436A-8822-6DE2BEF8B747}.Debug|Any CPU.Build.0 = Debug|Any CPU
{48A1D3BC-A14B-436A-8822-6DE2BEF8B747}.Release|Any CPU.ActiveCfg = Release|Any CPU
{48A1D3BC-A14B-436A-8822-6DE2BEF8B747}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D22B3129-3BFB-41FA-9FCE-E45EBEF8C2DD}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,4 @@
<Solution>
<Project Path="Client/Client.csproj" />
<Project Path="Server/Server.csproj" />
</Solution>

View File

@ -2,15 +2,15 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Protobuf Include="..\Proto\certify.proto" GrpcServices="Client" Link="Protos\certify.proto" />
<PackageReference Include="Google.Protobuf" Version="$(GoogleProtobufPackageVersion)" />
<PackageReference Include="Grpc.Net.Client" Version="$(GrpcDotNetPackageVersion)" />
<PackageReference Include="Grpc.Tools" Version="$(GrpcPackageVersion)" PrivateAssets="All" />
<PackageReference Include="Google.Protobuf" />
<PackageReference Include="Grpc.Net.Client" />
<PackageReference Include="Grpc.Tools" PrivateAssets="All" />
<None Update="Certs\client.pfx">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View File

@ -16,79 +16,66 @@
#endregion
using System;
using System.IO;
using System.Net.Http;
using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;
using Certify;
using Google.Protobuf.WellKnownTypes;
using Grpc.Core;
using Grpc.Net.Client;
namespace Client
// The server will return 403 (Forbidden). The method requires a certificate
await CallCertificateInfo(includeClientCertificate: false);
// The server will return a successful gRPC response
await CallCertificateInfo(includeClientCertificate: true);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
static async Task CallCertificateInfo(bool includeClientCertificate)
{
public class Program
try
{
static async Task Main(string[] args)
Console.WriteLine($"Setting up HttpClient. Client has certificate: {includeClientCertificate}");
using var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
{
// The server will return 403 (Forbidden). The method requires a certificate
await CallCertificateInfo(includeClientCertificate: false);
HttpHandler = CreateHttpHandler(includeClientCertificate)
});
var client = new Certifier.CertifierClient(channel);
// The server will return a successful gRPC response
await CallCertificateInfo(includeClientCertificate: true);
Console.WriteLine("Sending gRPC call...");
var certificateInfo = await client.GetCertificateInfoAsync(new Empty());
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
private static async Task CallCertificateInfo(bool includeClientCertificate)
Console.WriteLine($"Server received client certificate: {certificateInfo.HasCertificate}");
if (certificateInfo.HasCertificate)
{
try
{
Console.WriteLine($"Setting up HttpClient. Client has certificate: {includeClientCertificate}");
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
{
HttpClient = CreateHttpClient(includeClientCertificate)
});
var client = new Certifier.CertifierClient(channel);
Console.WriteLine("Sending gRPC call...");
var certificateInfo = await client.GetCertificateInfoAsync(new Empty());
Console.WriteLine($"Server received client certificate: {certificateInfo.HasCertificate}");
if (certificateInfo.HasCertificate)
{
Console.WriteLine($"Client certificate name: {certificateInfo.Name}");
}
}
catch (RpcException ex)
{
Console.WriteLine($"gRPC error from calling service: {ex.Status.Detail}");
}
catch
{
Console.WriteLine($"Unexpected error calling service.");
throw;
}
Console.WriteLine($"Client certificate name: {certificateInfo.Name}");
}
private static HttpClient CreateHttpClient(bool includeClientCertificate)
{
var handler = new HttpClientHandler();
if (includeClientCertificate)
{
// Load client certificate
var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
var certPath = Path.Combine(basePath!, "Certs", "client.pfx");
var clientCertificate = new X509Certificate2(certPath, "1111");
handler.ClientCertificates.Add(clientCertificate);
}
// Create client
return new HttpClient(handler);
}
}
catch (RpcException ex)
{
Console.WriteLine($"gRPC error from calling service: {ex.Status.Detail}");
}
catch
{
Console.WriteLine($"Unexpected error calling service.");
throw;
}
Console.WriteLine();
}
static HttpClientHandler CreateHttpHandler(bool includeClientCertificate)
{
var handler = new HttpClientHandler();
if (includeClientCertificate)
{
// Load client certificate
var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
var certPath = Path.Combine(basePath!, "Certs", "client.pfx");
var clientCertificate = X509CertificateLoader.LoadPkcs12FromFile(certPath, "1111");
handler.ClientCertificates.Add(clientCertificate);
}
return handler;
}

View File

@ -16,31 +16,36 @@
#endregion
using Microsoft.AspNetCore.Hosting;
using System.Security.Cryptography.X509Certificates;
using Microsoft.AspNetCore.Authentication.Certificate;
using Microsoft.AspNetCore.Server.Kestrel.Https;
using Microsoft.Extensions.Hosting;
using Server;
namespace Server
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(kestrelOptions =>
{
public class Program
kestrelOptions.ConfigureHttpsDefaults(httpsOptions =>
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
httpsOptions.ClientCertificateMode = ClientCertificateMode.AllowCertificate;
});
});
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureKestrel(kestrelOptions =>
{
kestrelOptions.ConfigureHttpsDefaults(httpsOptions =>
{
httpsOptions.ClientCertificateMode = ClientCertificateMode.AllowCertificate;
});
});
webBuilder.UseStartup<Startup>();
});
}
}
builder.Services.AddGrpc();
builder.Services.AddAuthorization();
builder.Services.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme)
.AddCertificate(options =>
{
// Not recommended in production environments. The example is using a self-signed test certificate.
options.RevocationMode = X509RevocationMode.NoCheck;
options.ChainTrustValidationMode = X509ChainTrustMode.CustomRootTrust;
options.AllowedCertificateTypes = CertificateTypes.All;
});
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.MapGrpcService<CertifierService>();
app.Run();

View File

@ -1,14 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Protobuf Include="..\Proto\certify.proto" GrpcServices="Server" Link="Protos\certify.proto" />
<PackageReference Include="Grpc.AspNetCore" Version="$(GrpcDotNetPackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Certificate" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="Grpc.AspNetCore" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Certificate" />
</ItemGroup>
</Project>

View File

@ -1,62 +0,0 @@
#region Copyright notice and license
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using System.Security.Cryptography.X509Certificates;
using Microsoft.AspNetCore.Authentication.Certificate;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Server
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc();
services.AddAuthorization();
services.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme)
.AddCertificate(options =>
{
// Not recommended in production environments. The example is using a self-signed test certificate.
options.RevocationMode = X509RevocationMode.NoCheck;
options.AllowedCertificateTypes = CertificateTypes.All;
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<CertifierService>();
});
}
}
}

View File

@ -0,0 +1,4 @@
<Solution>
<Project Path="Client/Client.csproj" />
<Project Path="Server/Server.csproj" />
</Solution>

View File

@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Protobuf Include="..\Proto\data_channel.proto" GrpcServices="Client" Link="Protos\data_channel.proto" />
<PackageReference Include="Google.Protobuf" />
<PackageReference Include="Grpc.Net.Client" />
<PackageReference Include="Grpc.Tools" PrivateAssets="All" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,66 @@
#region Copyright notice and license
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using System.Text;
using DataChannel;
using Google.Protobuf;
using Grpc.Core;
using Grpc.Net.Client;
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new DataChanneler.DataChannelerClient(channel);
await UploadDataAsync(client);
await DownloadResultsAsync(client);
Console.WriteLine("Shutting down");
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
static async Task UploadDataAsync(DataChanneler.DataChannelerClient client)
{
var call = client.UploadData();
var dataChunks = TestData.Chunk(5);
foreach (var chunk in dataChunks)
{
Console.WriteLine($"Uploading chunk: {chunk.Length} bytes");
await call.RequestStream.WriteAsync(new DataRequest { Value = ByteString.CopyFrom(chunk) });
}
await call.RequestStream.CompleteAsync();
var result = await call;
Console.WriteLine($"Total upload processed: {result.BytesProcessed} bytes");
}
static async Task DownloadResultsAsync(DataChanneler.DataChannelerClient client)
{
var call = client.DownloadResults(new DataRequest { Value = ByteString.CopyFrom(TestData) });
await foreach (var result in call.ResponseStream.ReadAllAsync())
{
Console.WriteLine($"Downloaded bytes processed result: {result.BytesProcessed}");
}
}
public partial class Program
{
private static readonly byte[] TestData = Encoding.UTF8.GetBytes("The quick brown fox jumped over the lazy dog.");
}

View File

@ -0,0 +1,30 @@
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package data_channel;
service DataChanneler {
rpc UploadData (stream DataRequest) returns (DataResult);
rpc DownloadResults (DataRequest) returns (stream DataResult);
}
message DataRequest {
bytes value = 1;
}
message DataResult {
int32 bytes_processed = 1;
}

View File

@ -0,0 +1,27 @@
#region Copyright notice and license
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using Server;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc();
var app = builder.Build();
app.MapGrpcService<DataChannelerService>();
app.Run();

View File

@ -0,0 +1,12 @@
{
"profiles": {
"Server": {
"commandName": "Project",
"launchBrowser": false,
"applicationUrl": "https://localhost:5001",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Protobuf Include="..\Proto\data_channel.proto" GrpcServices="Server" Link="Protos\data_channel.proto" />
<PackageReference Include="Grpc.AspNetCore" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,107 @@
#region Copyright notice and license
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using System.Threading.Channels;
using DataChannel;
using Grpc.Core;
namespace Server
{
public class DataChannelerService : DataChanneler.DataChannelerBase
{
private readonly ILogger _logger;
public DataChannelerService(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<DataChannelerService>();
}
public override async Task<DataResult> UploadData(
IAsyncStreamReader<DataRequest> requestStream, ServerCallContext context)
{
var channel = Channel.CreateBounded<DataRequest>(new BoundedChannelOptions(capacity: 5)
{
SingleReader = false,
SingleWriter = true
});
var readTask = Task.Run(async () =>
{
await foreach (var message in requestStream.ReadAllAsync())
{
await channel.Writer.WriteAsync(message);
}
channel.Writer.Complete();
});
// Process incoming messages on three threads.
var bytesProcessedByThread = await Task.WhenAll(
ProcessMessagesAsync(channel.Reader, _logger),
ProcessMessagesAsync(channel.Reader, _logger),
ProcessMessagesAsync(channel.Reader, _logger));
await readTask;
return new DataResult { BytesProcessed = bytesProcessedByThread.Sum() };
static async Task<int> ProcessMessagesAsync(ChannelReader<DataRequest> reader, ILogger logger)
{
var total = 0;
await foreach (var message in reader.ReadAllAsync())
{
total += message.Value.Length;
}
return total;
}
}
public override async Task DownloadResults(DataRequest request,
IServerStreamWriter<DataResult> responseStream, ServerCallContext context)
{
var channel = Channel.CreateBounded<DataResult>(new BoundedChannelOptions(capacity: 5)
{
SingleReader = true,
SingleWriter = false
});
var consumerTask = Task.Run(async () =>
{
// Consume messages from channel and write to response stream.
await foreach (var message in channel.Reader.ReadAllAsync())
{
await responseStream.WriteAsync(message);
}
});
var dataChunks = request.Value.Chunk(size: 10);
// Write messages to channel from multiple threads.
await Task.WhenAll(dataChunks.Select(
async c =>
{
var message = new DataResult { BytesProcessed = c.Length };
await channel.Writer.WriteAsync(message);
}));
// Complete writing and wait for consumer to complete.
channel.Writer.Complete();
await consumerTask;
}
}
}

View File

@ -0,0 +1,10 @@
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Grpc": "Information",
"Microsoft": "Information"
}
}
}

View File

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Shared\Shared.csproj" />
<PackageReference Include="Grpc.Net.Client" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,31 @@
#region Copyright notice and license
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using Grpc.Net.Client;
using ProtoBuf.Grpc.Client;
using Shared;
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = channel.CreateGrpcService<IGreeterService>();
var reply = await client.SayHelloAsync(new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Shutting down");
Console.WriteLine("Press any key to exit...");
Console.ReadKey();

View File

@ -0,0 +1,5 @@
<Solution>
<Project Path="Client/Client.csproj" />
<Project Path="Server/Server.csproj" />
<Project Path="Shared/Shared.csproj" />
</Solution>

View File

@ -0,0 +1,29 @@
#region Copyright notice and license
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using ProtoBuf.Grpc.Server;
using Server;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc();
builder.Services.AddCodeFirstGrpc();
var app = builder.Build();
app.MapGrpcService<GreeterService>();
app.Run();

View File

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Shared\Shared.csproj" />
<PackageReference Include="protobuf-net.Grpc.AspNetCore" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,41 @@
#region Copyright notice and license
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using ProtoBuf.Grpc;
using Shared;
namespace Server
{
public class GreeterService : IGreeterService
{
private readonly ILogger _logger;
public GreeterService(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<GreeterService>();
}
public Task<HelloReply> SayHelloAsync(HelloRequest request, CallContext context = default)
{
_logger.LogInformation($"Sending hello to {request.Name}");
return Task.FromResult(new HelloReply { Message = "Hello " + request.Name });
}
}
}

View File

@ -0,0 +1,10 @@
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Grpc": "Information",
"Microsoft": "Information"
}
}
}

View File

@ -0,0 +1,13 @@
{
"Logging": {
"LogLevel": {
"Default": "Information"
}
},
"AllowedHosts": "*",
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http2"
}
}
}

View File

@ -16,15 +16,14 @@
#endregion
using System.Threading.Tasks;
using System.Runtime.Serialization;
namespace BenchmarkClient.Worker
namespace Shared
{
public interface IWorker
[DataContract]
public class HelloReply
{
int Id { get; }
Task ConnectAsync();
Task DisconnectAsync();
Task CallAsync();
[DataMember(Order = 1)]
public string? Message { get; set; }
}
}

View File

@ -16,11 +16,14 @@
#endregion
namespace BenchmarkClient
using System.Runtime.Serialization;
namespace Shared
{
public class BenchmarkResult
[DataContract]
public class HelloRequest
{
[DataMember(Order = 1)]
public string? Name { get; set; }
public int RequestCount { get; set; }
}
}
}

View File

@ -0,0 +1,31 @@
#region Copyright notice and license
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using System.ServiceModel;
using System.Threading.Tasks;
using ProtoBuf.Grpc;
namespace Shared
{
[ServiceContract]
public interface IGreeterService
{
[OperationContract]
Task<HelloReply> SayHelloAsync(HelloRequest request, CallContext context = default);
}
}

View File

@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="protobuf-net.Grpc" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Protobuf Include="..\Proto\greet.proto" GrpcServices="Client" Link="Protos\greet.proto" />
<PackageReference Include="Google.Protobuf" />
<PackageReference Include="Grpc.Net.Client" />
<PackageReference Include="Grpc.Tools" PrivateAssets="All" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,42 @@
#region Copyright notice and license
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using Greet;
using Grpc.Core;
using Grpc.Net.Client;
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
await UnaryCallExample(client);
Console.WriteLine("Shutting down");
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
static async Task UnaryCallExample(Greeter.GreeterClient client)
{
// 'grpc-internal-encoding-request' is a special metadata value that tells
// the client to compress the request.
// This metadata is only used in the client is not sent as a header to the server.
var metadata = new Metadata();
metadata.Add("grpc-internal-encoding-request", "gzip");
var reply = await client.SayHelloAsync(new HelloRequest { Name = "GreeterClient" }, headers: metadata);
Console.WriteLine("Greeting: " + reply.Message);
}

View File

@ -0,0 +1,4 @@
<Solution>
<Project Path="Client/Client.csproj" />
<Project Path="Server/Server.csproj" />
</Solution>

View File

@ -0,0 +1,30 @@
#region Copyright notice and license
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using Server;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc(o =>
{
o.ResponseCompressionAlgorithm = "gzip";
});
var app = builder.Build();
app.MapGrpcService<GreeterService>();
app.Run();

View File

@ -0,0 +1,12 @@
{
"profiles": {
"Server": {
"commandName": "Project",
"launchBrowser": false,
"applicationUrl": "https://localhost:5001",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@ -1,13 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Protobuf Include="..\Proto\greet.proto" GrpcServices="Server" Link="Protos\greet.proto" />
<PackageReference Include="Grpc.AspNetCore" Version="$(GrpcDotNetPackageVersion)" />
<PackageReference Include="Grpc.AspNetCore" />
</ItemGroup>
</Project>

View File

@ -16,7 +16,6 @@
#endregion
using System;
using System.Threading.Tasks;
using Greet;
using Grpc.Core;

View File

@ -16,7 +16,6 @@
#endregion
using Client;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
@ -28,9 +27,9 @@ namespace Server
{
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc(options =>
services.AddGrpc(o =>
{
options.Interceptors.Add<ServerLoggerInterceptor>();
o.ResponseCompressionAlgorithm = "gzip";
});
}

View File

@ -0,0 +1,10 @@
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Grpc": "Information",
"Microsoft": "Information"
}
}
}

View File

@ -0,0 +1,13 @@
{
"Logging": {
"LogLevel": {
"Default": "Information"
}
},
"AllowedHosts": "*",
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http2"
}
}
}

View File

@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Protobuf Include="..\Proto\weather.proto" GrpcServices="Server" Link="Protos\weather.proto" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" />
<PackageReference Include="Grpc.AspNetCore" />
<PackageReference Include="Grpc.AspNetCore.Web" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,14 @@
FROM mcr.microsoft.com/dotnet/sdk:10.0-preview AS build-env
WORKDIR /app
# Copy everything
COPY . ./
RUN dotnet --info
RUN dotnet restore examples/Container/Backend
RUN dotnet publish examples/Container/Backend -c Release -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:10.0-preview
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "Backend.dll"]

View File

@ -0,0 +1,28 @@
#region Copyright notice and license
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using Server.Services;
var builder = WebApplication.CreateBuilder(args);
builder.Logging.SetMinimumLevel(LogLevel.Trace);
builder.Services.AddGrpc();
var app = builder.Build();
app.MapGrpcService<WeatherService>();
app.Run();

View File

@ -0,0 +1,57 @@
#region Copyright notice and license
// Copyright 2019 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
using System;
using System.Linq;
using System.Threading.Tasks;
using Google.Protobuf.WellKnownTypes;
using Grpc.Core;
using Weather;
namespace Server.Services
{
public class WeatherService : WeatherForecasts.WeatherForecastsBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
public override async Task<GetWeatherForecastsResponse> GetWeatherForecasts(Empty request, ServerCallContext context)
{
var httpContext = context.GetHttpContext();
await context.WriteResponseHeadersAsync(new Metadata
{
{ "host", $"{httpContext.Request.Scheme}://{httpContext.Request.Host}" }
});
var rng = new Random();
var results = Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.UtcNow.AddDays(index).ToTimestamp(),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
}).ToArray();
var response = new GetWeatherForecastsResponse();
response.Forecasts.AddRange(results);
return response;
}
}
}

View File

@ -0,0 +1,10 @@
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Grpc": "Information",
"Microsoft": "Information"
}
}
}

Some files were not shown because too many files have changed in this diff Show More