Compare commits

...

835 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
Jan Tattermusch 24b6b0c2ad
Update Grpc.Core and protobuf dependencies (#796) 2020-03-02 13:53:53 -08:00
James Newton-King f98933ce04
Fix to ignore unknown methods (#791) 2020-02-27 09:25:01 +13:00
James Newton-King af93d32591
Add option to ignore calls to unknown gRPC services (#788) 2020-02-26 10:19:48 +13:00
James Newton-King 1159126138
Avoid CancellationToken related allocations (#787) 2020-02-25 10:03:16 +13:00
James Newton-King 2cb89bf446
Optimize client buffers during serialization (#775) 2020-02-20 21:23:38 +13:00
James Newton-King 3ec2aa8c60
Test functional tests with TestServer (#668) 2020-02-20 20:56:22 +13:00
James Newton-King db7d128f59
Complete activity and log before returning result in client (#779) 2020-02-20 15:14:56 +13:00
James Newton-King 344c4adc93
Fix error when not reseting HTTP version in gRPC-Web (#774) 2020-02-19 08:50:56 +13:00
James Newton-King 9390e16e8d
Change non-OK status client log message from error to info (#777) 2020-02-19 07:59:57 +13:00
Abhishek Kumar d1b2b6496b
Merge pull request #769 from anurse/patch-1
Add myself to maintainers list
2020-02-13 10:12:52 -08:00
Andrew Stanton-Nurse e032d5046c
Add myself to maintainers list 2020-02-12 14:33:33 -08:00
James Newton-King 41f591d235
Fix sending large grpc-web-text requests (#766) 2020-02-13 11:21:26 +13:00
James Newton-King 7c01479a07
Remove Grpc.AspNetCore.Web project from browser sample (#765) 2020-02-12 08:50:28 +13:00
James Newton-King 1de1aaf3bb
Fix error when client has a very large deadline (#762) 2020-02-12 08:28:30 +13:00
James Newton-King a6f1e476a7
Support large deadlines on the server (#763) 2020-02-11 11:27:02 +13:00
Nikolay Dermendzhiev a1bb10d4a9
Fix wrong message types (#760) 2020-02-09 14:06:20 +13:00
James Newton-King 793bb6564c
Reference gRPC-Web packages instead of projects in samples (#756) 2020-02-07 09:54:29 +13:00
James Newton-King 93d1a3872e
Update Blazor sample (#755) 2020-02-06 13:38:09 +13:00
Albert Lyubarsky de6144f3c8
Enable JavaScript debugging (#750) 2020-02-04 10:49:11 -08:00
Jan Tattermusch b2845043e8 Bump version to 2.28.0-dev on master (#737) 2020-01-27 13:35:12 -08:00
James Newton-King 176fb17794 Update Grpc.Core.Api and Google.Protobuf dependencies (#733) 2020-01-24 07:57:42 +01:00
James Newton-King 8c0f682173
Remove unwanted files from Blazor sample (#728) 2020-01-23 09:22:26 +13:00
James Newton-King d00da897cc
Make CCore benchmark server write consistent startup message (#729) 2020-01-22 18:06:26 +13:00
James Newton-King 0da0662e45
Add gRPC-Web Blazor example (#718) 2020-01-22 10:44:42 +13:00
James Newton-King 0d35b5a60d
Don't log message read cancellation as an error in client (#724) 2020-01-22 10:29:56 +13:00
Vaughan Reid 63d5ac2acc Added test for GrpcProtocol timeout parsing (#727) 2020-01-22 08:21:43 +13:00
James Newton-King 444ff1b0ff
Explicitly specify ready state text in benchmarks (#725) 2020-01-18 11:33:23 +13:00
James Newton-King 8283efe58e
Use new Grpc.Core.Api to get response headers only when requested (#720) 2020-01-17 12:16:57 +13:00
James Newton-King 249dabab70
Add gRPC-Web Browser example (#703) 2020-01-14 09:25:24 +13:00
James Newton-King bee59db0be
gRPC-Web client and server (#695) 2020-01-10 08:04:51 +13:00
John Luo 36e42811e7 Add planning document (#642) 2020-01-07 12:10:23 +13:00
Vaughan Reid 25018df77e Using async main function for benchmark core server. (#711) 2020-01-06 11:53:46 +13:00
James Newton-King ae35982440
Improve error message when SslCredentials has arguments (#706) 2020-01-04 12:34:30 +13:00
James Newton-King 263e54ffdb
Fix two segment paths returning 405 status instead of 404 (#701) 2019-12-28 08:05:09 +13:00
James Newton-King 89a95c3369
Don't log message read cancellation as an error (#697) 2019-12-19 18:42:41 +13:00
James Newton-King dd72d6a38a
Add healthchecks example (#657) 2019-12-12 12:20:44 +13:00
James Newton-King 1e8e31b15d
Add client certificate option to perf benchmarks (#690) 2019-12-11 13:56:34 +13:00
James Newton-King afd37e4d0a
Improve extensibility of gRPC invocation (#669) 2019-12-11 11:09:30 +13:00
James Newton-King dcf6f339ca
Add unary method deadline test (#683) 2019-12-11 08:31:50 +13:00
James Newton-King 60c8feb989
Improve worker example (#684) 2019-12-11 08:02:15 +13:00
Jan Tattermusch 7d9b3406a2
Bump version to 2.27.0-dev on master (#689) 2019-12-10 19:56:54 +01:00
James Newton-King 40da6688bc
Make service and interceptor activators public (#677) 2019-12-10 16:08:58 +13:00
James Newton-King 765db5d2cc
Update Certifier client cert (#676) 2019-12-05 14:17:53 +13:00
James Newton-King 098893e777
Add test output logging to functional tests (#661) 2019-11-27 11:20:58 +13:00
James Newton-King 36acd3ad37
Update OpenTelemetry SDK to package on NuGet (#664) 2019-11-27 11:16:22 +13:00
James Newton-King bd5daf1572
Log when missing IHttpResetFeature (#651) 2019-11-11 14:53:49 -08:00
James Newton-King d4e3a01549
Fix Tester functional tests (#649) 2019-11-11 14:11:16 -08:00
Jan Tattermusch 01e8789785
Add release_process.md (#646) 2019-11-08 07:36:16 +01:00
Jan Tattermusch 74c195ca0e Update master branch to 2.25.0 stable packages (#647) 2019-11-07 15:12:34 -08:00
James Newton-King 85b1957fc9
Optimize client with gRPC compression (#638) 2019-11-05 17:31:16 +13:00
Jan Tattermusch 7a69834d1b
Update version to 2.26.0-dev on master (#641) 2019-11-02 07:24:05 +01:00
James Newton-King 3e1ec52ca5
Update worker server to use worker template (#634) 2019-11-02 16:45:52 +13:00
James Newton-King 85c50349be
Add progessor example (#597) 2019-11-02 16:33:56 +13:00
James Newton-King 0cdf6f5ce2
Update microbenchmarks to use server GC (#635) 2019-11-01 13:33:04 +13:00
James Newton-King ce0dcd50cf
Fix interop test. Dispose GZipStream before accessing content. (#637) 2019-11-01 12:17:01 +13:00
James Newton-King 542066a4cc
Implement SerializationContext buffer writer (#629)
Implement SerializationContext buffer writer
2019-10-31 12:05:57 +13:00
James Newton-King ecc8f79776
Serialize directly to response when possible 2019-10-31 11:49:43 +13:00
Marc Gravell 8831fae3c9
serialization contexts may be reused; ensure they get reset correctly; also allow buffer-writers to be reused (but lazily created) 2019-10-31 11:44:26 +13:00
Marc Gravell 619f3748f6
DefaultSerializationContext: implement IBufferWriter<byte> API using ArrayBufferWriter<byte> 2019-10-31 11:44:20 +13:00
James Newton-King 65a1e1656c
Add unit and functional testing example (#618) 2019-10-30 18:17:44 +13:00
James Newton-King 9e39edb0a3
Add compression benchmark and refactor serialization (#615) 2019-10-23 13:03:27 +13:00
James Newton-King e248308f4c
Update OpenTelemetrySDK sample (#613) 2019-10-23 08:30:50 +13:00
James Newton-King ff287dde3e
Validate gRPC response protocol is not downgraded (#600) 2019-10-23 08:24:38 +13:00
Jan Tattermusch b43a6fc37e
Add implementation_comparison.md (#587)
* add implementation_comparison.md

* Update doc/implementation_comparison.md

Co-Authored-By: Andreas Häber <andy@andyandy.info>

* grpc-dotnet: note about TLS on macos

* refactor

* Update doc/implementation_comparison.md

Co-Authored-By: Andreas Häber <andy@andyandy.info>

* Update implementation_comparison.md

* Update implementation_comparison.md

* Update implementation_comparison.md

* add opentelemetry example

* refactor

* note about UDS support

* Update implementation_comparison.md
2019-10-15 16:44:28 +02:00
James Newton-King 126681dd74
Fix method discovery when there are duplicate names (#591) 2019-10-09 15:04:39 +13:00
James Newton-King db7e27df7f
Add OpenTelemetry to aggregator sample (#570) 2019-10-09 12:37:15 +13:00
James Newton-King 38335b0f8c
Channel internal HttpClient created with no timeout (#595) 2019-10-09 12:18:42 +13:00
James Newton-King dde2e76101
Fix duplicate log IDs (#589) 2019-10-09 12:08:49 +13:00
James Newton-King 47e1c79a3b
Include trailers in client with RpcException (#567) 2019-10-09 11:51:46 +13:00
James Newton-King 3fb086268a
Map HttpStatusCode to gRPC status code (#575) 2019-10-09 08:45:40 +13:00
James Newton-King 1f67ee2d00
Add interceptor sample (#576) 2019-10-09 08:10:11 +13:00
James Newton-King 19d081e820
Change example and test package names to lowercase (#581) 2019-10-09 08:05:43 +13:00
Jonathan Nagy fc470372f0 Bump Google.Protobuf to 3.10.0 (#582) (#583) 2019-10-04 15:55:06 +13:00
James Newton-King f417457950
Fix benchmarks by writing to console on application start (#584) 2019-10-04 14:09:09 +13:00
John Luo 5c8a13bb80
Add documentation for versioning policy going forward (#542) 2019-10-01 11:21:38 -07:00
James Newton-King 068b94d172
Add GitHub issue templates and TROUBLESHOOTING.md (#568) 2019-10-01 20:40:11 +13:00
James Newton-King dfe7be76b2
Migrate from WebHost to Host in test and perf websites (#566) 2019-10-01 14:44:28 +13:00
James Newton-King 89cf633a21
Fix C-core running under 5.0 in benchmark environment (#569) 2019-10-01 14:02:15 +13:00
James Newton-King 6df15cc3ab
Fix flaky deadline test (#553) 2019-10-01 11:16:07 +13:00
James Newton-King f448189939
Display full error from certifier sample (#555) 2019-09-28 07:13:24 +12:00
James Newton-King ca6cb660a5
Major client performance refactor (#489) 2019-09-27 17:58:05 +12:00
Srini Polavarapu a473aa314e Add GOVERNANCE.md and CONTRIBUTING.md (#554) 2019-09-27 12:20:50 +12:00
James Newton-King 605db95a6a
Fix running ccore perf server locally with computer name (#546) 2019-09-27 09:40:27 +12:00
James Newton-King 2a8c8f12fe
Improve error when missing trailer feature, unit test (#543) 2019-09-27 09:39:22 +12:00
James Newton-King f4a518ac4e
Log unsupported request content-type and protocol (#529) 2019-09-25 12:13:36 +12:00
James Newton-King b28d1be319
Update SDK, set versions for all projects (#540) 2019-09-25 09:18:26 +12:00
John Luo 5d7e359ea2
Update global tool and resolve build warnings. (#539)
* Update global tool

Remove build warning workarounds

Roll forward on major versions

Resolve NU5128 and NU5014 warnings
2019-09-23 16:18:39 -07:00
James Newton-King ce1ae58477
Use HttpClientHandler.DangerousAcceptAnyServerCertificateValidat… (#537) 2019-09-24 10:07:44 +12:00
Jan Tattermusch 6413c71215
Attempt to add scripts for generating API docs (#531)
* copy docfx rules from grpc/grpc

* fix docfx

* attempts

* fixups

* polish the scripts
2019-09-23 07:47:32 +02:00
James Newton-King b047ecab87
Update readme files for release (#533) 2019-09-21 07:55:33 +12:00
James Newton-King 01081bc268
Disable deterministic package (#527) 2019-09-19 10:34:43 +12:00
James Newton-King 8fe6dc3b62
Package Grpc.AspNetCore.Server.Reflection (#523) 2019-09-19 09:40:52 +12:00
James Newton-King 416c84d1f8
Add test of parallel streaming calls from one channel (#525) 2019-09-19 07:36:20 +12:00
James Newton-King 1660b9b67f
Fix generating XML documentation (#524) 2019-09-18 19:43:52 +12:00
James Newton-King 861263b4e1
Refactor examples into their own projects (#503) 2019-09-18 14:02:23 +12:00
James Newton-King 0ac7ab8d3d
Add client streaming failure test (#517) 2019-09-17 20:03:07 +12:00
Sourabh Shirhatti aad959b729 Workaround for bug in System.CommandLine (#512) 2019-09-17 09:21:25 +12:00
James Newton-King a27336e846
Refactor perf benchmarks to use grpc.io scenarios (#515) 2019-09-17 08:05:13 +12:00
James Newton-King 72cf21c105
Benchmarks: Add header for h2load client, use protocol on server (#511) 2019-09-14 08:14:07 +12:00
James Newton-King 01e6810733
Throw operation canceled when deadline exceeded status returned (#507) 2019-09-13 20:44:12 +12:00
James Newton-King 95c61cee8d
Reduce deadline test flakiness (#508) 2019-09-13 19:34:53 +12:00
James Newton-King 1b7b41c8bb
Add server streaming to benchmark client and update JSON perf files (#493) 2019-09-11 09:23:27 +12:00
James Newton-King 137fc327a3
Server call handler logger name shouldn't be service type name (#497) 2019-09-09 22:07:43 +12:00
James Newton-King f2fadd6007
Fix not canceling in-progress stream calls (#496) 2019-09-09 21:06:40 +12:00
Jan Tattermusch 91780a24e0
Change version to 2.24.0-dev (#495) 2019-09-09 07:41:54 +02:00
Jan Tattermusch 4967d9afe8
Update assembly version 2019-09-06 14:52:26 +02:00
Jan Tattermusch 27361bdb3e
Update version.props 2019-09-06 14:49:19 +02:00
Jan Tattermusch e5373b08c4
Update version to 0.2.23-pre2 (#494) 2019-09-06 14:32:51 +02:00
James Newton-King a56e110986
Rename canceled exception property on channel (#490) 2019-09-06 07:57:09 +12:00
James Newton-King 2b1ad6d454
Add h2load benchmark scenarios and improve local perf client (#193) 2019-09-04 16:42:15 +12:00
James Newton-King dab15852e1
Refactor client error handling (#479) 2019-09-04 12:53:48 +12:00
James Newton-King 127546281c
Add client microbenchmark (#484) 2019-09-04 07:56:13 +12:00
James Newton-King e1488b7afc
Update .NET Core SDK version (#482) 2019-08-30 10:02:54 +12:00
James Newton-King 355ac24250
Add support for per-call server compression (#481) 2019-08-29 22:51:29 +12:00
James Newton-King b7b1a18772
Remove deflate compression support (#480) 2019-08-29 21:34:46 +12:00
Jan Tattermusch 05f1e14487
Add MAINTAINERS.md file (#477)
* Add MAINTAINERS.md file
2019-08-27 11:37:50 +02:00
James Newton-King 2dc26fd6f6
Functional tests of parallel streaming and cancellation (#473) 2019-08-27 11:27:10 +12:00
James Newton-King 39e68b3b25
Validate request protocol (#475) 2019-08-27 10:24:56 +12:00
James Newton-King e1c13b119b
Remove git hash from client user agent (#471) 2019-08-23 10:31:03 +12:00
James Newton-King 365c6da80a
Fix flaky counters test (#470) 2019-08-23 10:21:15 +12:00
James Newton-King f3c5d149f8
Update version to 0.2.23-dev (#472) 2019-08-23 10:21:00 +12:00
apolcyn adf1459c52
Merge pull request #468 from apolcyn/update_version
Update version to 0.23.0-pre1
2019-08-20 14:36:26 -07:00
James Newton-King 3848bc2f2f
Merge branch 'master' into update_version 2019-08-21 09:21:53 +12:00
James Newton-King 742573269d
Fix package versioning (#469) 2019-08-21 09:21:13 +12:00
Alexander Polcyn fcd220148e Update version to 0.23.0-pre1 2019-08-20 13:26:04 -07:00
James Newton-King 832ecbef80
Update Grpc.Core.Api to 2.23 (#465) 2019-08-21 08:05:09 +12:00
James Newton-King fae09a26c2
Add channel setting for disposing HttpClient (#458) 2019-08-21 07:16:13 +12:00
James Newton-King cfa82e0277
Seal metadata type and cleanup InterceptorCollection (#462) 2019-08-21 06:53:34 +12:00
James Newton-King 3c271ecb33
Rename max message size properties (#461) 2019-08-21 06:39:25 +12:00
James Newton-King 487259cb9c
Add code analysis (#463) 2019-08-21 06:34:51 +12:00
James Newton-King 4779f6b4ba
Update package dependencies (#459) 2019-08-17 08:41:02 +12:00
James Newton-King 16772aefa0
Support DisposeAsync on services and interceptors (#456) 2019-08-15 11:59:13 +12:00
James Newton-King 204eae17b3
Add server compression interop tests (#451) 2019-08-15 11:52:34 +12:00
James Newton-King 467dcb9d57
Update SDK to fix HttpClient issue (#455) 2019-08-15 11:38:40 +12:00
John Luo f2c415782d
ServiceReference CLI improvements (#443)
* Add List command

* Make the client package conditional on SDK type

* Use PackageVersion file from VS tooling
2019-08-14 16:26:23 -07:00
James Newton-King 3f68075e88
Fix flaky test (#453) 2019-08-14 10:08:23 +12:00
James Newton-King 3abe7c604f
Refactor channel creation (#446) 2019-08-13 15:30:04 +12:00
James Newton-King ec3bbcb6ed
Disable test because of underlying error in HttpClient (#449) 2019-08-13 13:11:51 +12:00
James Newton-King a9d24c3e64
Respect NoCompress flag in the client (#450) 2019-08-13 13:11:07 +12:00
James Newton-King fcedf189f7
Fix EnableCallContextPropagation scoping issue (#445) 2019-08-12 17:33:56 +12:00
James Newton-King 89493e3421
Add new bi-directional streaming sample (#440) 2019-08-12 17:18:49 +12:00
James Newton-King b1dcca9a2b
Clean up samples (#444) 2019-08-12 17:14:28 +12:00
James Newton-King baa15eece9
Update SDK and enable fixed tests (#442) 2019-08-12 17:04:21 +12:00
James Newton-King 7a1b1ba842
Channel feedback (#441) 2019-08-10 16:32:01 +12:00
James Newton-King 88bae72a68
Add ReadAllAsync extension method to common (#438) 2019-08-09 15:29:23 +12:00
James Newton-King 7a0013b8a5
Add default receive max size to client (#439) 2019-08-08 13:06:57 +12:00
James Newton-King 0d3e1b685d
Move compression provider to new common package (#436) 2019-08-08 10:48:40 +12:00
James Newton-King 695429882f
Add ChannelBuilder and remove GrpcClient factory 2019-08-06 13:30:35 +12:00
James Newton-King 0bf6b57061
Add name validation when configuring gRPC clients with factory (#434) 2019-08-06 12:17:50 +12:00
James Newton-King 464ff9c3fd
Add test for an incomplete message when streaming (#432) 2019-08-06 11:41:37 +12:00
James Newton-King e517c31e00
Update to 2.23 and remove LiteClientBase (#427) 2019-08-02 12:36:11 +12:00
Jan Tattermusch 6c023f6d56
Update version to 0.2.23-dev (#426) 2019-08-01 14:27:13 -07:00
James Newton-King adfc1ac09c
Remove netstandard2.1 workaround (#425) 2019-08-02 09:17:44 +12:00
James Newton-King 65cf67ff6c
Fix hang in client writer when call is started canceled (#423) 2019-08-01 10:27:06 +12:00
Jan Tattermusch 14d64d9105
Update version to 0.1.22-pre3 (#421) 2019-07-30 14:08:50 -07:00
James Newton-King 80cb82e482
Flush request body stream at start of client and duplex streamin… (#418) 2019-07-31 08:38:34 +12:00
James Newton-King 6e9cead772
Unit test event counters and update to latest SDK (#415) 2019-07-30 12:17:41 +12:00
John Luo 4c9bd4a879
Warn if file reference not resolved (#412) 2019-07-25 11:31:44 -07:00
James Newton-King 35574ea1b5
Fix issues related to VS and update SDK (#411) 2019-07-25 12:28:46 +12:00
James Newton-King e85b685f89
Server message logging (#404) 2019-07-24 09:12:15 +12:00
James Newton-King 1a550da33a
Register cache as a singleton, wrap invoker only when needed (#408) 2019-07-24 09:03:08 +12:00
James Newton-King 2223ea8017
Log compression and fix compression header bug (#402) 2019-07-24 08:58:21 +12:00
James Newton-King e6a84ddb0a
Fix incorrectly setting examined when message is read (#406) 2019-07-22 18:13:33 +12:00
James Newton-King 9658354420
Log functional tests to test output (#398) 2019-07-21 14:24:14 +12:00
James Newton-King 845f041408
Remove streaming max request size (#403) 2019-07-21 14:14:58 +12:00
James Newton-King 2c0a33fd81
Remove curly braces from proto rpcs (#400) 2019-07-19 11:45:09 +12:00
James Newton-King 84a037c953
Add functional test of streaming large data in batches (#397) 2019-07-18 11:44:48 +12:00
James Newton-King 7240de7bc5
Change convention builder namespace to Microsoft.AspNetCore.Buil… (#399) 2019-07-18 11:44:04 +12:00
James Newton-King c5047d234b
Update proto files to have semicolon after methods (#396) 2019-07-17 10:57:41 +12:00
Jan Tattermusch 9b7680ee7e
Fix contents of AuthInterceptorContext (#395)
* fix contents of AuthInterceptorContext

* address comments

* add tests

* fix implementation and add more tests cases
2019-07-16 14:15:43 +02:00
James Newton-King 637e3ec7d3
Add EventSource and new activity to client (#348) 2019-07-16 17:02:34 +12:00
James Newton-King 7ab9e84391
Verify AddInterceptor and EnableCallContextPropagation is used w… (#390)
Verify AddInterceptor and EnableCallContextPropagation is used with AddGrpcClient
2019-07-16 15:04:52 +12:00
James Newton-King e4904be549
Change InterceptorsCollection to inherit Collection (#387) 2019-07-16 12:53:17 +12:00
James Newton-King 10603c7b36
Refactor activators to be singletons and to use DI factory (#384) 2019-07-16 10:54:59 +12:00
James Newton-King cd676069a1
Add EventSource and activity tags to server (#341) 2019-07-16 10:20:04 +12:00
James Newton-King c9ffae01e2
Move context propagation to an interceptor (#391) 2019-07-16 10:18:31 +12:00
James Newton-King 1ace78d7f8
Temporarily suppress conflict warning in dotnet-grpc (#394) 2019-07-16 09:48:55 +12:00
James Newton-King f1fb81e380
Add strongly typed endpoint convention builder (#388) 2019-07-16 09:02:48 +12:00
James Newton-King 28993e69a9
Update grpc-dotnet commandline dependency (#392) 2019-07-16 09:00:39 +12:00
James Newton-King 23e2fb35e9
Move feature out of Features namespace (#386) 2019-07-16 08:59:34 +12:00
James Newton-King 2279d9a0c2
Add client max size configuration (#381) 2019-07-11 09:00:03 +12:00
James Newton-King ea580ae2cc
Use contextual serialization (#376) 2019-07-10 09:38:17 +12:00
John Luo 35d31f6c9e
Add tests for ClientBase type overrides (#379) 2019-07-09 14:19:05 -07:00
John Luo 152255ec54
Update test script (#380) 2019-07-09 14:17:48 -07:00
James Newton-King d6c8349e4b
Client compression (#362) 2019-07-09 09:13:27 +12:00
James Newton-King d855571034
Update .NET Core SDK (#375) 2019-07-09 09:01:02 +12:00
James Newton-King 12713b7690
Log when CallCredentials are not used (#371) 2019-07-06 10:44:12 +12:00
James Newton-King 22933e58cc
Support CallOptions.CallCredentials (#364) 2019-07-05 11:10:21 +12:00
Stephen Toub 534a9ee725 Explicitly flush after writes in WriteMessage (#368)
We need to be sure that the message has been flushed out to the wire.
2019-07-05 10:06:55 +12:00
James Newton-King 42a8bb3f33
Validate HttpClient.BaseAddress has been set (#367) 2019-07-04 09:33:17 +12:00
James Newton-King 4289453023
Replace sync-over-async Assert.ThrowsAsync (#363) 2019-07-03 09:19:13 +12:00
Jan Tattermusch 0d6118faf7
Switch version back to -dev suffix. (#366) 2019-07-02 21:24:44 +02:00
1407 changed files with 138986 additions and 21942 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

20
.github/ISSUE_TEMPLATE/ask_question.md vendored Normal file
View File

@ -0,0 +1,20 @@
---
name: Ask a question
about: Ask a question related to this project
labels: question
---
<!--
Your question may have already been answered. Please look here first:
- Documentation: https://docs.microsoft.com/aspnet/core/grpc
- Troubleshooting: https://docs.microsoft.com/aspnet/core/grpc/troubleshoot
- StackOverflow, with "grpc" tag: https://stackoverflow.com/questions/tagged/grpc
Issues specific to Grpc.Core (C-core server and client), or code generation with Grpc.Tools should be created at https://github.com/grpc/grpc/issues/new
Make sure you include information that can help us understand your question.
-->
<!-- Your question below this line. -->

40
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,40 @@
---
name: Report a bug
about: Create a report to help us improve
labels: bug
---
<!--
This form is for bug reports and feature requests ONLY!
For general questions and troubleshooting, please ask/look for answers here:
- Documentation: https://docs.microsoft.com/aspnet/core/grpc
- Troubleshooting: https://docs.microsoft.com/aspnet/core/grpc/troubleshoot
- StackOverflow, with "grpc" tag: https://stackoverflow.com/questions/tagged/grpc
Issues specific to Grpc.Core (C-core server and client), or code generation with Grpc.Tools should be created at https://github.com/grpc/grpc/issues/new
-->
### What version of gRPC and what language are you using?
### What operating system (Linux, Windows,...) and version?
### What runtime / compiler are you using (e.g. .NET Core SDK version `dotnet --info`)
### What did you do?
If possible, provide a recipe for reproducing the error. Try being specific and include code snippets if helpful.
### What did you expect to see?
### What did you see instead?
Make sure you include information that can help us debug (full error message, exception listing, stack trace, logs).
See [TROUBLESHOOTING.md](https://github.com/grpc/grpc-dotnet/blob/master/TROUBLESHOOTING.md) for how to diagnose problems better.
### Anything else we should know about your project / environment?

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.

View File

@ -0,0 +1,29 @@
---
name: Request a feature
about: Suggest an idea for this project
labels: enhancement
---
<!--
This form is for bug reports and feature requests ONLY!
For general questions and troubleshooting, please ask/look for answers here:
- Documentation: https://docs.microsoft.com/aspnet/core/grpc
- Troubleshooting: https://docs.microsoft.com/aspnet/core/grpc/troubleshoot
- StackOverflow, with "grpc" tag: https://stackoverflow.com/questions/tagged/grpc
Issues specific to Grpc.Core (C-core server and client), or code generation with Grpc.Tools should be created at https://github.com/grpc/grpc/issues/new
-->
### Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
### Describe the solution you'd like
A clear and concise description of what you want to happen.
### Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
### Additional context
Add any other context about the feature request here.

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

2
.gitignore vendored
View File

@ -34,8 +34,8 @@ launchSettings.json
BenchmarkDotNet.Artifacts/ BenchmarkDotNet.Artifacts/
BDN.Generated/ BDN.Generated/
binaries/ binaries/
global.json
.vscode/ .vscode/
*.binlog *.binlog
build/feed build/feed
.dotnet/ .dotnet/
*.log.txt

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

5
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,5 @@
# How to contribute
We definitely welcome patches and contributions to grpc-dotnet! Please read the gRPC
organization's [governance rules](https://github.com/grpc/grpc-community/blob/master/governance.md)
and [contribution guidelines](https://github.com/grpc/grpc-community/blob/master/CONTRIBUTING.md) before proceeding.

View File

@ -1,31 +1,32 @@
<Project> <Project>
<Import Project="build\sources.props" />
<Import Project="build\dependencies.props" />
<Import Project="build\version.props" /> <Import Project="build\version.props" />
<PropertyGroup> <PropertyGroup>
<!-- Set versions for all projects. Avoids warnings from non-preview projects referencing preview projects -->
<Version>$(GrpcDotnetVersion)</Version>
<AssemblyVersion>$(GrpcDotnetAssemblyVersion)</AssemblyVersion>
<FileVersion>$(GrpcDotnetAssemblyFileVersion)</FileVersion>
<AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)keys\Grpc.snk</AssemblyOriginatorKeyFile> <AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)keys\Grpc.snk</AssemblyOriginatorKeyFile>
<SignAssembly>true</SignAssembly> <SignAssembly>true</SignAssembly>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors> <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. --> <!-- Don't make missing XML docs a fatal build error, but still surface so we have visibility into undocumented APIs. -->
<WarningsNotAsErrors>$(WarningsNotAsErrors);CS1591</WarningsNotAsErrors> <WarningsNotAsErrors>$(WarningsNotAsErrors);CS1591</WarningsNotAsErrors>
<!-- static local methods are a C# 8.0 feature --> <!-- Disable warnings about AOT and trimming features on older targets, e.g. netstandard2.0.
<LangVersion>preview</LangVersion> 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> <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> </PropertyGroup>
<ItemGroup>
<!-- TODO (johluo): Remove this workaround when VS updates -->
<PackageReference Include="Microsoft.Net.Compilers.Toolset" Version="$(MicrosoftNetCompilersToolsetPackageVersion)" PrivateAssets="All" />
</ItemGroup>
<Target Name="WorkaroundNetStandard" AfterTargets="ResolvePackageAssets">
<!-- TODO (jamesnk): Remove this workaround when VS updates - https://github.com/dotnet/cli/issues/11378#issuecomment-499988244 -->
<ItemGroup>
<TransitiveFrameworkReference Remove="NETStandard.Library" />
</ItemGroup>
</Target>
</Project> </Project>

View File

@ -1,10 +1,54 @@
<Project> <Project>
<ItemGroup> <!-- IsGrpcPublishedPackage is set in csproj so related config must be in targets file -->
<!-- Override to use LiteClientBase for client code generation, unless opted out via DisableAspNetCoreDefaultClientTypeOverride --> <PropertyGroup Condition=" '$(IsGrpcPublishedPackage)' == 'true' ">
<Protobuf Condition="'$(DisableAspNetCoreDefaultClientTypeOverride)' != 'true'" Update="@(Protobuf)"> <Authors>The gRPC Authors</Authors>
<ClientBaseType Condition="'%(Protobuf.GrpcServices)' == 'Client' OR '%(Protobuf.GrpcServices)' == 'Both'">LiteClientBase</ClientBaseType> <Copyright>Copyright 2019 The gRPC Authors</Copyright>
</Protobuf> <PackageIcon>packageIcon.png</PackageIcon>
<PackageIconFullPath>$(MSBuildThisFileDirectory)packageIcon.png</PackageIconFullPath>
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
<PackageProjectUrl>https://github.com/grpc/grpc-dotnet</PackageProjectUrl>
<Deterministic>false</Deterministic>
<!-- Include PDB in the built .nupkg -->
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<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.NetAnalyzers" PrivateAssets="All" />
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" />
</ItemGroup> </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> </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>

1
GOVERNANCE.md Normal file
View File

@ -0,0 +1 @@
This repository is governed by the gRPC organization's [governance rules](https://github.com/grpc/grpc-community/blob/master/governance.md).

199
Grpc.DotNet.ruleset Normal file
View File

@ -0,0 +1,199 @@
<?xml version="1.0"?>
<RuleSet Name="All Rules Disabled" Description="All Rules are disabled." ToolsVersion="15.0">
<Rules AnalyzerId="Microsoft.CodeAnalysis.VersionCheckAnalyzer" RuleNamespace="Microsoft.CodeAnalysis.VersionCheckAnalyzer">
<Rule Id="CA9999" Action="None" /> <!-- Analyzer version mismatch -->
</Rules>
<Rules AnalyzerId="Microsoft.CodeQuality.Analyzers" RuleNamespace="Microsoft.CodeQuality.Analyzers">
<Rule Id="CA1000" Action="None" /> <!-- Do not declare static members on generic types -->
<Rule Id="CA1008" Action="None" /> <!-- Enums should have zero value -->
<Rule Id="CA1010" Action="None" /> <!-- Collections should implement generic interface -->
<Rule Id="CA1012" Action="None" /> <!-- Abstract types should not have constructors -->
<Rule Id="CA1014" Action="None" /> <!-- Mark assemblies with CLSCompliant -->
<Rule Id="CA1016" Action="None" /> <!-- Mark assemblies with assembly version -->
<Rule Id="CA1017" Action="None" /> <!-- Mark assemblies with ComVisible -->
<Rule Id="CA1018" Action="None" /> <!-- Mark attributes with AttributeUsageAttribute -->
<Rule Id="CA1024" Action="None" /> <!-- Use properties where appropriate -->
<Rule Id="CA1027" Action="None" /> <!-- Mark enums with FlagsAttribute -->
<Rule Id="CA1028" Action="None" /> <!-- Enum Storage should be Int32 -->
<Rule Id="CA1030" Action="None" /> <!-- Use events where appropriate -->
<Rule Id="CA1031" Action="None" /> <!-- Do not catch general exception types -->
<Rule Id="CA1033" Action="None" /> <!-- Interface methods should be callable by child types -->
<Rule Id="CA1034" Action="None" /> <!-- Nested types should not be visible -->
<Rule Id="CA1036" Action="None" /> <!-- Override methods on comparable types -->
<Rule Id="CA1040" Action="None" /> <!-- Avoid empty interfaces -->
<Rule Id="CA1041" Action="None" /> <!-- Provide ObsoleteAttribute message -->
<Rule Id="CA1043" Action="None" /> <!-- Use Integral Or String Argument For Indexers -->
<Rule Id="CA1044" Action="None" /> <!-- Properties should not be write only -->
<Rule Id="CA1050" Action="None" /> <!-- Declare types in namespaces -->
<Rule Id="CA1051" Action="None" /> <!-- Do not declare visible instance fields -->
<Rule Id="CA1052" Action="None" /> <!-- Static holder types should be Static or NotInheritable -->
<Rule Id="CA1054" Action="None" /> <!-- Uri parameters should not be strings -->
<Rule Id="CA1055" Action="None" /> <!-- Uri return values should not be strings -->
<Rule Id="CA1056" Action="None" /> <!-- Uri properties should not be strings -->
<Rule Id="CA1060" Action="None" /> <!-- Move pinvokes to native methods class -->
<Rule Id="CA1061" Action="None" /> <!-- Do not hide base class methods -->
<Rule Id="CA1062" Action="None" /> <!-- Validate arguments of public methods -->
<Rule Id="CA1063" Action="None" /> <!-- Implement IDisposable Correctly -->
<Rule Id="CA1064" Action="None" /> <!-- Exceptions should be public -->
<Rule Id="CA1066" Action="None" /> <!-- Type {0} should implement IEquatable<T> because it overrides Equals -->
<Rule Id="CA1067" Action="None" /> <!-- Override Object.Equals(object) when implementing IEquatable<T> -->
<Rule Id="CA1068" Action="None" /> <!-- CancellationToken parameters must come last -->
<Rule Id="CA1501" Action="None" /> <!-- Avoid excessive inheritance -->
<Rule Id="CA1502" Action="None" /> <!-- Avoid excessive complexity -->
<Rule Id="CA1505" Action="None" /> <!-- Avoid unmaintainable code -->
<Rule Id="CA1506" Action="None" /> <!-- Avoid excessive class coupling -->
<Rule Id="CA1508" Action="None" /> <!-- Avoid dead conditional code -->
<Rule Id="CA1509" Action="None" /> <!-- Invalid entry in code metrics rule specification file -->
<Rule Id="CA1707" Action="None" /> <!-- Identifiers should not contain underscores -->
<Rule Id="CA1708" Action="None" /> <!-- Identifiers should differ by more than case -->
<Rule Id="CA1710" Action="None" /> <!-- Identifiers should have correct suffix -->
<Rule Id="CA1711" Action="None" /> <!-- Identifiers should not have incorrect suffix -->
<Rule Id="CA1712" Action="None" /> <!-- Do not prefix enum values with type name -->
<Rule Id="CA1714" Action="None" /> <!-- Flags enums should have plural names -->
<Rule Id="CA1715" Action="None" /> <!-- Identifiers should have correct prefix -->
<Rule Id="CA1716" Action="None" /> <!-- Identifiers should not match keywords -->
<Rule Id="CA1717" Action="None" /> <!-- Only FlagsAttribute enums should have plural names -->
<Rule Id="CA1720" Action="None" /> <!-- Identifier contains type name -->
<Rule Id="CA1721" Action="None" /> <!-- Property names should not match get methods -->
<Rule Id="CA1724" Action="None" /> <!-- Type names should not match namespaces -->
<Rule Id="CA1725" Action="None" /> <!-- Parameter names should match base declaration -->
<Rule Id="CA1801" Action="None" /> <!-- Review unused parameters -->
<Rule Id="CA1802" Action="None" /> <!-- Use literals where appropriate -->
<Rule Id="CA1806" Action="None" /> <!-- Do not ignore method results -->
<Rule Id="CA1812" Action="Warning" /> <!-- Avoid uninstantiated internal classes -->
<Rule Id="CA1814" Action="None" /> <!-- Prefer jagged arrays over multidimensional -->
<Rule Id="CA1815" Action="None" /> <!-- Override equals and operator equals on value types -->
<Rule Id="CA1819" Action="None" /> <!-- Properties should not return arrays -->
<Rule Id="CA1822" Action="None" /> <!-- Mark members as static -->
<Rule Id="CA1823" Action="Warning" /> <!-- Avoid unused private fields -->
<Rule Id="CA2007" Action="Error" /> <!-- Do not directly await a Task -->
<Rule Id="CA2119" Action="None" /> <!-- Seal methods that satisfy private interfaces -->
<Rule Id="CA2211" Action="None" /> <!-- Non-constant fields should not be visible -->
<Rule Id="CA2214" Action="None" /> <!-- Do not call overridable methods in constructors -->
<Rule Id="CA2217" Action="None" /> <!-- Do not mark enums with FlagsAttribute -->
<Rule Id="CA2219" Action="None" /> <!-- Do not raise exceptions in finally clauses -->
<Rule Id="CA2225" Action="None" /> <!-- Operator overloads have named alternates -->
<Rule Id="CA2226" Action="None" /> <!-- Operators should have symmetrical overloads -->
<Rule Id="CA2227" Action="None" /> <!-- Collection properties should be read only -->
<Rule Id="CA2231" Action="None" /> <!-- Overload operator equals on overriding value type Equals -->
<Rule Id="CA2244" Action="None" /> <!-- Do not duplicate indexed element initializations -->
</Rules>
<Rules AnalyzerId="Microsoft.CodeQuality.CSharp.Analyzers" RuleNamespace="Microsoft.CodeQuality.CSharp.Analyzers">
<Rule Id="CA1001" Action="None" /> <!-- Types that own disposable fields should be disposable -->
<Rule Id="CA1003" Action="None" /> <!-- Use generic event handler instances -->
<Rule Id="CA1019" Action="None" /> <!-- Define accessors for attribute arguments -->
<Rule Id="CA1032" Action="None" /> <!-- Implement standard exception constructors -->
<Rule Id="CA1065" Action="None" /> <!-- Do not raise exceptions in unexpected locations -->
<Rule Id="CA1200" Action="None" /> <!-- Avoid using cref tags with a prefix -->
<Rule Id="CA1507" Action="None" /> <!-- Use nameof to express symbol names -->
<Rule Id="CA1821" Action="None" /> <!-- Remove empty Finalizers -->
<Rule Id="CA2200" Action="None" /> <!-- Rethrow to preserve stack details. -->
<Rule Id="CA2234" Action="None" /> <!-- Pass system uri objects instead of strings -->
</Rules>
<Rules AnalyzerId="Microsoft.CodeQuality.VisualBasic.Analyzers" RuleNamespace="Microsoft.CodeQuality.VisualBasic.Analyzers">
<Rule Id="CA1001" Action="None" /> <!-- Types that own disposable fields should be disposable -->
<Rule Id="CA1003" Action="None" /> <!-- Use generic event handler instances -->
<Rule Id="CA1019" Action="None" /> <!-- Define accessors for attribute arguments -->
<Rule Id="CA1032" Action="None" /> <!-- Implement standard exception constructors -->
<Rule Id="CA1065" Action="None" /> <!-- Do not raise exceptions in unexpected locations -->
<Rule Id="CA1200" Action="None" /> <!-- Avoid using cref tags with a prefix -->
<Rule Id="CA1507" Action="None" /> <!-- Use nameof to express symbol names -->
<Rule Id="CA1821" Action="None" /> <!-- Remove empty Finalizers -->
<Rule Id="CA2200" Action="None" /> <!-- Rethrow to preserve stack details. -->
<Rule Id="CA2218" Action="None" /> <!-- Override GetHashCode on overriding Equals -->
<Rule Id="CA2224" Action="None" /> <!-- Override Equals on overloading operator equals -->
<Rule Id="CA2234" Action="None" /> <!-- Pass system uri objects instead of strings -->
</Rules>
<Rules AnalyzerId="Microsoft.NetCore.Analyzers" RuleNamespace="Microsoft.NetCore.Analyzers">
<Rule Id="CA1303" Action="None" /> <!-- Do not pass literals as localized parameters -->
<Rule Id="CA1304" Action="Error" /> <!-- Specify CultureInfo -->
<Rule Id="CA1305" Action="Error" /> <!-- Specify IFormatProvider -->
<Rule Id="CA1307" Action="Error" /> <!-- Specify StringComparison -->
<Rule Id="CA1308" Action="None" /> <!-- Normalize strings to uppercase -->
<Rule Id="CA1401" Action="None" /> <!-- P/Invokes should not be visible -->
<Rule Id="CA1813" Action="None" /> <!-- Avoid unsealed attributes -->
<Rule Id="CA1816" Action="None" /> <!-- Dispose methods should call SuppressFinalize -->
<Rule Id="CA1820" Action="None" /> <!-- Test for empty strings using string length -->
<Rule Id="CA1826" Action="None" /> <!-- Do not use Enumerable methods on indexable collections. Instead use the collection directly -->
<Rule Id="CA2000" Action="None" /> <!-- Dispose objects before losing scope -->
<Rule Id="CA2002" Action="None" /> <!-- Do not lock on objects with weak identity -->
<Rule Id="CA2008" Action="None" /> <!-- Do not create tasks without passing a TaskScheduler -->
<Rule Id="CA2009" Action="None" /> <!-- Do not call ToImmutableCollection on an ImmutableCollection value -->
<Rule Id="CA2100" Action="None" /> <!-- Review SQL queries for security vulnerabilities -->
<Rule Id="CA2101" Action="None" /> <!-- Specify marshaling for P/Invoke string arguments -->
<Rule Id="CA2208" Action="None" /> <!-- Instantiate argument exceptions correctly -->
<Rule Id="CA2213" Action="None" /> <!-- Disposable fields should be disposed -->
<Rule Id="CA2216" Action="None" /> <!-- Disposable types should declare finalizer -->
<Rule Id="CA2229" Action="None" /> <!-- Implement serialization constructors -->
<Rule Id="CA2235" Action="None" /> <!-- Mark all non-serializable fields -->
<Rule Id="CA2237" Action="None" /> <!-- Mark ISerializable types with serializable -->
<Rule Id="CA2241" Action="None" /> <!-- Provide correct arguments to formatting methods -->
<Rule Id="CA2242" Action="None" /> <!-- Test for NaN correctly -->
<Rule Id="CA2243" Action="None" /> <!-- Attribute string literals should parse correctly -->
<Rule Id="CA2300" Action="None" /> <!-- Do not use insecure deserializer BinaryFormatter -->
<Rule Id="CA2301" Action="None" /> <!-- Do not call BinaryFormatter.Deserialize without first setting BinaryFormatter.Binder -->
<Rule Id="CA2302" Action="None" /> <!-- Ensure BinaryFormatter.Binder is set before calling BinaryFormatter.Deserialize -->
<Rule Id="CA2305" Action="None" /> <!-- Do not use insecure deserializer LosFormatter -->
<Rule Id="CA2310" Action="None" /> <!-- Do not use insecure deserializer NetDataContractSerializer -->
<Rule Id="CA2311" Action="None" /> <!-- Do not deserialize without first setting NetDataContractSerializer.Binder -->
<Rule Id="CA2312" Action="None" /> <!-- Ensure NetDataContractSerializer.Binder is set before deserializing -->
<Rule Id="CA2315" Action="None" /> <!-- Do not use insecure deserializer ObjectStateFormatter -->
<Rule Id="CA3001" Action="None" /> <!-- Review code for SQL injection vulnerabilities -->
<Rule Id="CA3002" Action="None" /> <!-- Review code for XSS vulnerabilities -->
<Rule Id="CA3003" Action="None" /> <!-- Review code for file path injection vulnerabilities -->
<Rule Id="CA3004" Action="None" /> <!-- Review code for information disclosure vulnerabilities -->
<Rule Id="CA3005" Action="None" /> <!-- Review code for LDAP injection vulnerabilities -->
<Rule Id="CA3006" Action="None" /> <!-- Review code for process command injection vulnerabilities -->
<Rule Id="CA3007" Action="None" /> <!-- Review code for open redirect vulnerabilities -->
<Rule Id="CA3008" Action="None" /> <!-- Review code for XPath injection vulnerabilities -->
<Rule Id="CA3009" Action="None" /> <!-- Review code for XML injection vulnerabilities -->
<Rule Id="CA3010" Action="None" /> <!-- Review code for XAML injection vulnerabilities -->
<Rule Id="CA3011" Action="None" /> <!-- Review code for DLL injection vulnerabilities -->
<Rule Id="CA3012" Action="None" /> <!-- Review code for regex injection vulnerabilities -->
<Rule Id="CA3061" Action="None" /> <!-- Do Not Add Schema By URL -->
<Rule Id="CA5350" Action="None" /> <!-- Do Not Use Weak Cryptographic Algorithms -->
<Rule Id="CA5351" Action="None" /> <!-- Do Not Use Broken Cryptographic Algorithms -->
<Rule Id="CA5358" Action="None" /> <!-- Do Not Use Unsafe Cipher Modes -->
<Rule Id="CA5359" Action="None" /> <!-- Do Not Disable Certificate Validation -->
<Rule Id="CA5360" Action="None" /> <!-- Do Not Call Dangerous Methods In Deserialization -->
<Rule Id="CA5361" Action="None" /> <!-- Do Not Disable SChannel Use of Strong Crypto -->
<Rule Id="CA5362" Action="None" /> <!-- Do Not Refer Self In Serializable Class -->
<Rule Id="CA5363" Action="None" /> <!-- Do Not Disable Request Validation -->
<Rule Id="CA5364" Action="None" /> <!-- Do Not Use Deprecated Security Protocols -->
<Rule Id="CA5365" Action="None" /> <!-- Do Not Disable HTTP Header Checking -->
<Rule Id="CA5367" Action="None" /> <!-- Do Not Serialize Types With Pointer Fields -->
<Rule Id="CA5368" Action="None" /> <!-- Set ViewStateUserKey For Classes Derived From Page -->
</Rules>
<Rules AnalyzerId="Microsoft.NetCore.CSharp.Analyzers" RuleNamespace="Microsoft.NetCore.CSharp.Analyzers">
<Rule Id="CA1309" Action="Error" /> <!-- Use ordinal stringcomparison -->
<Rule Id="CA1810" Action="None" /> <!-- Initialize reference type static fields inline -->
<Rule Id="CA1824" Action="None" /> <!-- Mark assemblies with NeutralResourcesLanguageAttribute -->
<Rule Id="CA1825" Action="Warning" /> <!-- Avoid zero-length array allocations. -->
<Rule Id="CA2010" Action="None" /> <!-- Always consume the value returned by methods marked with PreserveSigAttribute -->
<Rule Id="CA2201" Action="None" /> <!-- Do not raise reserved exception types -->
<Rule Id="CA2207" Action="None" /> <!-- Initialize value type static fields inline -->
</Rules>
<Rules AnalyzerId="Microsoft.NetCore.VisualBasic.Analyzers" RuleNamespace="Microsoft.NetCore.VisualBasic.Analyzers">
<Rule Id="CA1309" Action="Error" /> <!-- Use ordinal stringcomparison -->
<Rule Id="CA1810" Action="None" /> <!-- Initialize reference type static fields inline -->
<Rule Id="CA1824" Action="None" /> <!-- Mark assemblies with NeutralResourcesLanguageAttribute -->
<Rule Id="CA1825" Action="Warning" /> <!-- Avoid zero-length array allocations. -->
<Rule Id="CA2010" Action="None" /> <!-- Always consume the value returned by methods marked with PreserveSigAttribute -->
<Rule Id="CA2201" Action="None" /> <!-- Do not raise reserved exception types -->
<Rule Id="CA2207" Action="None" /> <!-- Initialize value type static fields inline -->
</Rules>
<Rules AnalyzerId="Microsoft.NetFramework.Analyzers" RuleNamespace="Microsoft.NetFramework.Analyzers">
<Rule Id="CA1058" Action="None" /> <!-- Types should not extend certain base types -->
<Rule Id="CA2153" Action="None" /> <!-- Do Not Catch Corrupted State Exceptions -->
<Rule Id="CA3075" Action="None" /> <!-- Insecure DTD processing in XML -->
<Rule Id="CA3147" Action="None" /> <!-- Mark Verb Handlers With Validate Antiforgery Token -->
</Rules>
<Rules AnalyzerId="Microsoft.NetFramework.CSharp.Analyzers" RuleNamespace="Microsoft.NetFramework.CSharp.Analyzers">
<Rule Id="CA3076" Action="None" /> <!-- Insecure XSLT script processing. -->
<Rule Id="CA3077" Action="None" /> <!-- Insecure Processing in API Design, XmlDocument and XmlTextReader -->
</Rules>
<Rules AnalyzerId="Microsoft.NetFramework.VisualBasic.Analyzers" RuleNamespace="Microsoft.NetFramework.VisualBasic.Analyzers">
<Rule Id="CA3076" Action="None" /> <!-- Insecure XSLT script processing. -->
<Rule Id="CA3077" Action="None" /> <!-- Insecure Processing in API Design, XmlDocument and XmlTextReader -->
</Rules>
</RuleSet>

View File

@ -1,352 +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}") = "examples", "examples", "{EA330592-E294-4A29-B60E-196AA05831DD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{8C62055F-8CD7-4859-9001-634D544DF2AE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Proto", "Proto", "{AC41B2B2-62D9-454E-8521-F71E331B07F3}"
ProjectSection(SolutionItems) = preProject
examples\Proto\aggregate.proto = examples\Proto\aggregate.proto
examples\Proto\certify.proto = examples\Proto\certify.proto
examples\Proto\count.proto = examples\Proto\count.proto
examples\Proto\greet.proto = examples\Proto\greet.proto
examples\Proto\mail.proto = examples\Proto\mail.proto
examples\Proto\ticket.proto = examples\Proto\ticket.proto
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Clients", "Clients", "{F6E0F9D7-64E5-4C7B-A9BC-3C2AD687710B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server", "Server", "{A7E09CBD-853F-4C42-B4C4-A1C2CBA10C0B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Certs", "Certs", "{409A27EF-A5E9-45C5-9041-7210C6C8FC17}"
ProjectSection(SolutionItems) = preProject
examples\Certs\ca.crt = examples\Certs\ca.crt
examples\Certs\ca.key = examples\Certs\ca.key
examples\Certs\client.crt = examples\Certs\client.crt
examples\Certs\client.key = examples\Certs\client.key
examples\Certs\Readme.md = examples\Certs\Readme.md
examples\Certs\server.crt = examples\Certs\server.crt
examples\Certs\server.key = examples\Certs\server.key
examples\Certs\server.pfx = examples\Certs\server.pfx
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{3E045DF6-62EF-4331-B712-9CF5EC56F04C}"
ProjectSection(SolutionItems) = preProject
examples\Shared\ClientResources.cs = examples\Shared\ClientResources.cs
EndProjectSection
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("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Counter", "examples\Clients\Counter\Counter.csproj", "{F65AE56A-E6C8-467D-A097-3766D51720C0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greeter", "examples\Clients\Greeter\Greeter.csproj", "{265BE0B1-9002-441B-BA96-5C9E01115840}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server", "examples\Server\Server.csproj", "{CD6E11AE-34B2-4054-AD14-A27653131762}"
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\message.proto = testassets\Proto\message.proto
testassets\Proto\nested.proto = testassets\Proto\nested.proto
testassets\Proto\singleton.proto = testassets\Proto\singleton.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("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BenchmarkServer", "perf\benchmarkapps\BenchmarkServer\BenchmarkServer.csproj", "{7769DC99-1A21-40CF-933F-E3A47D486659}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NativeServer", "perf\benchmarkapps\NativeServer\NativeServer.csproj", "{D53BCA42-8B5C-40BA-88B2-01315D710AC2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{310E5783-455A-4D09-A7AE-39DC2AB09504}"
ProjectSection(SolutionItems) = preProject
perf\benchmarkapps\Shared\BenchmarkConfigurationHelpers.cs = perf\benchmarkapps\Shared\BenchmarkConfigurationHelpers.cs
perf\benchmarkapps\Shared\ca.crt = perf\benchmarkapps\Shared\ca.crt
perf\benchmarkapps\Shared\client.crt = perf\benchmarkapps\Shared\client.crt
perf\benchmarkapps\Shared\client.key = perf\benchmarkapps\Shared\client.key
perf\benchmarkapps\Shared\greet.proto = perf\benchmarkapps\Shared\greet.proto
perf\benchmarkapps\Shared\Greeter.cs = perf\benchmarkapps\Shared\Greeter.cs
perf\benchmarkapps\Shared\server.pfx = perf\benchmarkapps\Shared\server.pfx
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("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mailer", "examples\Clients\Mailer\Mailer.csproj", "{20B3B4DC-0BF1-406B-83EC-D105B6FA846A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Certs", "Certs", "{39320CA8-D8F0-45B6-B704-A04C16870226}"
ProjectSection(SolutionItems) = preProject
perf\benchmarkapps\Shared\Certs\ca.crt = perf\benchmarkapps\Shared\Certs\ca.crt
perf\benchmarkapps\Shared\Certs\ca.key = perf\benchmarkapps\Shared\Certs\ca.key
perf\benchmarkapps\Shared\Certs\client.crt = perf\benchmarkapps\Shared\Certs\client.crt
perf\benchmarkapps\Shared\Certs\client.key = perf\benchmarkapps\Shared\Certs\client.key
perf\benchmarkapps\Shared\Certs\Readme.md = perf\benchmarkapps\Shared\Certs\Readme.md
perf\benchmarkapps\Shared\Certs\server.crt = perf\benchmarkapps\Shared\Certs\server.crt
perf\benchmarkapps\Shared\Certs\server.key = perf\benchmarkapps\Shared\Certs\server.key
perf\benchmarkapps\Shared\Certs\server.pfx = perf\benchmarkapps\Shared\Certs\server.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}") = "Reflector", "examples\Clients\Reflector\Reflector.csproj", "{86AD33E9-2C07-45BD-B599-420C2618188D}"
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}") = "Ticketer", "examples\Clients\Ticketer\Ticketer.csproj", "{64CC84DE-C5A1-46B9-9A1B-8CDD730239A9}"
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}") = "Worker", "examples\Clients\Worker\Worker.csproj", "{94F42386-DCB3-4500-87A2-75479957C881}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Certifier", "examples\Clients\Certifier\Certifier.csproj", "{F7A0064A-C648-46BD-A3E8-132D5E08A970}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aggregator", "examples\Clients\Aggregator\Aggregator.csproj", "{BEC5E994-7EE1-4429-B5A6-870B174D8830}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grpc.AspNetCore", "src\Grpc.AspNetCore\Grpc.AspNetCore.csproj", "{F6CA82C9-85C6-4A5F-B892-4DF8A20B1C05}"
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
{F65AE56A-E6C8-467D-A097-3766D51720C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F65AE56A-E6C8-467D-A097-3766D51720C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F65AE56A-E6C8-467D-A097-3766D51720C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F65AE56A-E6C8-467D-A097-3766D51720C0}.Release|Any CPU.Build.0 = Release|Any CPU
{265BE0B1-9002-441B-BA96-5C9E01115840}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{265BE0B1-9002-441B-BA96-5C9E01115840}.Debug|Any CPU.Build.0 = Debug|Any CPU
{265BE0B1-9002-441B-BA96-5C9E01115840}.Release|Any CPU.ActiveCfg = Release|Any CPU
{265BE0B1-9002-441B-BA96-5C9E01115840}.Release|Any CPU.Build.0 = Release|Any CPU
{CD6E11AE-34B2-4054-AD14-A27653131762}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CD6E11AE-34B2-4054-AD14-A27653131762}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CD6E11AE-34B2-4054-AD14-A27653131762}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CD6E11AE-34B2-4054-AD14-A27653131762}.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
{7769DC99-1A21-40CF-933F-E3A47D486659}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7769DC99-1A21-40CF-933F-E3A47D486659}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7769DC99-1A21-40CF-933F-E3A47D486659}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7769DC99-1A21-40CF-933F-E3A47D486659}.Release|Any CPU.Build.0 = Release|Any CPU
{D53BCA42-8B5C-40BA-88B2-01315D710AC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D53BCA42-8B5C-40BA-88B2-01315D710AC2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D53BCA42-8B5C-40BA-88B2-01315D710AC2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D53BCA42-8B5C-40BA-88B2-01315D710AC2}.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
{20B3B4DC-0BF1-406B-83EC-D105B6FA846A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{20B3B4DC-0BF1-406B-83EC-D105B6FA846A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{20B3B4DC-0BF1-406B-83EC-D105B6FA846A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{20B3B4DC-0BF1-406B-83EC-D105B6FA846A}.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
{86AD33E9-2C07-45BD-B599-420C2618188D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{86AD33E9-2C07-45BD-B599-420C2618188D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{86AD33E9-2C07-45BD-B599-420C2618188D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{86AD33E9-2C07-45BD-B599-420C2618188D}.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
{64CC84DE-C5A1-46B9-9A1B-8CDD730239A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{64CC84DE-C5A1-46B9-9A1B-8CDD730239A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{64CC84DE-C5A1-46B9-9A1B-8CDD730239A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{64CC84DE-C5A1-46B9-9A1B-8CDD730239A9}.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
{94F42386-DCB3-4500-87A2-75479957C881}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{94F42386-DCB3-4500-87A2-75479957C881}.Debug|Any CPU.Build.0 = Debug|Any CPU
{94F42386-DCB3-4500-87A2-75479957C881}.Release|Any CPU.ActiveCfg = Release|Any CPU
{94F42386-DCB3-4500-87A2-75479957C881}.Release|Any CPU.Build.0 = Release|Any CPU
{F7A0064A-C648-46BD-A3E8-132D5E08A970}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F7A0064A-C648-46BD-A3E8-132D5E08A970}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F7A0064A-C648-46BD-A3E8-132D5E08A970}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F7A0064A-C648-46BD-A3E8-132D5E08A970}.Release|Any CPU.Build.0 = Release|Any CPU
{BEC5E994-7EE1-4429-B5A6-870B174D8830}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BEC5E994-7EE1-4429-B5A6-870B174D8830}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BEC5E994-7EE1-4429-B5A6-870B174D8830}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BEC5E994-7EE1-4429-B5A6-870B174D8830}.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
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{AC41B2B2-62D9-454E-8521-F71E331B07F3} = {EA330592-E294-4A29-B60E-196AA05831DD}
{F6E0F9D7-64E5-4C7B-A9BC-3C2AD687710B} = {EA330592-E294-4A29-B60E-196AA05831DD}
{A7E09CBD-853F-4C42-B4C4-A1C2CBA10C0B} = {EA330592-E294-4A29-B60E-196AA05831DD}
{409A27EF-A5E9-45C5-9041-7210C6C8FC17} = {EA330592-E294-4A29-B60E-196AA05831DD}
{3E045DF6-62EF-4331-B712-9CF5EC56F04C} = {EA330592-E294-4A29-B60E-196AA05831DD}
{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}
{F65AE56A-E6C8-467D-A097-3766D51720C0} = {F6E0F9D7-64E5-4C7B-A9BC-3C2AD687710B}
{265BE0B1-9002-441B-BA96-5C9E01115840} = {F6E0F9D7-64E5-4C7B-A9BC-3C2AD687710B}
{CD6E11AE-34B2-4054-AD14-A27653131762} = {A7E09CBD-853F-4C42-B4C4-A1C2CBA10C0B}
{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}
{7769DC99-1A21-40CF-933F-E3A47D486659} = {1B8B6117-CE39-4580-BAFA-D8026102767A}
{D53BCA42-8B5C-40BA-88B2-01315D710AC2} = {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}
{20B3B4DC-0BF1-406B-83EC-D105B6FA846A} = {F6E0F9D7-64E5-4C7B-A9BC-3C2AD687710B}
{39320CA8-D8F0-45B6-B704-A04C16870226} = {310E5783-455A-4D09-A7AE-39DC2AB09504}
{55813F20-1269-4B19-B03E-7E4A90148F92} = {8C62055F-8CD7-4859-9001-634D544DF2AE}
{86AD33E9-2C07-45BD-B599-420C2618188D} = {F6E0F9D7-64E5-4C7B-A9BC-3C2AD687710B}
{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}
{64CC84DE-C5A1-46B9-9A1B-8CDD730239A9} = {F6E0F9D7-64E5-4C7B-A9BC-3C2AD687710B}
{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}
{94F42386-DCB3-4500-87A2-75479957C881} = {F6E0F9D7-64E5-4C7B-A9BC-3C2AD687710B}
{F7A0064A-C648-46BD-A3E8-132D5E08A970} = {F6E0F9D7-64E5-4C7B-A9BC-3C2AD687710B}
{BEC5E994-7EE1-4429-B5A6-870B174D8830} = {F6E0F9D7-64E5-4C7B-A9BC-3C2AD687710B}
{F6CA82C9-85C6-4A5F-B892-4DF8A20B1C05} = {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>

24
MAINTAINERS.md Normal file
View File

@ -0,0 +1,24 @@
This page lists all active maintainers of this repository. If you were a
maintainer and would like to add your name to the Emeritus list, please send us a
PR.
See [GOVERNANCE.md](https://github.com/grpc/grpc-community/blob/master/governance.md)
for governance guidelines and how to become a maintainer.
See [CONTRIBUTING.md](https://github.com/grpc/grpc-community/blob/master/CONTRIBUTING.md)
for general contribution guidelines.
## Maintainers (in alphabetical order)
- [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
- [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,32 +1,23 @@
# gRPC for .NET # gRPC for .NET
## Preview out! 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.
A preview of gRPC for ASP.NET Core is on [NuGet](https://www.nuget.org/packages/Grpc.AspNetCore.Server). A template using the preview [shipped with .NET Core 3.0 Preview 3](https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-core-3-0-preview-3/). gRPC functionality for .NET Core 3.0 or later includes:
See https://github.com/grpc/grpc for the official version of gRPC C# (ready for production workloads). * [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.
## The plan For more information, see [An introduction to gRPC on .NET](https://docs.microsoft.com/aspnet/core/grpc/).
We plan to implement a fully-managed version of gRPC for .NET that will be built on top of ASP.NET Core HTTP/2 server. ## gRPC for .NET is now the recommended implementation!
Here are some key features:
- API compatible with the existing gRPC C# implementation (your existing service implementations should work with minimal adjustments)
- Fully interoperable with other gRPC implementations (in other languages and other platforms)
- Good integration with the rest of the ASP.NET Core ecosystem
- High-performance (we plan to utilize some of the cutting edge performance features from ASP.NET Core and in the .NET platform itself)
- We plan to provide a managed .NET Core client as well (possibly with limited feature set at first)
We are committed to delivering the managed server experience Microsoft.AspNetCore.Server functionalities in the ASP.NET Core 3.0 timeframe. We will strive to also deliver the mananged client experience in 3.0. 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.
See [doc/packages.md](doc/packages.md) for the planned package layout for both gRPC C# native (the current official version) and the new fully-managed gRPC for ASP.NET Core. ## To start using gRPC for .NET
Please note that we plan for both implementations (gRPC C# native and fully-managed gRPC for .NET Core) to coexist; there are currently no plans for one implementation to replace the other one. 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).
## To start using gRPC for ASP.NET Core
The best place to start using gRPC for ASP.NET Core is the gRPC template that comes with .NET Core 3.0. Use the template to [create a gRPC service website](https://docs.microsoft.com/en-us/aspnet/core/tutorials/grpc/grpc-start).
Additional documentation and tutorials are available on docs.microsoft.com. Read more at [An introduction to gRPC on ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/grpc/).
For additional examples of using gRPC in .NET refer to https://github.com/grpc/grpc-dotnet/tree/master/examples. For additional examples of using gRPC in .NET refer to https://github.com/grpc/grpc-dotnet/tree/master/examples.
@ -71,14 +62,20 @@ startvs.cmd
To build from the command line: To build from the command line:
``` ```
dotnet build Grpc.DotNet.sln dotnet build Grpc.DotNet.slnx
``` ```
To run tests from the command line: 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 ## To contribute
Contributions are welcome! Contributions are welcome!

16
TROUBLESHOOTING.md Normal file
View File

@ -0,0 +1,16 @@
# Troubleshooting gRPC for .NET
This guide is for troubleshooting gRPC for .NET (grpc-dotnet). For issues specific to Grpc.Core (C-core server and client), or code generation with Grpc.Tools, please refer to [TROUBLESHOOTING.md](https://github.com/grpc/grpc/blob/master/TROUBLESHOOTING.md) in `grpc/grpc` repository.
## Troubleshooting documentation
For solutions for commonly encountered problems, see [gRPC troubleshooting](https://docs.microsoft.com/aspnet/core/grpc/troubleshoot).
## Answers on StackOverflow
Your problem might have already been solved on StackOverflow. Search for questions with "grpc" tag: https://stackoverflow.com/questions/tagged/grpc
## Enabling extra logging and tracing
Extra logging can be very useful for diagnosing problems. For documentation on configuring logging in gRPC services and clients, see
[Logging and diagnostics in gRPC on .NET](https://docs.microsoft.com/aspnet/core/grpc/diagnostics).

View File

@ -1,22 +0,0 @@
<Project>
<PropertyGroup>
<BenchmarkDotNetPackageVersion>0.11.3</BenchmarkDotNetPackageVersion>
<CommandLineParserPackageVersion>2.3.0</CommandLineParserPackageVersion>
<ConfigureAwaitCheckerAnalyzerPackageVersion>3.0.0</ConfigureAwaitCheckerAnalyzerPackageVersion>
<GoogleProtobufPackageVersion>3.8.0</GoogleProtobufPackageVersion>
<GrpcPackageVersion>1.22.0-pre1</GrpcPackageVersion>
<MicrosoftBuildPackageVersion>16.0.461</MicrosoftBuildPackageVersion>
<MicrosoftBuildLocatorPackageVersion>1.2.2</MicrosoftBuildLocatorPackageVersion>
<MicrosoftAspNetCorePackageVersion>3.0.0-preview7.19326.10</MicrosoftAspNetCorePackageVersion>
<MicrosoftExtensionsPackageVersion>2.1.1</MicrosoftExtensionsPackageVersion>
<MicrosoftExtensions30PackageVersion>3.0.0-preview7.19327.1</MicrosoftExtensions30PackageVersion>
<MicrosoftNetCompilersToolsetPackageVersion>3.2.0-beta3-19280-02</MicrosoftNetCompilersToolsetPackageVersion>
<MicrosoftNETTestSdkPackageVersion>16.0.0</MicrosoftNETTestSdkPackageVersion>
<MicrosoftSourceLinkGitHubPackageVersion>1.0.0-beta2-18618-05</MicrosoftSourceLinkGitHubPackageVersion>
<MoqPackageVersion>4.10.0</MoqPackageVersion>
<NewtonsoftJsonPackageVersion>12.0.2</NewtonsoftJsonPackageVersion>
<NunitPackageVersion>3.11.0</NunitPackageVersion>
<Nunit3TestAdapterPackageVersion>3.12.0</Nunit3TestAdapterPackageVersion>
<SystemCommandLineExperimentalPackageVersion>0.2.0-alpha.19272.1</SystemCommandLineExperimentalPackageVersion>
</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 curl -sSL -o $install_script_path $install_script_url
chmod +x $install_script_path 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 $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

@ -1,6 +1,14 @@
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<!-- version of all grpc-dotnet packages -->
<GrpcDotnetVersion>0.1.22-pre2</GrpcDotnetVersion> <!-- package version of grpc-dotnet -->
<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.66.0.0</GrpcDotnetAssemblyFileVersion>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View File

@ -17,6 +17,26 @@ set -ex
source activate.sh source activate.sh
dotnet build echo "Building solution"
dotnet test --no-build dotnet build -c Release
echo "Building examples"
example_solutions=( $( ls examples/**/*.slnx ) )
for example_solution in "${example_solutions[@]}"
do
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
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
if [ "$has_failures" = true ]; then
exit 1
fi

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -0,0 +1,239 @@
# grpc-dotnet and Grpc.Core comparison
This document summarizes the differences between the two available implementations of gRPC in C#.
## Where both implementations are the same
- 100% wire compatible and interoperable with each other and with other gRPC implementations
- same API for invoking and handling RPC calls. Note that the way server and client are configured at the startup is [different](https://docs.microsoft.com/en-us/aspnet/core/grpc/migration?view=aspnetcore-3.0)
- basic functionality (streaming, metadata, deadline, cancellation, ...)
- using same codegen tooling and MSBuild Integration (Grpc.Tools)
## Criteria for choosing between grpc-dotnet and gRPC C#
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.
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 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:
- https://github.com/grpc/grpc/blob/master/doc/service_config.md
- https://github.com/grpc/proposal/blob/master/A2-service-configs-in-dns.md
### Tracing
grpc-dotnet has tracing bindings that come from ASP.NET Core, and it works with OpenTelemetry SDK, OpenCensus support is TBD. See [OpenTelemetry Example](https://github.com/grpc/grpc-dotnet/tree/master/examples#aggregator).
Grpc.Core: currently not supported.
### Interceptors
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 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).
### 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 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. 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: Retries and hedging are fully supported.
Also see:
- https://learn.microsoft.com/aspnet/core/grpc/retries
- https://github.com/grpc/proposal/blob/master/A6-client-retries.md
### Channelz
Grpc.Core: not supported at the moment, but most of functionality is available in C-core through an API, a C# gRPC service needs to be implemented to expose the stats obtained from C-core as a gRPC service (relatively easy)
grpc-dotnet: not supported
https://github.com/grpc/proposal/blob/master/A14-channelz.md
### Binary logging
Grpc.Core: Implemented in C-core, but not exposed in the C# layer.
grpc-dotnet: not implemented
https://github.com/grpc/grpc/blob/master/doc/binary-logging.md
### Compression
Grpc.Core: supported (algorithms: `gzip`, `deflate`)
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.
https://github.com/grpc/grpc/blob/master/doc/compression.md
https://github.com/grpc/grpc/blob/master/doc/compression_cookbook.md
### Fine-grained Transport Control: Connectivity API
Grpc.Core: supported (exposed publicly on Channel), provided by C-Core
grpc-dotnet: Supported on .NET 5 or later
https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md
### Fine-grained Transport Control: Connection Backoff
Grpc.Core: supported, provided by C-core
grpc-dotnet: not supported (HttpClient doesn't support)
https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md
### Fine-grained Transport Control: Keepalive
Grpc.Core: supported, provided by C-core
grpc-dotnet: not supported (HttpClient and Kestrel don't provide support)
https://github.com/grpc/grpc/blob/master/doc/keepalive.md
### Fine-grained Transport Control: RPC Wait-for-ready
Grpc.Core: supported, provided by C-core
grpc-dotnet: Supported on .NET 5 or later
https://github.com/grpc/grpc/blob/master/doc/wait-for-ready.md
### Naming / Resolver API
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: 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
### Port sharing (gRPC and HTTP traffic on the same port)
grpc-dotnet allows port-sharing: serving both gRPC and non-gRPC traffic by the same server (Grpc.Core doesn't support)
## Add-on Features
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
grpc-dotnet: supported via Grpc.Reflection nuget package and Grpc.AspNetCore.Server.Reflection helper.
https://github.com/grpc/grpc/blob/master/doc/server-reflection.md
### Addon: Health checking
Both implementations provide support via the Grpc.HealthCheck nuget package
Note: Slightly orthogonal, but when deployed to kubernetes environment, grpc-dotnet is in slightly better position to respond to native kubernetes health check requests (which come as HTTP1.1 requests) because ASP.NET core can also serve HTTP requests. See for context: https://kubernetes.io/blog/2018/10/01/health-checking-grpc-servers-on-kubernetes/
https://github.com/grpc/grpc/blob/master/doc/health-checking.md
### Addon: Rich error model (status.proto)
Bindings for idiomatic integration of RPC with the "Rich error model" based on the stadard `status.proto`.
Currently not implemented for any of the implementations.
https://cloud.google.com/apis/design/errors#error_model
### Addon: `HttpClientFactory` integration
grpc-dotnet supports integration with `HttpClientFactory` via the Grpc.Net.ClientFactory package. Client factory integration offers:
- Central configuration of gRPC clients.
- Inject clients into your application with .NET dependency injection.
- Reuse of channel instances.
- Automatic propagation of cancellation and deadline when used in a `Grpc.AspNetCore` hosted gRPC service.
### 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

112
doc/planning.md Normal file
View File

@ -0,0 +1,112 @@
# gRPC-dotnet future planning (for ASP.NET Core 5.0)
## Schedule and versioning
The work described here targets the ASP.NET Core 5.0 release which is currently scheduled for November 2020: https://github.com/dotnet/core/blob/master/roadmap.md. The version of the gRPC-dotnet release will follow the rules laid out in https://github.com/grpc/grpc-dotnet/blob/master/doc/versioning.md.
## Runtime
- Linker-friendly gRPC
- As part of positioning .NET as a viable technology for cloud native, we should ensure we are linker-friendly and audit any possible future usage of reflection/ref-emit
- Optimize for working-set memory/published output size
- See https://github.com/rynowak/link-a-thon/blob/master/Findings.md for comparison
- Additional Server
- HttpSysServer
- IIS In-proc
- Introduce additional transports on the server
- Unix-domain sockets
- Named pipes (on Windows)
- [Stretch] QUIC
- Introduce additional transports on the client
- Unix-domain sockets
- Named pipes (on Windows)
- [Stretch] QUIC
- Serializer/de-serializer performance improvements
- https://github.com/protocolbuffers/protobuf/pull/5888
- HTTP/2 performance on the server
- HPACK Static dictionary
- HPACK Dynamic dictionary
- Pooling of HTTP/2 Streams
- [Stretch] Window update tuning
- Ensure code-first gRPC is successful
- Marc Gravell is using protobuf.net to build a code-first gRPC experience on grpc-dotnet. Ensure our abstractions allow him to be successful.
- Ensure WCF to gRPC ebook is successful
- Provide SME guidance where applicable
- Testing existing client libraries on both implementations
- There are APIs and SDKs to share between the implementations
- https://github.com/grpc/grpc-dotnet/blob/master/doc/implementation_comparison.md
- Here is the list of client libraries that grpc-dotnet should work with
- https://github.com/googleapis/google-cloud-dotnet
- there's an add-on library https://github.com/GoogleCloudPlatform/grpc-gcp-csharp that is used to provide some of the functionality (like channel affinity) for some of the APIs.
It would also be useful to help with figuring out a way to make the client libraries not depend on Grpc.Core directly (which is currently the case).
- Load balancing
- Integration with XDS load balancing APIs
- May need Connectivity APIs work in HttpClient
- We should start with supporting round_robin loadbalancing as a first step. The features needed for that are very likely to be needed for XDS loadbalancing as well.
- Connection Features
- Keep alive, without keepalive support it can be difficult to have long-lived streaming call that only rarely sends messages (e.g. "client subscribes for receiving updates from server " scenario)
- Connection idle: https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md
- Wait for ready
- These features are often needed for production ready services
- Support status.proto
- Trailing rich metadata for error details
- Works across different implementation
- For details, see "Richer error model" here: https://grpc.io/docs/guides/error/ and also https://cloud.google.com/apis/design/errors#error_model
example what we've done for e.g. python: https://github.com/grpc/proposal/blob/master/L44-python-rich-status.md
the expectation is that we'll ship this as a separate nuget (e.g. "Grpc.StatusProto")
- Channelz support
- Observability of server status
- gRPC web
## Tooling
- [Stretch] Build a LSP for protobuf
- [Stretch] VS Code extension to consume LSP
- [More Info Needed] Possibly partner with VS Code team here
- [Stretch] VS Extension to consume LSP
- Tooling for working with gRPC services without building a client project
- Integration with HttpREPL or something like WCFTestClient?
- Generating and working with client certificates
- Publishing to AKS
## Ecosystem
- Envoy integration
- [Stretch] Integration with Envoy XDS APIs for client-side load balancing
- Kubernetes/AKS
- [More Info Needed] Helm charts for CLI publish
- Xamarin apps support
## Documentation/Samples
- OAuth E2E
- More AuthN/AuthZ coverage
- gRPC specific features
- Deadlines
- Cancellation
- Distributed Tracing
- OpenCenus/Open Telemetry
- Interceptors
## Intentional cuts/omissions
- gRPC with JSON (as opposed to protobuf)

52
doc/release_process.md Normal file
View File

@ -0,0 +1,52 @@
# Release Process for grpc-dotnet
This document describes the steps to create a new release of grpc-dotnet.
The release process is based on the release process used by the [grpc/grpc](https://github.com/grpc/grpc) repository.
Releases follow the [gRPC-wide release schedule](https://github.com/grpc/grpc/blob/master/doc/grpc_release_schedule.md).
There might be a slight delay if there are release blockers to resolve and/or we need to wait for the Grpc.Core.Api
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 `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`, ...).
This release branch will be used for all subsequent pre-releases and patch releases within the same release cycle.
- 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.
- 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.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.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 and list changes since the previous _stable_ version.
### After the release
On the master branch, increase the version number to indicate start of a new release cycle (v2.25.0-dev become v2.26.0-dev)
## Process for patch releases
- Patch releases are created from an existing release branch by bumping the patch component of the version number
- When bugfixes are merged to a release branch, make sure they are synced into the master branch as well (otherwise the fixes might be missing in the next release cycle)

32
doc/versioning.md Normal file
View File

@ -0,0 +1,32 @@
# gRPC-dotnet package versioning policies
## Overview
This document covers versioning policies of the packages produced in this repo:
- Grpc.AspNetCore
- Grpc.AspNetCore.Server
- Grpc.AspNetCore.Server.ClientFactory
- Grpc.Net.Client
- Grpc.Net.ClientFactory
- Grpc.Net.Common
- dotnet-grpc
## Design considerations
### Major version number
The initial major version number was set to 2 to match the release of corresponding Grpc.Core packages. Going forward, the major version will be incremented when there's a need to ingest a major Grpc.Core or ASP.NET Core dependency for breaking changes. grpc-dotnet complies with the gRPC-wide [versioning policy](https://github.com/grpc/grpc/blob/master/doc/versioning.md) and the major version will only be incremented on rare occasions.
### Minor version number
The initial minor version number was set to 23 to match the release of corresponding Grpc.Core packages. Going forward, we will be releasing on the Grpc.Core [schedule](https://github.com/grpc/grpc/blob/master/doc/grpc_release_schedule.md) and will match the minor version number of the corresponding release.
### Patch version number
The patch number will increment for patches of existing major.minor release. These patches are built out of the v{major}.{minor}.x branches on GitHub, e.g. https://github.com/grpc/grpc-dotnet/tree/v2.23.x.
## Pre-release and nightly suffixes
The suffix -pre{x} will be added to pre-release packages released to nuget.org. These are non-stable packages intended for early ingestion of upcoming releases.
The suffix -dev is added to packages produced by nightly builds available from the NuGet feed https://grpc.jfrog.io/grpc/api/nuget/v3/grpc-nuget-dev.

2
docfx/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
html
obj

31
docfx/README.md Normal file
View File

@ -0,0 +1,31 @@
DocFX-generated C# API Reference
--------------------------------
## Generating docs manually (on Windows)
Install docfx based on instructions here: https://github.com/dotnet/docfx
```
# generate docfx documentation into ./html directory
$ docfx
# view the resulting docs
$ docfx server html
```
## Release process: script for regenerating the docs automatically
After each gRPC C# release, the docs need to be regenerated
and updated on the grpc.io site. The automated script will
re-generate the docs (using dockerized docfx installation)
and make everything ready for creating a PR to update the docs.
```
# 1. Run the script on Linux with docker installed
$ ./generate_reference_docs.sh
# 2. Enter the git repo with updated "gh-pages" branch
$ cd grpc-gh-pages
# 3. Review the changes and create a pull request
```

41
docfx/docfx.json Normal file
View File

@ -0,0 +1,41 @@
{
"metadata": [
{
"src": [
{
"files": [
"docfx/grpc-main-repo/src/csharp/Grpc.Core.Api/Grpc.Core.Api.csproj",
"src/Grpc.AspNetCore/Grpc.AspNetCore.csproj",
"src/Grpc.AspNetCore.Server/Grpc.AspNetCore.Server.csproj",
"src/Grpc.AspNetCore.Server.ClientFactory/Grpc.AspNetCore.Server.ClientFactory.csproj",
"src/Grpc.AspNetCore.Server.Reflection/Grpc.AspNetCore.Server.Reflection.csproj",
"src/Grpc.Net.Client/Grpc.Net.Client.csproj",
"src/Grpc.Net.ClientFactory/Grpc.Net.ClientFactory.csproj",
"src/Grpc.Net.Common/Grpc.Net.Common.csproj"],
"exclude": [ "**/bin/**", "**/obj/**" ],
"cwd": ".."
}
],
"properties": { "TargetFramework": "netcoreapp3.0" },
"dest": "obj/api"
}
],
"build": {
"content": [
{
"files": [ "**/*.yml" ],
"cwd": "obj/api",
"dest": "api"
},
{
"files": [ "toc.yml"]
}
],
"globalMetadata": {
"_appTitle": "gRPC for .NET",
"_enableSearch": true,
"_disableContribution": true
},
"dest": "html"
}
}

View File

@ -0,0 +1,42 @@
#!/bin/sh
# Copyright 2018 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.
# Generates C# API docs using docfx inside docker.
set -ex
cd $(dirname $0)
# cleanup temporary files
rm -rf html obj grpc-gh-pages grpc-main-repo
# clone the grpc/grpc repository to gain access to be able to include Grpc.Core.Api docs
# TODO(jtattermusch): the tag needs to be updated according to the Grpc.Core.Api nuget version used
git clone -b v1.23.0 -o upstream git@github.com:grpc/grpc.git grpc-main-repo
# generate into docfx/html directory by running the "docfx" command using docker
cd ..
docker run --rm -v "$(pwd)":/work -w /work/docfx --user "$(id -u):$(id -g)" -it tsgkadot/docker-docfx:latest docfx --disableGitFeatures
cd docfx
# prepare a clone of "gh-pages" branch where the generated docs are stored
GITHUB_USER="${USER}"
git clone -b gh-pages -o upstream git@github.com:grpc/grpc.git grpc-gh-pages
cd grpc-gh-pages
git remote add origin "git@github.com:${GITHUB_USER}/grpc.git"
# replace old generated docs by the ones we just generated
rm -rf csharp-dotnet
cp -r ../html csharp-dotnet
echo "Done. Go to docfx/grpc-gh-pages git repository and create a pull request to update the generated docs."

3
docfx/toc.yml Normal file
View File

@ -0,0 +1,3 @@
- name: API Documentation
href: obj/api/
homepage: obj/api/Grpc.Core.yml

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

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

View File

@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Protobuf Include="..\Proto\aggregate.proto" GrpcServices="Client" Link="Protos\aggregate.proto"/>
<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" />
<PackageReference Include="Grpc.Net.Client" />
<PackageReference Include="Grpc.Tools" PrivateAssets="All" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,69 @@
#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 Aggregate;
using Count;
using Greet;
using Grpc.Core;
using Grpc.Net.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)
{
var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(3.5));
using var call = client.SayHellos(new HelloRequest { Name = "AggregatorClient" }, cancellationToken: cts.Token);
try
{
await foreach (var message in call.ResponseStream.ReadAllAsync())
{
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

@ -17,9 +17,9 @@ syntax = "proto3";
import "count.proto"; import "count.proto";
import "greet.proto"; import "greet.proto";
package Aggregate; package aggregate;
service Aggregator { service Aggregator {
rpc AccumulateCount (stream Count.CounterRequest) returns (Count.CounterReply) {} rpc AccumulateCount (stream count.CounterRequest) returns (count.CounterReply);
rpc SayHellos (Greet.HelloRequest) returns (stream Greet.HelloReply) {} rpc SayHellos (greet.HelloRequest) returns (stream greet.HelloReply);
} }

View File

@ -15,14 +15,15 @@
syntax = "proto3"; syntax = "proto3";
import "google/protobuf/empty.proto"; import "google/protobuf/empty.proto";
package Count;
package count;
// The counter service definition. // The counter service definition.
service Counter { service Counter {
// Get current count // Get current count
rpc IncrementCount (google.protobuf.Empty) returns (CounterReply) {} rpc IncrementCount (google.protobuf.Empty) returns (CounterReply);
// Increment count through multiple counts // Increment count through multiple counts
rpc AccumulateCount (stream CounterRequest) returns (CounterReply) {} rpc AccumulateCount (stream CounterRequest) returns (CounterReply);
} }
// The request message containing the count to increment by // The request message containing the count to increment by

View File

@ -14,13 +14,13 @@
syntax = "proto3"; syntax = "proto3";
package Greet; package greet;
// The greeting service definition. // The greeting service definition.
service Greeter { service Greeter {
// Sends a greeting // Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {} rpc SayHello (HelloRequest) returns (HelloReply);
rpc SayHellos (HelloRequest) returns (stream HelloReply) {} rpc SayHellos (HelloRequest) returns (stream HelloReply);
} }
// The request message containing the user's name. // The request message containing the user's name.

View File

@ -16,7 +16,7 @@
#endregion #endregion
namespace GRPCServer namespace Server
{ {
public class IncrementingCounter public class IncrementingCounter
{ {

View File

@ -0,0 +1,74 @@
#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 Count;
using Greet;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
using Server;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc();
builder.Services.AddSingleton<IncrementingCounter>();
if (bool.TryParse(builder.Configuration["EnableOpenTelemetry"], out var enableOpenTelemetry) && enableOpenTelemetry)
{
builder.Services.AddOpenTelemetry()
.WithTracing(tracing =>
{
tracing.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("aggregator"));
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

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

View File

@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Protobuf Include="..\Proto\aggregate.proto" GrpcServices="Server" Link="Protos\aggregate.proto" />
<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" />
<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,4 +1,4 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2019 The gRPC Authors // Copyright 2019 The gRPC Authors
// //
@ -16,14 +16,13 @@
#endregion #endregion
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Aggregate; using Aggregate;
using Count; using Count;
using Greet; using Greet;
using Grpc.Core; using Grpc.Core;
namespace GRPCServer namespace Server
{ {
public class AggregatorService : Aggregator.AggregatorBase public class AggregatorService : Aggregator.AggregatorBase
{ {
@ -43,9 +42,9 @@ namespace GRPCServer
// Forward the call on to the counter service // Forward the call on to the counter service
using (var call = _counterClient.AccumulateCount()) using (var call = _counterClient.AccumulateCount())
{ {
while (await requestStream.MoveNext(CancellationToken.None)) await foreach (var message in requestStream.ReadAllAsync())
{ {
await call.RequestStream.WriteAsync(requestStream.Current); await call.RequestStream.WriteAsync(message);
} }
await call.RequestStream.CompleteAsync(); await call.RequestStream.CompleteAsync();
@ -58,9 +57,9 @@ namespace GRPCServer
// Forward the call on to the greeter service // Forward the call on to the greeter service
using (var call = _greeterClient.SayHellos(request)) using (var call = _greeterClient.SayHellos(request))
{ {
while (await call.ResponseStream.MoveNext(CancellationToken.None)) await foreach (var message in call.ResponseStream.ReadAllAsync())
{ {
await responseStream.WriteAsync(call.ResponseStream.Current); await responseStream.WriteAsync(message);
} }
} }
} }

View File

@ -1,4 +1,4 @@
#region Copyright notice and license #region Copyright notice and license
// Copyright 2019 The gRPC Authors // Copyright 2019 The gRPC Authors
// //
@ -16,15 +16,13 @@
#endregion #endregion
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Count; using Count;
using FunctionalTestsWebsite.Infrastructure;
using Google.Protobuf.WellKnownTypes; using Google.Protobuf.WellKnownTypes;
using Grpc.Core; using Grpc.Core;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace FunctionalTestsWebsite.Services namespace Server
{ {
public class CounterService : Counter.CounterBase public class CounterService : Counter.CounterBase
{ {
@ -41,16 +39,17 @@ namespace FunctionalTestsWebsite.Services
{ {
_logger.LogInformation("Incrementing count by 1"); _logger.LogInformation("Incrementing count by 1");
_counter.Increment(1); _counter.Increment(1);
return Task.FromResult(new CounterReply { Count = _counter.Count }); return Task.FromResult(new CounterReply { Count = _counter.Count });
} }
public override async Task<CounterReply> AccumulateCount(IAsyncStreamReader<CounterRequest> requestStream, ServerCallContext context) public override async Task<CounterReply> AccumulateCount(IAsyncStreamReader<CounterRequest> requestStream, ServerCallContext context)
{ {
while (await requestStream.MoveNext(CancellationToken.None)) await foreach (var message in requestStream.ReadAllAsync())
{ {
_logger.LogInformation($"Incrementing count by {requestStream.Current.Count}"); _logger.LogInformation($"Incrementing count by {message.Count}");
_counter.Increment(requestStream.Current.Count); _counter.Increment(message.Count);
} }
return new CounterReply { Count = _counter.Count }; return new CounterReply { Count = _counter.Count };

View File

@ -0,0 +1,55 @@
#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 Greet;
using Grpc.Core;
using Microsoft.Extensions.Logging;
namespace Server
{
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger _logger;
public GreeterService(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<GreeterService>();
}
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
_logger.LogInformation($"Sending hello to {request.Name}");
return Task.FromResult(new HelloReply { Message = "Hello " + request.Name });
}
public override async Task SayHellos(HelloRequest request, IServerStreamWriter<HelloReply> responseStream, ServerCallContext context)
{
var i = 0;
while (!context.CancellationToken.IsCancellationRequested)
{
var message = $"How are you {request.Name}? {++i}";
_logger.LogInformation($"Sending greeting {message}.");
await responseStream.WriteAsync(new HelloReply { Message = message });
await Task.Delay(1000);
}
}
}
}

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,4 @@
<Solution>
<Project Path="Client/Client.csproj" />
<Project Path="Server/Server.csproj" />
</Solution>

View File

@ -0,0 +1,10 @@
<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>

View File

@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" PrivateAssets="all" />
<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" />
</ItemGroup>
</Project>

View File

@ -17,20 +17,20 @@
#endregion #endregion
using System; using System;
using System.Diagnostics; using Google.Protobuf.WellKnownTypes;
using Grpc.AspNetCore.Server.Model;
namespace FunctionalTestsWebsite.Infrastructure namespace Weather
{ {
public class DynamicServiceModelProvider : IServiceMethodProvider<DynamicService> // Properties for the underlying data are generated from the .proto file
// This partial class just adds some extra convenience properties
internal partial class WeatherForecast
{ {
public Action<ServiceMethodProviderContext<DynamicService>>? CreateMethod { get; set; } public DateTime DateTime
public void OnServiceMethodDiscovery(ServiceMethodProviderContext<DynamicService> context)
{ {
Debug.Assert(CreateMethod != null); get => Date.ToDateTime();
set { Date = Timestamp.FromDateTime(value.ToUniversalTime()); }
CreateMethod(context);
} }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
} }
} }

View File

@ -0,0 +1,49 @@
@page "/counter"
@inject GrpcChannel Channel
@using Grpc.Core
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount" disabled="@(cts != null)">Start</button>
<button class="btn btn-primary" @onclick="StopCount" disabled="@(cts == null)">Stop</button>
<div>
<img src="/grpc-logo.png" alt="gRPC logo" />
<p>
Incrementing count streamed from a gRPC service.
</p>
</div>
@code {
private int currentCount = 0;
private CancellationTokenSource? cts;
private async Task IncrementCount()
{
cts = new CancellationTokenSource();
var client = new Count.Counter.CounterClient(Channel);
using var call = client.StartCounter(new CounterRequest() { Start = currentCount }, cancellationToken: cts.Token);
try
{
await foreach (var message in call.ResponseStream.ReadAllAsync())
{
currentCount = message.Count;
StateHasChanged();
}
}
catch (RpcException ex) when (ex.StatusCode == StatusCode.Cancelled)
{
// Ignore exception from cancellation
}
}
private void StopCount()
{
cts?.Cancel();
cts = null;
}
}

View File

@ -0,0 +1,53 @@
@page "/fetchdata"
@inject GrpcChannel Channel
@using Google.Protobuf.WellKnownTypes
<h1>Weather forecast</h1>
<p>This component demonstrates fetching data from the server.</p>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Temp. (C)</th>
<th>Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.DateTime.ToShortDateString()</td>
<td>@forecast.TemperatureC</td>
<td>@forecast.TemperatureF</td>
<td>@forecast.Summary</td>
</tr>
}
</tbody>
</table>
}
<div>
<img src="/grpc-logo.png" alt="gRPC logo" />
<p>
Data fetched from a gRPC service.
</p>
</div>
@code {
private IList<WeatherForecast>? forecasts;
protected override async Task OnInitializedAsync()
{
var client = new WeatherForecasts.WeatherForecastsClient(Channel);
forecasts = (await client.GetWeatherForecastsAsync(new Empty())).Forecasts;
}
}

View File

@ -0,0 +1,7 @@
@page "/"
<h1>Hello, world!</h1>
Welcome to your new app.
<SurveyPrompt Title="How is Blazor working for you?" />

View File

@ -0,0 +1,62 @@
#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.Net.Http;
using System.Threading.Tasks;
using Grpc.Net.Client;
using Grpc.Net.Client.Web;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace Client
{
public class Program
{
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.Services.AddSingleton(services =>
{
// 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 httpHandler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler());
return GrpcChannel.ForAddress(backendUrl, new GrpcChannelOptions { HttpHandler = httpHandler });
});
await builder.Build().RunAsync();
}
}
}

View File

@ -0,0 +1,15 @@
@inherits LayoutComponentBase
<div class="sidebar">
<NavMenu />
</div>
<div class="main">
<div class="top-row px-4">
<a href="http://blazor.net" target="_blank" class="ml-md-auto">About</a>
</div>
<div class="content px-4">
@Body
</div>
</div>

View File

@ -0,0 +1,37 @@
<div class="top-row pl-4 navbar navbar-dark">
<a class="navbar-brand" href="">gRPC-Web in Blazor</a>
<button class="navbar-toggler" @onclick="ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
<ul class="nav flex-column">
<li class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
<span class="oi oi-home" aria-hidden="true"></span> Home
</NavLink>
</li>
<li class="nav-item px-3">
<NavLink class="nav-link" href="counter">
<span class="oi oi-plus" aria-hidden="true"></span> Counter
</NavLink>
</li>
<li class="nav-item px-3">
<NavLink class="nav-link" href="fetchdata">
<span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
</NavLink>
</li>
</ul>
</div>
@code {
private bool collapseNavMenu = true;
private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null;
private void ToggleNavMenu()
{
collapseNavMenu = !collapseNavMenu;
}
}

View File

@ -0,0 +1,16 @@
<div class="alert alert-secondary mt-4" role="alert">
<span class="oi oi-pencil mr-2" aria-hidden="true"></span>
<strong>@Title</strong>
<span class="text-nowrap">
Please take our
<a target="_blank" class="font-weight-bold" href="https://go.microsoft.com/fwlink/?linkid=2109206">brief survey</a>
</span>
and tell us what you think.
</div>
@code {
// Demonstrates how a parent component can supply parameters
[Parameter]
public string? Title { get; set; }
}

View File

@ -0,0 +1,11 @@
@using System.Net.Http
@using System.Threading
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.JSInterop
@using Client
@using Client.Shared
@using Count
@using Grpc.Net.Client
@using Weather

View File

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,86 @@
SIL OPEN FONT LICENSE Version 1.1
Copyright (c) 2014 Waybury
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View File

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2014 Waybury
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@ -0,0 +1,114 @@
[Open Iconic v1.1.1](http://useiconic.com/open)
===========
### Open Iconic is the open source sibling of [Iconic](http://useiconic.com). It is a hyper-legible collection of 223 icons with a tiny footprint&mdash;ready to use with Bootstrap and Foundation. [View the collection](http://useiconic.com/open#icons)
## What's in Open Iconic?
* 223 icons designed to be legible down to 8 pixels
* Super-light SVG files - 61.8 for the entire set
* SVG sprite&mdash;the modern replacement for icon fonts
* Webfont (EOT, OTF, SVG, TTF, WOFF), PNG and WebP formats
* Webfont stylesheets (including versions for Bootstrap and Foundation) in CSS, LESS, SCSS and Stylus formats
* PNG and WebP raster images in 8px, 16px, 24px, 32px, 48px and 64px.
## Getting Started
#### For code samples and everything else you need to get started with Open Iconic, check out our [Icons](http://useiconic.com/open#icons) and [Reference](http://useiconic.com/open#reference) sections.
### General Usage
#### Using Open Iconic's SVGs
We like SVGs and we think they're the way to display icons on the web. Since Open Iconic are just basic SVGs, we suggest you display them like you would any other image (don't forget the `alt` attribute).
```
<img src="/open-iconic/svg/icon-name.svg" alt="icon name">
```
#### Using Open Iconic's SVG Sprite
Open Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack.
Adding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `<svg>` *tag and a unique class name for each different icon in the* `<use>` *tag.*
```
<svg class="icon">
<use xlink:href="open-iconic.svg#account-login" class="icon-account-login"></use>
</svg>
```
Sizing icons only needs basic CSS. All the icons are in a square format, so just set the `<svg>` tag with equal width and height dimensions.
```
.icon {
width: 16px;
height: 16px;
}
```
Coloring icons is even easier. All you need to do is set the `fill` rule on the `<use>` tag.
```
.icon-account-login {
fill: #f00;
}
```
To learn more about SVG Sprites, read [Chris Coyier's guide](http://css-tricks.com/svg-sprites-use-better-icon-fonts/).
#### Using Open Iconic's Icon Font...
##### …with Bootstrap
You can find our Bootstrap stylesheets in `font/css/open-iconic-bootstrap.{css, less, scss, styl}`
```
<link href="/open-iconic/font/css/open-iconic-bootstrap.css" rel="stylesheet">
```
```
<span class="oi oi-icon-name" title="icon name" aria-hidden="true"></span>
```
##### …with Foundation
You can find our Foundation stylesheets in `font/css/open-iconic-foundation.{css, less, scss, styl}`
```
<link href="/open-iconic/font/css/open-iconic-foundation.css" rel="stylesheet">
```
```
<span class="fi-icon-name" title="icon name" aria-hidden="true"></span>
```
##### …on its own
You can find our default stylesheets in `font/css/open-iconic.{css, less, scss, styl}`
```
<link href="/open-iconic/font/css/open-iconic.css" rel="stylesheet">
```
```
<span class="oi" data-glyph="icon-name" title="icon name" aria-hidden="true"></span>
```
## License
### Icons
All code (including SVG markup) is under the [MIT License](http://opensource.org/licenses/MIT).
### Fonts
All fonts are under the [SIL Licensed](http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web).

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,543 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2014-7-1: Created.
-->
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
Created by FontForge 20120731 at Tue Jul 1 20:39:22 2014
By P.J. Onori
Created by P.J. Onori with FontForge 2.0 (http://fontforge.sf.net)
</metadata>
<defs>
<font id="open-iconic" horiz-adv-x="800" >
<font-face
font-family="Icons"
font-weight="400"
font-stretch="normal"
units-per-em="800"
panose-1="2 0 5 3 0 0 0 0 0 0"
ascent="800"
descent="0"
bbox="-0.5 -101 802 800.126"
underline-thickness="50"
underline-position="-100"
unicode-range="U+E000-E0DE"
/>
<missing-glyph />
<glyph glyph-name="" unicode="&#xe000;"
d="M300 700h500v-700h-500v100h400v500h-400v100zM400 500l200 -150l-200 -150v100h-400v100h400v100z" />
<glyph glyph-name="1" unicode="&#xe001;"
d="M300 700h500v-700h-500v100h400v500h-400v100zM200 500v-100h400v-100h-400v-100l-200 150z" />
<glyph glyph-name="2" unicode="&#xe002;"
d="M350 700c193 0 350 -157 350 -350v-50h100l-200 -200l-200 200h100v50c0 138 -112 250 -250 250s-250 -112 -250 -250c0 193 157 350 350 350z" />
<glyph glyph-name="3" unicode="&#xe003;"
d="M450 700c193 0 350 -157 350 -350c0 138 -112 250 -250 250s-250 -112 -250 -250v-50h100l-200 -200l-200 200h100v50c0 193 157 350 350 350z" />
<glyph glyph-name="4" unicode="&#xe004;"
d="M0 700h800v-100h-800v100zM100 500h600v-100h-600v100zM0 300h800v-100h-800v100zM100 100h600v-100h-600v100z" />
<glyph glyph-name="5" unicode="&#xe005;"
d="M0 700h800v-100h-800v100zM0 500h600v-100h-600v100zM0 300h800v-100h-800v100zM0 100h600v-100h-600v100z" />
<glyph glyph-name="6" unicode="&#xe006;"
d="M0 700h800v-100h-800v100zM200 500h600v-100h-600v100zM0 300h800v-100h-800v100zM200 100h600v-100h-600v100z" />
<glyph glyph-name="7" unicode="&#xe007;"
d="M400 700c75 0 146 -23 206 -59l-75 -225l-322 234c57 31 122 50 191 50zM125 588l191 -138l-310 -222c-4 24 -6 47 -6 72c0 114 49 215 125 288zM688 575c69 -72 112 -168 112 -275c0 -35 -8 -68 -16 -100h-218zM216 253l112 -347c-128 23 -232 109 -287 222zM372 100
h372c-64 -109 -177 -185 -310 -197z" />
<glyph glyph-name="8" unicode="&#xe008;" horiz-adv-x="600"
d="M200 800h100v-500h200l-247 -300l-253 300h200v500z" />
<glyph glyph-name="9" unicode="&#xe009;"
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM300 700v-300h-200l300 -300l300 300h-200v300h-200z" />
<glyph glyph-name="a" unicode="&#xe00a;"
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM400 700l-300 -300l300 -300v200h300v200h-300v200z" />
<glyph glyph-name="b" unicode="&#xe00b;"
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM400 700v-200h-300v-200h300v-200l300 300z" />
<glyph glyph-name="c" unicode="&#xe00c;"
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM400 700l-300 -300h200v-300h200v300h200z" />
<glyph glyph-name="d" unicode="&#xe00d;"
d="M300 600v-200h500v-100h-500v-200l-300 247z" />
<glyph glyph-name="e" unicode="&#xe00e;"
d="M500 600l300 -247l-300 -253v200h-500v100h500v200z" />
<glyph glyph-name="f" unicode="&#xe00f;" horiz-adv-x="600"
d="M200 800h200v-500h200l-297 -300l-303 300h200v500z" />
<glyph glyph-name="10" unicode="&#xe010;"
d="M300 700v-200h500v-200h-500v-200l-300 297z" />
<glyph glyph-name="11" unicode="&#xe011;"
d="M500 700l300 -297l-300 -303v200h-500v200h500v200z" />
<glyph glyph-name="12" unicode="&#xe012;" horiz-adv-x="600"
d="M297 800l303 -300h-200v-500h-200v500h-200z" />
<glyph glyph-name="13" unicode="&#xe013;" horiz-adv-x="600"
d="M247 800l253 -300h-200v-500h-100v500h-200z" />
<glyph glyph-name="14" unicode="&#xe014;"
d="M400 800h100v-800h-100v800zM200 700h100v-600h-100v600zM600 600h100v-400h-100v400zM0 500h100v-200h-100v200z" />
<glyph glyph-name="15" unicode="&#xe015;"
d="M116 600l72 -72c-54 -54 -88 -126 -88 -209s34 -159 88 -213l-72 -72c-72 72 -116 175 -116 285s44 209 116 281zM684 600c72 -72 116 -171 116 -281s-44 -213 -116 -285l-72 72c54 54 88 130 88 213s-34 155 -88 209zM259 460l69 -72c-18 -18 -28 -41 -28 -69
s10 -54 28 -72l-69 -72c-36 36 -59 89 -59 144s23 105 59 141zM541 459c36 -36 59 -85 59 -140s-23 -108 -59 -144l-69 72c18 18 28 44 28 72s-10 51 -28 69z" />
<glyph glyph-name="16" unicode="&#xe016;" horiz-adv-x="400"
d="M200 800c110 0 200 -90 200 -200s-90 -200 -200 -200s-200 90 -200 200s90 200 200 200zM100 319c31 -11 65 -19 100 -19s68 8 100 19v-319l-100 100l-100 -100v319z" />
<glyph glyph-name="17" unicode="&#xe017;"
d="M400 800c220 0 400 -180 400 -400s-180 -400 -400 -400s-400 180 -400 400s180 400 400 400zM400 700c-166 0 -300 -134 -300 -300c0 -66 21 -126 56 -175l419 419c-49 35 -109 56 -175 56zM644 575l-419 -419c49 -35 109 -56 175 -56c166 0 300 134 300 300
c0 66 -21 126 -56 175z" />
<glyph glyph-name="18" unicode="&#xe018;"
d="M0 700h100v-600h700v-100h-800v700zM500 700h200v-500h-200v500zM200 500h200v-300h-200v300z" />
<glyph glyph-name="19" unicode="&#xe019;"
d="M397 800c13 1 23 -4 34 -13c2 -2 214 -254 241 -287h128v-100h-100v-366c0 -18 -16 -34 -34 -34h-532c-18 0 -34 16 -34 34v366h-100v100h128l234 281c9 11 22 18 35 19zM400 672l-144 -172h288zM250 300c-28 0 -50 -22 -50 -50v-100c0 -28 22 -50 50 -50s50 22 50 50
v100c0 28 -22 50 -50 50zM550 300c-28 0 -50 -22 -50 -50v-100c0 -28 22 -50 50 -50s50 22 50 50v100c0 28 -22 50 -50 50z" />
<glyph glyph-name="1a" unicode="&#xe01a;"
d="M9 700h682c6 0 9 -4 9 -10v-190h100v-200h-100v-191c0 -6 -3 -9 -9 -9h-682c-6 0 -9 3 -9 9v582c0 6 3 9 9 9zM100 600v-400h500v400h-500z" />
<glyph glyph-name="1b" unicode="&#xe01b;"
d="M9 700h682c6 0 9 -4 9 -10v-190h100v-200h-100v-191c0 -6 -3 -9 -9 -9h-682c-6 0 -9 3 -9 9v582c0 6 3 9 9 9z" />
<glyph glyph-name="1c" unicode="&#xe01c;"
d="M92 650c0 23 19 50 45 50h3h5h5h500c28 0 50 -22 50 -50s-22 -50 -50 -50h-50v-141c9 -17 120 -231 166 -309c16 -26 34 -61 34 -106c0 -39 -15 -77 -41 -103h-3c-26 -25 -62 -41 -100 -41h-512c-39 0 -77 15 -103 41s-41 64 -41 103c0 46 18 80 34 106
c46 78 157 292 166 309v141h-50c-2 0 -6 -1 -8 -1c-28 0 -50 23 -50 51zM500 600h-200v-162l-6 -10s-63 -123 -119 -228h450c-56 105 -119 228 -119 228l-6 10v162z" />
<glyph glyph-name="1d" unicode="&#xe01d;"
d="M400 800c110 0 200 -90 200 -200c0 -104 52 -198 134 -266c41 -34 66 -82 66 -134h-800c0 52 25 100 66 134c82 68 134 162 134 266c0 110 90 200 200 200zM300 100h200c0 -55 -45 -100 -100 -100s-100 45 -100 100z" />
<glyph glyph-name="1e" unicode="&#xe01e;" horiz-adv-x="600"
d="M150 800h50l350 -250l-225 -147l225 -153l-350 -250h-50v250l-75 -75l-75 75l150 150l-150 150l75 75l75 -75v250zM250 650v-200l150 100zM250 350v-200l150 100z" />
<glyph glyph-name="1f" unicode="&#xe01f;"
d="M0 800h500c110 0 200 -90 200 -200c0 -47 -17 -91 -44 -125c85 -40 144 -125 144 -225c0 -138 -112 -250 -250 -250h-550v100c55 0 100 45 100 100v400c0 55 -45 100 -100 100v100zM300 700v-200h100c55 0 100 45 100 100s-45 100 -100 100h-100zM300 400v-300h150
c83 0 150 67 150 150s-67 150 -150 150h-150z" />
<glyph glyph-name="20" unicode="&#xe020;" horiz-adv-x="600"
d="M300 800v-300h200l-300 -500v300h-200z" />
<glyph glyph-name="21" unicode="&#xe021;"
d="M100 800h300v-300l100 100l100 -100v300h50c28 0 50 -22 50 -50v-550h-550c-28 0 -50 -22 -50 -50s22 -50 50 -50h550v-100h-550c-83 0 -150 67 -150 150v550l3 19c8 39 39 70 78 78z" />
<glyph glyph-name="22" unicode="&#xe022;" horiz-adv-x="400"
d="M0 800h400v-800l-200 200l-200 -200v800z" />
<glyph glyph-name="23" unicode="&#xe023;"
d="M0 800h800v-100h-800v100zM0 600h300v-103h203v103h297v-591c0 -6 -3 -9 -9 -9h-782c-6 0 -9 3 -9 9v591z" />
<glyph glyph-name="24" unicode="&#xe024;"
d="M300 800h200c55 0 100 -45 100 -100v-100h191c6 0 9 -3 9 -9v-241c0 -28 -22 -50 -50 -50h-700c-28 0 -50 22 -50 50v241c0 6 3 9 9 9h191v100c0 55 45 100 100 100zM300 700v-100h200v100h-200zM0 209c16 -6 32 -9 50 -9h700c18 0 34 3 50 9v-200c0 -6 -3 -9 -9 -9h-782
c-6 0 -9 3 -9 9v200z" />
<glyph glyph-name="25" unicode="&#xe025;" horiz-adv-x="600"
d="M300 800c58 0 110 -16 147 -53s53 -89 53 -147h-100c0 39 -11 61 -25 75s-36 25 -75 25c-35 0 -55 -10 -72 -31s-28 -55 -28 -94c0 -51 20 -107 28 -175h172v-100h-178c-14 -60 -49 -127 -113 -200h491v-100h-600v122l16 12c69 69 95 121 106 166h-122v100h125
c-8 50 -25 106 -25 175c0 58 16 114 50 156c34 43 88 69 150 69z" />
<glyph glyph-name="26" unicode="&#xe026;"
d="M34 700h4h3h4h5h700c28 0 50 -22 50 -50v-700c0 -28 -22 -50 -50 -50h-700c-28 0 -50 22 -50 50v700v2c0 20 15 42 34 48zM150 600c-28 0 -50 -22 -50 -50s22 -50 50 -50s50 22 50 50s-22 50 -50 50zM350 600c-28 0 -50 -22 -50 -50s22 -50 50 -50h300c28 0 50 22 50 50
s-22 50 -50 50h-300zM100 400v-400h600v400h-600z" />
<glyph glyph-name="27" unicode="&#xe027;"
d="M744 797l6 -3l44 -44c4 -4 3 -8 0 -12l-266 -375l-15 -13l-25 -12c-23 72 -78 127 -150 150l12 25l13 15l375 266zM266 400c74 0 134 -60 134 -134c0 -147 -119 -266 -266 -266c-48 0 -95 12 -134 34c80 46 134 133 134 232c0 74 58 134 132 134z" />
<glyph glyph-name="28" unicode="&#xe028;"
d="M9 451c0 23 19 50 46 50c8 0 19 -3 26 -7l131 -66l29 22c-79 81 -1 250 118 250s197 -167 119 -250l28 -22l131 66c6 4 12 7 21 7c28 0 50 -22 50 -50c0 -17 -12 -37 -27 -45l-115 -56c9 -16 19 -33 25 -50h68c28 0 50 -22 50 -50s-22 -50 -50 -50h-50
c0 -23 -2 -45 -6 -66l78 -40c21 -5 37 -28 37 -49c0 -28 -22 -50 -50 -50c-10 0 -23 5 -31 11l-65 35c-24 -46 -62 -86 -103 -110c-35 19 -60 45 -60 72v135v4v5v6v5v5v87c0 28 -22 50 -50 50c-24 0 -45 -17 -50 -40c1 -3 1 -8 1 -11s0 -8 -1 -11v-82v-4v-5v-144
c0 -28 -24 -53 -59 -72c-41 25 -79 64 -103 110l-66 -35c-8 -6 -21 -11 -31 -11c-28 0 -50 22 -50 50c0 21 16 44 37 49l78 40c-4 21 -6 43 -6 66h-50h-5c-28 0 -50 22 -50 50c0 26 22 50 50 50h5h69c6 17 16 34 25 50l-116 56c-16 7 -28 27 -28 45z" />
<glyph glyph-name="29" unicode="&#xe029;"
d="M600 700h91c6 0 9 -3 9 -9v-582c0 -6 -3 -9 -9 -9h-91v600zM210 503l290 147v-500l-250 125v-3c-15 0 -25 -8 -28 -22l75 -178c11 -25 0 -58 -25 -69s-58 0 -69 25l-103 272h-91c-6 0 -9 3 -9 9v182c0 6 3 9 9 9h182z" />
<glyph glyph-name="2a" unicode="&#xe02a;"
d="M9 800h682c6 0 9 -3 9 -9v-782c0 -6 -3 -9 -9 -9h-682c-6 0 -9 3 -9 9v782c0 6 3 9 9 9zM100 700v-200h500v200h-500zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400v-300h100v300h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100z" />
<glyph glyph-name="2b" unicode="&#xe02b;"
d="M0 800h700v-200h-700v200zM0 500h700v-491c0 -6 -3 -9 -9 -9h-682c-6 0 -9 3 -9 9v491zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100z" />
<glyph glyph-name="2c" unicode="&#xe02c;"
d="M409 800h182c6 0 10 -4 12 -9l94 -182c2 -5 6 -9 12 -9h82c6 0 9 -3 9 -9v-582c0 -6 -3 -9 -9 -9h-782c-6 0 -9 3 -9 9v441c0 83 67 150 150 150h141c6 0 10 4 12 9l94 182c2 5 6 9 12 9zM150 500c-28 0 -50 -22 -50 -50s22 -50 50 -50s50 22 50 50s-22 50 -50 50z
M500 500c-110 0 -200 -90 -200 -200s90 -200 200 -200s200 90 200 200s-90 200 -200 200zM500 400c55 0 100 -45 100 -100s-45 -100 -100 -100s-100 45 -100 100s45 100 100 100z" />
<glyph glyph-name="2d" unicode="&#xe02d;"
d="M0 600h800l-400 -400z" />
<glyph glyph-name="2e" unicode="&#xe02e;" horiz-adv-x="400"
d="M400 800v-800l-400 400z" />
<glyph glyph-name="2f" unicode="&#xe02f;" horiz-adv-x="400"
d="M0 800l400 -400l-400 -400v800z" />
<glyph glyph-name="30" unicode="&#xe030;"
d="M400 600l400 -400h-800z" />
<glyph glyph-name="31" unicode="&#xe031;"
d="M0 550c0 23 20 50 46 50h3h5h4h200c17 0 37 -13 44 -28l38 -72h444c14 0 19 -12 15 -25l-81 -250c-4 -13 -21 -25 -35 -25h-350c-14 0 -30 12 -34 25c-27 83 -54 167 -81 250l-10 25h-150c-2 0 -5 -1 -7 -1c-28 0 -51 23 -51 51zM358 100c28 0 50 -22 50 -50
s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM658 100c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50z" />
<glyph glyph-name="32" unicode="&#xe032;"
d="M0 700h500v-100h-300v-300h-100l-100 -100v500zM300 500h500v-500l-100 100h-400v400z" />
<glyph glyph-name="33" unicode="&#xe033;"
d="M641 700l143 -141l-493 -493c-71 76 -146 148 -219 222l-72 71l141 141c50 -51 101 -101 153 -150c116 117 234 231 347 350z" />
<glyph glyph-name="34" unicode="&#xe034;"
d="M150 600l250 -250l250 250l150 -150l-400 -400l-400 400z" />
<glyph glyph-name="35" unicode="&#xe035;" horiz-adv-x="600"
d="M400 800l150 -150l-250 -250l250 -250l-150 -150l-400 400z" />
<glyph glyph-name="36" unicode="&#xe036;" horiz-adv-x="600"
d="M150 800l400 -400l-400 -400l-150 150l250 250l-250 250z" />
<glyph glyph-name="37" unicode="&#xe037;"
d="M400 600l400 -400l-150 -150l-250 250l-250 -250l-150 150z" />
<glyph glyph-name="38" unicode="&#xe038;"
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM600 622l-250 -250l-100 100l-72 -72l172 -172l322 322z" />
<glyph glyph-name="39" unicode="&#xe039;"
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM250 622l-72 -72l150 -150l-150 -150l72 -72l150 150l150 -150l72 72l-150 150l150 150l-72 72l-150 -150z" />
<glyph glyph-name="3a" unicode="&#xe03a;"
d="M350 800c28 0 50 -22 50 -50v-50h75c14 0 25 -11 25 -25v-75h-300v75c0 14 11 25 25 25h75v50c0 28 22 50 50 50zM25 700h75v-200h500v200h75c14 0 25 -11 25 -25v-650c0 -14 -11 -25 -25 -25h-650c-14 0 -25 11 -25 25v650c0 14 11 25 25 25z" />
<glyph glyph-name="3b" unicode="&#xe03b;"
d="M400 800c220 0 400 -180 400 -400s-180 -400 -400 -400s-400 180 -400 400s180 400 400 400zM400 700c-166 0 -300 -134 -300 -300s134 -300 300 -300s300 134 300 300s-134 300 -300 300zM350 600h100v-181c23 -24 47 -47 72 -69l-72 -72c-27 30 -55 59 -84 88l-16 12
v222z" />
<glyph glyph-name="3c" unicode="&#xe03c;"
d="M450 800c138 0 250 -112 250 -250v-50c58 -21 100 -85 100 -150c0 -18 -3 -34 -9 -50h-191v50c0 83 -67 150 -150 150s-150 -67 -150 -150v-50h-272c-17 30 -28 63 -28 100c0 110 90 200 200 200c23 114 129 200 250 200zM434 400h3h4c3 0 6 1 9 1c28 0 50 -22 50 -50v-1
v-150h150l-200 -200l-200 200h150v150v2c0 20 15 42 34 48z" />
<glyph glyph-name="3d" unicode="&#xe03d;"
d="M450 800c138 0 250 -112 250 -250v-50c58 -21 100 -85 100 -150c0 -18 -3 -34 -9 -50h-141l-200 200l-200 -200h-222c-17 30 -28 63 -28 100c0 110 90 200 200 200c23 114 129 200 250 200zM450 350l250 -250h-200v-50c0 -28 -22 -50 -50 -50s-50 22 -50 50v50h-200z" />
<glyph glyph-name="3e" unicode="&#xe03e;"
d="M450 700c138 0 250 -112 250 -250v-50c58 -21 100 -85 100 -150c0 -83 -67 -150 -150 -150h-450c-110 0 -200 90 -200 200s90 200 200 200c23 114 129 200 250 200z" />
<glyph glyph-name="3f" unicode="&#xe03f;"
d="M250 800c82 0 154 -40 200 -100c-143 0 -270 -85 -325 -209c-36 -10 -70 -25 -100 -47c-16 33 -25 67 -25 106c0 138 112 250 250 250zM450 600c138 0 250 -112 250 -250v-50c58 -21 100 -85 100 -150c0 -83 -67 -150 -150 -150h-450c-110 0 -200 90 -200 200
s90 200 200 200c23 114 129 200 250 200z" />
<glyph glyph-name="40" unicode="&#xe040;"
d="M500 700h100l-300 -600h-100zM100 600h100l-100 -200l100 -200h-100l-100 200zM600 600h100l100 -200l-100 -200h-100l100 200z" />
<glyph glyph-name="41" unicode="&#xe041;"
d="M350 800h100l50 -119l28 -12l119 50l72 -72l-50 -119l12 -28l119 -50v-100l-119 -50l-12 -28l50 -119l-72 -72l-119 50l-28 -12l-50 -119h-100l-50 119l-28 12l-119 -50l-72 72l50 119l-12 28l-119 50v100l119 50l12 28l-50 119l72 72l119 -50l28 12zM400 550
c-83 0 -150 -67 -150 -150s67 -150 150 -150s150 67 150 150s-67 150 -150 150z" />
<glyph glyph-name="42" unicode="&#xe042;"
d="M0 800h800v-200h-800v200zM200 500h400l-200 -200zM0 100h800v-100h-800v100z" />
<glyph glyph-name="43" unicode="&#xe043;"
d="M0 800h100v-800h-100v800zM600 800h200v-800h-200v800zM500 600v-400l-200 200z" />
<glyph glyph-name="44" unicode="&#xe044;"
d="M0 800h200v-800h-200v800zM700 800h100v-800h-100v800zM300 600l200 -200l-200 -200v400z" />
<glyph glyph-name="45" unicode="&#xe045;"
d="M0 800h800v-100h-800v100zM400 500l200 -200h-400zM0 200h800v-200h-800v200z" />
<glyph glyph-name="46" unicode="&#xe046;"
d="M150 700c83 0 150 -67 150 -150v-50h100v50c0 83 67 150 150 150s150 -67 150 -150s-67 -150 -150 -150h-50v-100h50c83 0 150 -67 150 -150s-67 -150 -150 -150s-150 67 -150 150v50h-100v-50c0 -83 -67 -150 -150 -150s-150 67 -150 150s67 150 150 150h50v100h-50
c-83 0 -150 67 -150 150s67 150 150 150zM150 600c-28 0 -50 -22 -50 -50s22 -50 50 -50h50v50c0 28 -22 50 -50 50zM550 600c-28 0 -50 -22 -50 -50v-50h50c28 0 50 22 50 50s-22 50 -50 50zM300 400v-100h100v100h-100zM150 200c-28 0 -50 -22 -50 -50s22 -50 50 -50
s50 22 50 50v50h-50zM500 200v-50c0 -28 22 -50 50 -50s50 22 50 50s-22 50 -50 50h-50z" />
<glyph glyph-name="47" unicode="&#xe047;"
d="M0 791c0 5 4 9 9 9h782c6 0 9 -4 9 -10v-790l-200 200h-591c-6 0 -9 3 -9 9v582z" />
<glyph glyph-name="48" unicode="&#xe048;"
d="M400 800c220 0 400 -180 400 -400s-180 -400 -400 -400s-400 180 -400 400s180 400 400 400zM400 700c-166 0 -300 -134 -300 -300s134 -300 300 -300s300 134 300 300s-134 300 -300 300zM600 600l-100 -300l-300 -100l100 300zM400 450c-28 0 -50 -22 -50 -50
s22 -50 50 -50s50 22 50 50s-22 50 -50 50z" />
<glyph glyph-name="49" unicode="&#xe049;"
d="M400 800c220 0 400 -180 400 -400s-180 -400 -400 -400s-400 180 -400 400s180 400 400 400zM400 700v-600c166 0 300 134 300 300s-134 300 -300 300z" />
<glyph glyph-name="4a" unicode="&#xe04a;"
d="M0 800h800v-100h-800v100zM0 600h500v-100h-500v100zM0 300h800v-100h-800v100zM0 100h600v-100h-600v100zM750 100c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50z" />
<glyph glyph-name="4b" unicode="&#xe04b;"
d="M25 700h750c14 0 25 -11 25 -25v-75h-800v75c0 14 11 25 25 25zM0 500h800v-375c0 -14 -11 -25 -25 -25h-750c-14 0 -25 11 -25 25v375zM100 300v-100h100v100h-100zM300 300v-100h100v100h-100z" />
<glyph glyph-name="4c" unicode="&#xe04c;"
d="M100 800h100v-100h450l100 100l50 -50l-100 -100v-450h100v-100h-100v-100h-100v100h-500v500h-100v100h100v100zM200 600v-350l350 350h-350zM600 550l-350 -350h350v350z" />
<glyph glyph-name="4d" unicode="&#xe04d;"
d="M400 800c220 0 400 -180 400 -400s-180 -400 -400 -400s-400 180 -400 400s180 400 400 400zM400 700c-166 0 -300 -134 -300 -300s134 -300 300 -300s300 134 300 300s-134 300 -300 300zM400 600c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50z
M200 452c0 20 15 42 34 48h3h3h8c12 0 28 -7 36 -16l91 -90l25 6c55 0 100 -45 100 -100s-45 -100 -100 -100s-100 45 -100 100l6 25l-90 91c-9 8 -16 24 -16 36zM550 500c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50z" />
<glyph glyph-name="4e" unicode="&#xe04e;"
d="M300 800h200v-300h200l-300 -300l-300 300h200v300zM0 100h800v-100h-800v100z" />
<glyph glyph-name="4f" unicode="&#xe04f;"
d="M0 800h800v-100h-800v100zM400 600l300 -300h-200v-300h-200v300h-200z" />
<glyph glyph-name="50" unicode="&#xe050;"
d="M200 700h600v-600h-600l-200 300zM350 622l-72 -72l150 -150l-150 -150l72 -72l150 150l150 -150l72 72l-150 150l150 150l-72 72l-150 -150z" />
<glyph glyph-name="51" unicode="&#xe051;"
d="M400 700c220 0 400 -180 400 -400h-100c0 166 -134 300 -300 300s-300 -134 -300 -300h-100c0 220 180 400 400 400zM341 491l59 -88l59 88c81 -25 141 -101 141 -191c0 -110 -90 -200 -200 -200s-200 90 -200 200c0 90 60 166 141 191z" />
<glyph glyph-name="52" unicode="&#xe052;"
d="M0 800h300v-400h400v-400h-700v800zM400 800l300 -300h-300v300zM100 600v-100h100v100h-100zM100 400v-100h100v100h-100zM100 200v-100h400v100h-400z" />
<glyph glyph-name="53" unicode="&#xe053;" horiz-adv-x="600"
d="M200 700h100v-100h75c30 0 58 -6 81 -22s44 -44 44 -78v-100h-100v94c-4 3 -13 6 -25 6h-250c-14 0 -25 -11 -25 -25v-50c0 -15 20 -40 34 -44l257 -65c66 -16 109 -73 109 -141v-50c0 -68 -57 -125 -125 -125h-75v-100h-100v100h-75c-30 0 -58 6 -81 22s-44 44 -44 78
v100h100v-94c4 -3 13 -6 25 -6h250c14 0 25 11 25 25v50c0 15 -20 40 -34 44l-257 65c-66 16 -109 73 -109 141v50c0 68 57 125 125 125h75v100z" />
<glyph glyph-name="54" unicode="&#xe054;"
d="M0 700h300v-300l-300 -300v600zM500 700h300v-300l-300 -300v600z" />
<glyph glyph-name="55" unicode="&#xe055;"
d="M300 700v-600h-300v300zM800 700v-600h-300v300z" />
<glyph glyph-name="56" unicode="&#xe056;"
d="M300 700v-100c-111 0 -200 -89 -200 -200h200v-300h-300v300c0 165 135 300 300 300zM800 700v-100c-111 0 -200 -89 -200 -200h200v-300h-300v300c0 165 135 300 300 300z" />
<glyph glyph-name="57" unicode="&#xe057;"
d="M0 700h300v-300c0 -165 -135 -300 -300 -300v100c111 0 200 89 200 200h-200v300zM500 700h300v-300c0 -165 -135 -300 -300 -300v100c111 0 200 89 200 200h-200v300z" />
<glyph glyph-name="58" unicode="&#xe058;" horiz-adv-x="600"
d="M300 800l34 -34c11 -11 266 -270 266 -488c0 -165 -135 -300 -300 -300s-300 135 -300 300c0 218 255 477 266 488zM150 328c-28 0 -50 -22 -50 -50c0 -110 90 -200 200 -200c28 0 50 22 50 50s-22 50 -50 50c-55 0 -100 45 -100 100c0 28 -22 50 -50 50z" />
<glyph glyph-name="59" unicode="&#xe059;"
d="M400 800l400 -500h-800zM0 200h800v-200h-800v200z" />
<glyph glyph-name="5a" unicode="&#xe05a;" horiz-adv-x="600"
d="M300 800l300 -300h-600zM0 300h600l-300 -300z" />
<glyph glyph-name="5b" unicode="&#xe05b;"
d="M0 500h200v-200h-200v200zM300 500h200v-200h-200v200zM600 500h200v-200h-200v200z" />
<glyph glyph-name="5c" unicode="&#xe05c;"
d="M0 700h800v-100l-400 -200l-400 200v100zM0 500l400 -200l400 200v-400h-800v400z" />
<glyph glyph-name="5d" unicode="&#xe05d;"
d="M400 800l400 -200v-600h-800v600zM400 688l-300 -150v-188l300 -150l300 150v188zM200 500h400v-100l-200 -100l-200 100v100z" />
<glyph glyph-name="5e" unicode="&#xe05e;"
d="M600 700c69 0 134 -19 191 -50l-16 -106c-49 35 -109 56 -175 56c-131 0 -240 -84 -281 -200h331l-16 -100h-334c0 -36 8 -68 19 -100h297l-16 -100h-222c55 -61 133 -100 222 -100c78 0 147 30 200 78v-122c-59 -35 -127 -56 -200 -56c-147 0 -274 82 -344 200h-256
l19 100h197c-8 32 -16 66 -16 100h-200l25 100h191c45 172 198 300 384 300z" />
<glyph glyph-name="5f" unicode="&#xe05f;"
d="M0 700h700v-100h-700v100zM0 500h500v-100h-500v100zM0 300h800v-100h-800v100zM0 100h100v-100h-100v100zM200 100h100v-100h-100v100zM400 100h100v-100h-100v100z" />
<glyph glyph-name="60" unicode="&#xe060;"
d="M0 800h800v-100h-800v100zM200 600h400l-200 -200zM0 200h800v-200h-800v200z" />
<glyph glyph-name="61" unicode="&#xe061;"
d="M0 800h100v-800h-100v800zM600 800h200v-800h-200v800zM200 600l200 -200l-200 -200v400z" />
<glyph glyph-name="62" unicode="&#xe062;"
d="M0 800h200v-800h-200v800zM700 800h100v-800h-100v800zM600 600v-400l-200 200z" />
<glyph glyph-name="63" unicode="&#xe063;"
d="M0 800h800v-200h-800v200zM400 400l200 -200h-400zM0 100h800v-100h-800v100z" />
<glyph glyph-name="64" unicode="&#xe064;"
d="M0 800h200v-100h-100v-600h600v100h100v-200h-800v800zM400 800h400v-400l-150 150l-250 -250l-100 100l250 250z" />
<glyph glyph-name="65" unicode="&#xe065;"
d="M403 700c247 0 397 -300 397 -300s-150 -300 -397 -300c-253 0 -403 300 -403 300s150 300 403 300zM400 600c-110 0 -200 -90 -200 -200s90 -200 200 -200s200 90 200 200s-90 200 -200 200zM400 500c10 0 19 -3 28 -6c-16 -8 -28 -24 -28 -44c0 -28 22 -50 50 -50
c20 0 36 12 44 28c3 -9 6 -18 6 -28c0 -55 -45 -100 -100 -100s-100 45 -100 100s45 100 100 100z" />
<glyph glyph-name="66" unicode="&#xe066;" horiz-adv-x="900"
d="M331 700h3h3c3 1 7 1 10 1c12 0 29 -8 37 -17l94 -93l66 65c57 57 155 57 212 0c58 -58 58 -154 0 -212l-65 -66l93 -94c10 -8 18 -25 18 -38c0 -28 -22 -50 -50 -50c-13 0 -32 9 -40 20l-62 65l-381 -381h-269v272l375 381l-63 63c-9 8 -16 24 -16 36c0 20 16 42 35 48z
M447 481l-313 -315l128 -132l316 316z" />
<glyph glyph-name="67" unicode="&#xe067;"
d="M0 800h300v-400h400v-400h-700v800zM400 800l300 -300h-300v300z" />
<glyph glyph-name="68" unicode="&#xe068;"
d="M200 800c0 0 200 -100 200 -300s-298 -302 -200 -500c0 0 -200 100 -200 300s300 300 200 500zM500 500c0 0 200 -100 200 -300c0 -150 -60 -200 -100 -200h-300c0 200 300 300 200 500z" />
<glyph glyph-name="69" unicode="&#xe069;"
d="M0 800h100v-800h-100v800zM200 800h300v-100h300l-200 -203l200 -197h-400v100h-200v400z" />
<glyph glyph-name="6a" unicode="&#xe06a;" horiz-adv-x="400"
d="M150 800h150l-100 -200h200l-150 -300h150l-300 -300l-100 300h134l66 200h-200z" />
<glyph glyph-name="6b" unicode="&#xe06b;"
d="M0 800h300v-100h500v-100h-800v200zM0 500h800v-450c0 -28 -22 -50 -50 -50h-700c-28 0 -50 22 -50 50v450z" />
<glyph glyph-name="6c" unicode="&#xe06c;"
d="M150 800c83 0 150 -67 150 -150c0 -66 -41 -121 -100 -141v-118c15 5 33 9 50 9h200c28 0 50 22 50 50v59c-59 20 -100 75 -100 141c0 83 67 150 150 150s150 -67 150 -150c0 -66 -41 -121 -100 -141v-59c0 -82 -68 -150 -150 -150h-200c-14 0 -25 -7 -34 -16
c50 -24 84 -74 84 -134c0 -83 -67 -150 -150 -150s-150 67 -150 150c0 66 41 121 100 141v218c-59 20 -100 75 -100 141c0 83 67 150 150 150z" />
<glyph glyph-name="6d" unicode="&#xe06d;"
d="M0 800h400l-150 -150l150 -150l-100 -100l-150 150l-150 -150v400zM500 400l150 -150l150 150v-400h-400l150 150l-150 150z" />
<glyph glyph-name="6e" unicode="&#xe06e;"
d="M100 800l150 -150l150 150v-400h-400l150 150l-150 150zM400 400h400l-150 -150l150 -150l-100 -100l-150 150l-150 -150v400z" />
<glyph glyph-name="6f" unicode="&#xe06f;"
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM400 700c-56 0 -108 -17 -153 -44l22 -19c33 -18 13 -48 -13 -59c-30 -13 -77 10 -65 -41c13 -55 -27 -3 -47 -15c-42 -26 49 -152 31 -156l-59 34c-8 0 -13 -5 -16 -10
c1 -30 10 -57 19 -84c28 -11 77 -2 100 -25c47 -28 97 -115 75 -159c34 -13 68 -22 106 -22c101 0 193 48 247 125c3 24 -8 44 -50 44c-69 0 -156 13 -153 97c2 46 101 108 66 143c-30 30 12 39 12 66c0 37 -65 32 -69 50s20 36 41 56c-30 10 -60 19 -94 19zM631 591
c-38 -11 -94 -35 -87 -53c6 -15 52 -1 65 -13c11 -10 16 -59 44 -31l22 22v3c-11 26 -26 50 -44 72z" />
<glyph glyph-name="70" unicode="&#xe070;"
d="M703 800l97 -100l-400 -400l-100 100l-200 -203l-100 100l300 303l100 -100zM0 100h800v-100h-800v100z" />
<glyph glyph-name="71" unicode="&#xe071;"
d="M0 700h100v-100h-100v100zM200 700h100v-100h-100v100zM400 700h100v-100h-100v100zM600 700h100v-100h-100v100zM0 500h100v-100h-100v100zM200 500h100v-100h-100v100zM400 500h100v-100h-100v100zM600 500h100v-100h-100v100zM0 300h100v-100h-100v100zM200 300h100
v-100h-100v100zM400 300h100v-100h-100v100zM600 300h100v-100h-100v100zM0 100h100v-100h-100v100zM200 100h100v-100h-100v100zM400 100h100v-100h-100v100zM600 100h100v-100h-100v100z" />
<glyph glyph-name="72" unicode="&#xe072;"
d="M0 800h200v-200h-200v200zM300 800h200v-200h-200v200zM600 800h200v-200h-200v200zM0 500h200v-200h-200v200zM300 500h200v-200h-200v200zM600 500h200v-200h-200v200zM0 200h200v-200h-200v200zM300 200h200v-200h-200v200zM600 200h200v-200h-200v200z" />
<glyph glyph-name="73" unicode="&#xe073;"
d="M0 800h300v-300h-300v300zM500 800h300v-300h-300v300zM0 300h300v-300h-300v300zM500 300h300v-300h-300v300z" />
<glyph glyph-name="74" unicode="&#xe074;"
d="M19 800h662c11 0 19 -8 19 -19v-331c0 -28 -22 -50 -50 -50h-600c-28 0 -50 22 -50 50v331c0 11 8 19 19 19zM0 309c16 -6 32 -9 50 -9h600c18 0 34 3 50 9v-290c0 -11 -8 -19 -19 -19h-662c-11 0 -19 8 -19 19v290zM550 200c-28 0 -50 -22 -50 -50s22 -50 50 -50
s50 22 50 50s-22 50 -50 50z" />
<glyph glyph-name="75" unicode="&#xe075;"
d="M0 700h300v-100h-50c-28 0 -50 -22 -50 -50v-150h300v150c0 28 -22 50 -50 50h-50v100h300v-100h-50c-28 0 -50 -22 -50 -50v-400c0 -28 22 -50 50 -50h50v-100h-300v100h50c28 0 50 22 50 50v150h-300v-150c0 -28 22 -50 50 -50h50v-100h-300v100h50c28 0 50 22 50 50
v400c0 28 -22 50 -50 50h-50v100z" />
<glyph glyph-name="76" unicode="&#xe076;"
d="M400 700c165 0 300 -135 300 -300v-100h50c28 0 50 -22 50 -50v-200c0 -28 -22 -50 -50 -50h-100c-28 0 -50 22 -50 50v350c0 111 -89 200 -200 200s-200 -89 -200 -200v-350c0 -28 -22 -50 -50 -50h-100c-28 0 -50 22 -50 50v200c0 28 22 50 50 50h50v100
c0 165 135 300 300 300z" />
<glyph glyph-name="77" unicode="&#xe077;"
d="M0 500c0 109 91 200 200 200s200 -91 200 -200c0 109 91 200 200 200s200 -91 200 -200c0 -55 -23 -105 -59 -141l-341 -340l-341 340c-36 36 -59 86 -59 141z" />
<glyph glyph-name="78" unicode="&#xe078;"
d="M400 700l400 -300l-100 3v-403h-200v200h-200v-200h-200v400h-100z" />
<glyph glyph-name="79" unicode="&#xe079;"
d="M0 800h800v-800h-800v800zM100 700v-300l100 100l400 -400h100v100l-200 200l100 100l100 -100v300h-600z" />
<glyph glyph-name="7a" unicode="&#xe07a;"
d="M19 800h762c11 0 19 -8 19 -19v-762c0 -11 -8 -19 -19 -19h-762c-11 0 -19 8 -19 19v762c0 11 8 19 19 19zM100 600v-300h100l100 -100h200l100 100h100v300h-600z" />
<glyph glyph-name="7b" unicode="&#xe07b;"
d="M200 600c80 0 142 -56 200 -122c58 66 119 122 200 122c131 0 200 -101 200 -200s-69 -200 -200 -200c-81 0 -142 56 -200 122c-58 -66 -121 -122 -200 -122c-131 0 -200 101 -200 200s69 200 200 200zM200 500c-74 0 -100 -54 -100 -100s26 -100 100 -100
c42 0 88 47 134 100c-46 53 -92 100 -134 100zM600 500c-43 0 -88 -47 -134 -100c46 -53 91 -100 134 -100c74 0 100 54 100 100s-26 100 -100 100z" />
<glyph glyph-name="7c" unicode="&#xe07c;" horiz-adv-x="400"
d="M300 800c55 0 100 -45 100 -100s-45 -100 -100 -100s-100 45 -100 100s45 100 100 100zM150 550c83 0 150 -69 150 -150c0 -66 -100 -214 -100 -250c0 -28 22 -50 50 -50s50 22 50 50h100c0 -83 -67 -150 -150 -150s-150 64 -150 150s100 222 100 250s-22 50 -50 50
s-50 -22 -50 -50h-100c0 83 67 150 150 150z" />
<glyph glyph-name="7d" unicode="&#xe07d;"
d="M200 800h500v-100h-122c-77 -197 -156 -392 -234 -588l-6 -12h162v-100h-500v100h122c77 197 156 392 234 588l7 12h-163v100z" />
<glyph glyph-name="7e" unicode="&#xe07e;"
d="M0 700h800v-100h-800v100zM0 500h800v-100h-800v100zM0 300h800v-100h-800v100zM100 100h600v-100h-600v100z" />
<glyph glyph-name="7f" unicode="&#xe07f;"
d="M0 700h800v-100h-800v100zM0 500h800v-100h-800v100zM0 300h800v-100h-800v100zM0 100h600v-100h-600v100z" />
<glyph glyph-name="80" unicode="&#xe080;"
d="M0 700h800v-100h-800v100zM0 500h800v-100h-800v100zM0 300h800v-100h-800v100zM200 100h600v-100h-600v100z" />
<glyph glyph-name="81" unicode="&#xe081;"
d="M550 800c138 0 250 -112 250 -250s-112 -250 -250 -250c-16 0 -32 0 -47 3l-3 -3v-100h-200v-200h-300v200l303 303c-3 15 -3 31 -3 47c0 138 112 250 250 250zM600 700c-55 0 -100 -45 -100 -100s45 -100 100 -100s100 45 100 100s-45 100 -100 100z" />
<glyph glyph-name="82" unicode="&#xe082;"
d="M134 600h3h4h4h5h500c28 0 50 -22 50 -50v-350h100v-150c0 -28 -22 -50 -50 -50h-700c-28 0 -50 22 -50 50v150h100v350v2c0 20 15 42 34 48zM200 500v-300h100v-100h200v100h100v300h-400z" />
<glyph glyph-name="83" unicode="&#xe083;"
d="M0 800h400v-400h-400v400zM500 600h100v-400h-400v100h300v300zM700 400h100v-400h-400v100h300v300z" />
<glyph glyph-name="84" unicode="&#xe084;" horiz-adv-x="600"
d="M337 694c6 4 12 7 21 7c28 0 50 -22 50 -50c0 -17 -12 -37 -27 -45l-300 -150c-8 -6 -21 -11 -31 -11c-28 0 -50 22 -50 50c0 21 16 44 37 49zM437 544c6 4 12 7 21 7c28 0 50 -22 50 -50c0 -17 -12 -37 -27 -45l-400 -200c-8 -6 -21 -11 -31 -11c-28 0 -50 22 -50 50
c0 21 16 44 37 49zM437 344c6 4 12 7 21 7c28 0 50 -22 50 -50c0 -17 -12 -37 -27 -45l-106 -56c24 -4 43 -26 43 -50c0 -28 -23 -51 -51 -51c-2 0 -6 1 -8 1h-200c-26 1 -48 24 -48 50c0 16 12 36 26 44zM151 -50c0 23 20 50 46 50h3h4h5h100c28 0 50 -22 50 -50
s-22 -50 -50 -50h-100c-2 0 -6 -1 -8 -1c-28 0 -50 23 -50 51z" />
<glyph glyph-name="85" unicode="&#xe085;"
d="M199 800h100v-200h-200v100h100v100zM586 797h1c18 1 38 1 56 -3c36 -8 69 -26 97 -54c78 -78 78 -203 0 -281l-150 -150c-8 -13 -28 -24 -43 -24c-28 0 -50 22 -50 50c0 15 11 35 24 43l150 150c40 40 39 105 0 144c-41 41 -110 34 -144 0l-44 -44
c-8 -13 -27 -24 -42 -24c-28 0 -50 22 -50 50c0 15 11 35 24 43l43 44c32 33 72 53 128 56zM208 490c4 5 14 16 22 16h3c2 0 6 1 8 1c28 0 50 -22 50 -50c0 -11 -6 -27 -14 -35l-150 -150c-40 -40 -39 -105 0 -144c41 -41 110 -34 144 0l44 44c8 13 27 24 42 24
c28 0 50 -22 50 -50c0 -15 -11 -35 -24 -43l-43 -44c-22 -22 -48 -37 -75 -47c-70 -25 -151 -9 -207 47c-78 78 -78 203 0 281zM499 200h200v-100h-100v-100h-100v200z" />
<glyph glyph-name="86" unicode="&#xe086;"
d="M586 797c18 1 39 1 57 -3c36 -8 69 -26 97 -54c78 -78 78 -203 0 -281l-150 -150c-62 -62 -132 -81 -182 -78s-69 17 -84 25s-26 27 -26 44c0 28 22 51 50 51c8 0 19 -3 26 -7c0 0 15 -11 41 -13s62 3 106 47l150 150c40 40 39 105 0 144c-41 41 -110 34 -144 0
c-8 -13 -28 -24 -43 -24c-28 0 -50 22 -50 50c0 15 11 35 24 43c32 33 72 53 128 56zM386 566c50 -2 64 -17 85 -22s37 -28 37 -49c0 -28 -22 -50 -50 -50c-10 0 -23 5 -31 11c0 0 -19 9 -47 10s-63 -4 -103 -44l-150 -150c-40 -40 -39 -105 0 -144c41 -41 110 -34 144 0
c8 13 27 24 42 24c28 0 50 -22 50 -50c0 -15 -10 -35 -23 -43c-22 -22 -48 -37 -75 -47c-70 -25 -151 -9 -207 47c-78 78 -78 203 0 281l150 150c60 60 128 78 178 76z" />
<glyph glyph-name="87" unicode="&#xe087;"
d="M0 700h300v-300h-300v300zM400 700h400v-100h-400v100zM400 500h300v-100h-300v100zM0 300h300v-300h-300v300zM400 300h400v-100h-400v100zM400 100h300v-100h-300v100z" />
<glyph glyph-name="88" unicode="&#xe088;"
d="M50 700c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM200 700h600v-100h-600v100zM50 500c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM200 500h600v-100h-600v100zM50 300c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50
s22 50 50 50zM200 300h600v-100h-600v100zM50 100c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM200 100h600v-100h-600v100z" />
<glyph glyph-name="89" unicode="&#xe089;"
d="M800 800l-400 -800l-100 300l-300 100z" />
<glyph glyph-name="8a" unicode="&#xe08a;" horiz-adv-x="600"
d="M300 700c110 0 200 -90 200 -200v-100h100v-400h-600v400h100v100c0 110 90 200 200 200zM300 600c-56 0 -100 -44 -100 -100v-100h200v100c0 56 -44 100 -100 100z" />
<glyph glyph-name="8b" unicode="&#xe08b;" horiz-adv-x="600"
d="M300 800c110 0 200 -90 200 -200v-200h100v-400h-600v400h400v200c0 56 -44 100 -100 100s-100 -44 -100 -100h-100c0 110 90 200 200 200z" />
<glyph glyph-name="8c" unicode="&#xe08c;"
d="M400 700v-100c-111 0 -200 -89 -200 -200h100l-150 -200l-150 200h100c0 165 135 300 300 300zM650 600l150 -200h-100c0 -165 -135 -300 -300 -300v100c111 0 200 89 200 200h-100z" />
<glyph glyph-name="8d" unicode="&#xe08d;"
d="M100 800h600v-300h100l-150 -250l-150 250h100v200h-400v-100h-100v200zM150 550l150 -250h-100v-200h400v100h100v-200h-600v300h-100z" />
<glyph glyph-name="8e" unicode="&#xe08e;"
d="M600 700l200 -150l-200 -150v100h-500v-100h-100v100c0 55 45 100 100 100h500v100zM200 300v-100h500v100h100v-100c0 -55 -45 -100 -100 -100h-500v-100l-200 150z" />
<glyph glyph-name="8f" unicode="&#xe08f;" horiz-adv-x="900"
d="M350 800c193 0 350 -157 350 -350c0 -60 -17 -117 -44 -166c5 -3 12 -8 16 -12l100 -100c16 -16 30 -49 30 -72c0 -56 -46 -102 -102 -102c-23 0 -56 14 -72 30l-100 100c-4 3 -9 9 -12 13c-49 -26 -107 -41 -166 -41c-193 0 -350 157 -350 350s157 350 350 350zM350 200
c142 0 250 108 250 250c0 139 -111 250 -250 250s-250 -111 -250 -250s111 -250 250 -250z" />
<glyph glyph-name="90" unicode="&#xe090;" horiz-adv-x="600"
d="M300 800c166 0 300 -134 300 -300c0 -200 -300 -500 -300 -500s-300 300 -300 500c0 166 134 300 300 300zM300 700c-110 0 -200 -90 -200 -200s90 -200 200 -200s200 90 200 200s-90 200 -200 200z" />
<glyph glyph-name="91" unicode="&#xe091;" horiz-adv-x="900"
d="M0 800h800v-541c1 -3 1 -8 1 -11s0 -7 -1 -10v-238h-800v800zM495 250c0 26 22 50 50 50h5h150v400h-600v-600h600v100h-150h-5c-28 0 -50 22 -50 50zM350 600c83 0 150 -67 150 -150c0 -100 -150 -250 -150 -250s-150 150 -150 250c0 83 67 150 150 150zM350 500
c-28 0 -50 -22 -50 -50s22 -50 50 -50s50 22 50 50s-22 50 -50 50z" />
<glyph glyph-name="92" unicode="&#xe092;" horiz-adv-x="600"
d="M0 700h200v-600h-200v600zM400 700h200v-600h-200v600z" />
<glyph glyph-name="93" unicode="&#xe093;" horiz-adv-x="600"
d="M0 700l600 -300l-600 -300v600z" />
<glyph glyph-name="94" unicode="&#xe094;" horiz-adv-x="600"
d="M300 700c166 0 300 -134 300 -300s-134 -300 -300 -300s-300 134 -300 300s134 300 300 300z" />
<glyph glyph-name="95" unicode="&#xe095;"
d="M400 700v-600l-400 300zM400 400l400 300v-600z" />
<glyph glyph-name="96" unicode="&#xe096;"
d="M0 700l400 -300l-400 -300v600zM400 100v600l400 -300z" />
<glyph glyph-name="97" unicode="&#xe097;"
d="M0 700h200v-600h-200v600zM200 400l500 300v-600z" />
<glyph glyph-name="98" unicode="&#xe098;"
d="M0 700l500 -300l-500 -300v600zM500 100v600h200v-600h-200z" />
<glyph glyph-name="99" unicode="&#xe099;" horiz-adv-x="600"
d="M0 700h600v-600h-600v600z" />
<glyph glyph-name="9a" unicode="&#xe09a;"
d="M200 800h400v-200h200v-400h-200v-200h-400v200h-200v400h200v200z" />
<glyph glyph-name="9b" unicode="&#xe09b;"
d="M0 700h800v-100h-800v100zM0 403h800v-100h-800v100zM0 103h800v-100h-800v100z" />
<glyph glyph-name="9c" unicode="&#xe09c;" horiz-adv-x="600"
d="M278 700c7 2 13 4 22 4c55 0 100 -45 100 -100v-4v-200c0 -55 -45 -100 -100 -100s-100 45 -100 100v200v2c0 44 35 88 78 98zM34 500h4h3c3 0 6 1 9 1c28 0 50 -22 50 -50v-1v-50c0 -111 89 -200 200 -200s200 89 200 200v50c0 28 22 50 50 50s50 -22 50 -50v-50
c0 -148 -109 -270 -250 -294v-106h50c55 0 100 -45 100 -100h-400c0 55 45 100 100 100h50v106c-141 24 -250 146 -250 294v50v2c0 20 15 42 34 48z" />
<glyph glyph-name="9d" unicode="&#xe09d;"
d="M0 500h800v-200h-800v200z" />
<glyph glyph-name="9e" unicode="&#xe09e;"
d="M34 700h4h3h4h5h700c28 0 50 -22 50 -50v-500c0 -28 -22 -50 -50 -50h-250v-100h100c55 0 100 -45 100 -100h-600c0 55 45 100 100 100h100v100h-250c-28 0 -50 22 -50 50v500v2c0 20 15 42 34 48zM100 600v-400h600v400h-600z" />
<glyph glyph-name="9f" unicode="&#xe09f;"
d="M272 700c-14 -40 -22 -83 -22 -128c0 -221 179 -400 400 -400c45 0 88 8 128 22c-53 -158 -202 -272 -378 -272c-221 0 -400 179 -400 400c0 176 114 325 272 378z" />
<glyph glyph-name="a0" unicode="&#xe0a0;"
d="M350 700l150 -150h-100v-150h150v100l150 -150l-150 -150v100h-150v-150h100l-150 -150l-150 150h100v150h-150v-100l-150 150l150 150v-100h150v150h-100z" />
<glyph glyph-name="a1" unicode="&#xe0a1;"
d="M800 800v-550c0 -83 -67 -150 -150 -150s-150 67 -150 150s67 150 150 150c17 0 35 -4 50 -9v206c-201 -6 -327 -27 -400 -50v-397c0 -83 -67 -150 -150 -150s-150 67 -150 150s67 150 150 150c17 0 35 -4 50 -9v409s100 100 600 100z" />
<glyph glyph-name="a2" unicode="&#xe0a2;" horiz-adv-x="700"
d="M499 700c51 0 102 -20 141 -59c78 -78 78 -203 0 -281l-250 -244c-48 -48 -127 -48 -175 0s-48 127 0 175l96 97l69 -69l-90 -94l-7 -3c-10 -10 -10 -28 0 -38s28 -10 38 0l250 247c37 40 39 102 0 141s-104 40 -144 0l-278 -275c-66 -69 -68 -179 0 -247
c69 -69 181 -69 250 0l9 12l116 113l69 -69l-125 -125c-107 -107 -281 -107 -388 0s-107 281 0 388l278 272c39 39 90 59 141 59z" />
<glyph glyph-name="a3" unicode="&#xe0a3;"
d="M600 800l200 -200l-100 -100l-200 200zM400 600l200 -200l-400 -400h-200v200z" />
<glyph glyph-name="a4" unicode="&#xe0a4;"
d="M550 800c83 0 150 -90 150 -200s-67 -200 -150 -200c-22 0 -40 8 -59 19c6 26 9 52 9 81c0 84 -27 158 -72 212c27 52 71 88 122 88zM250 700c83 0 150 -90 150 -200s-67 -200 -150 -200s-150 90 -150 200s67 200 150 200zM725 384c44 -22 75 -66 75 -118v-166h-200v66
c0 50 -17 96 -44 134c66 2 126 33 169 84zM75 284c45 -53 106 -84 175 -84s130 31 175 84c44 -22 75 -66 75 -118v-166h-500v166c0 52 31 96 75 118z" />
<glyph glyph-name="a5" unicode="&#xe0a5;"
d="M400 800c110 0 200 -112 200 -250s-90 -250 -200 -250s-200 112 -200 250s90 250 200 250zM191 300c54 -61 128 -100 209 -100s155 39 209 100c106 -5 191 -92 191 -200v-100h-800v100c0 108 85 195 191 200z" />
<glyph glyph-name="a6" unicode="&#xe0a6;" horiz-adv-x="600"
d="M19 800h462c11 0 19 -8 19 -19v-762c0 -11 -8 -19 -19 -19h-462c-11 0 -19 8 -19 19v762c0 11 8 19 19 19zM100 700v-500h300v500h-300zM250 150c-28 0 -50 -22 -50 -50s22 -50 50 -50s50 22 50 50s-22 50 -50 50z" />
<glyph glyph-name="a7" unicode="&#xe0a7;"
d="M350 800c17 0 34 -1 50 -3v-397l-297 297c63 64 150 103 247 103zM500 694c169 -25 300 -168 300 -344c0 -193 -157 -350 -350 -350c-85 0 -161 31 -222 81l272 272v341zM91 562l237 -234l-212 -212c-70 55 -116 138 -116 234c0 84 35 158 91 212z" />
<glyph glyph-name="a8" unicode="&#xe0a8;"
d="M92 650c0 23 20 50 46 50h3h4h5h400c28 0 50 -22 50 -50s-22 -50 -50 -50h-50v-200h100c55 0 100 -45 100 -100h-300v-300l-56 -100l-44 100v300h-300c0 55 45 100 100 100h100v200h-50c-2 0 -6 -1 -8 -1c-28 0 -50 23 -50 51z" />
<glyph glyph-name="a9" unicode="&#xe0a9;"
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM300 600v-400l300 200z" />
<glyph glyph-name="aa" unicode="&#xe0aa;"
d="M300 800h200v-300h300v-200h-300v-300h-200v300h-300v200h300v300z" />
<glyph glyph-name="ab" unicode="&#xe0ab;"
d="M300 800h100v-400h-100v400zM172 656l62 -78l-40 -31c-58 -46 -94 -117 -94 -197c0 -139 111 -250 250 -250s250 111 250 250c0 80 -39 151 -97 197l-37 31l62 78l38 -31c82 -64 134 -164 134 -275c0 -193 -157 -350 -350 -350s-350 157 -350 350c0 111 53 211 134 275z
" />
<glyph glyph-name="ac" unicode="&#xe0ac;"
d="M200 800h400v-200h-400v200zM9 500h782c6 0 9 -3 9 -9v-282c0 -6 -3 -9 -9 -9h-91v200h-600v-200h-91c-6 0 -9 3 -9 9v282c0 6 3 9 9 9zM200 300h400v-300h-400v300z" />
<glyph glyph-name="ad" unicode="&#xe0ad;"
d="M0 700h100v-700h-100v700zM700 700h100v-700h-100v700zM200 600h200v-100h-200v100zM300 400h200v-100h-200v100zM400 200h200v-100h-200v100z" />
<glyph glyph-name="ae" unicode="&#xe0ae;"
d="M325 700c42 -141 87 -280 131 -419c29 74 59 148 88 222c30 -57 58 -114 87 -172h169v-100h-231l-13 28c-37 -92 -74 -184 -112 -275c-38 129 -79 257 -119 385c-42 -133 -83 -267 -125 -400c-28 88 -56 175 -84 262h-116v100h188l9 -34l3 -6c42 137 83 273 125 409z" />
<glyph glyph-name="af" unicode="&#xe0af;"
d="M200 600c0 57 43 100 100 100s100 -43 100 -100c0 -28 -18 -48 -28 -72c-3 -6 -3 -16 -3 -28h231v-231c12 0 22 0 28 3c24 10 44 28 72 28c57 0 100 -43 100 -100s-43 -100 -100 -100c-28 0 -48 18 -72 28c-6 3 -16 3 -28 3v-231h-231c0 12 0 22 3 28c10 24 28 44 28 72
c0 57 -43 100 -100 100s-100 -43 -100 -100c0 -28 18 -48 28 -72c3 -6 3 -16 3 -28h-231v600h231c0 12 0 22 -3 28c-10 24 -28 44 -28 72z" />
<glyph glyph-name="b0" unicode="&#xe0b0;" horiz-adv-x="500"
d="M247 700c84 0 148 -20 191 -59s59 -93 59 -141c0 -117 -69 -181 -119 -225s-81 -67 -81 -150v-25h-100v25c0 117 65 181 115 225s85 67 85 150c0 25 -8 48 -28 66s-56 34 -122 34s-97 -18 -116 -37s-27 -43 -31 -69l-100 12c5 38 19 88 59 128s103 66 188 66zM197 0h100
v-100h-100v100z" />
<glyph glyph-name="b1" unicode="&#xe0b1;"
d="M450 800c138 0 250 -112 250 -250v-50c58 -21 100 -85 100 -150c0 -69 -48 -127 -112 -144c-22 55 -75 94 -138 94c-20 0 -39 -5 -56 -12c-17 64 -75 112 -144 112s-127 -48 -144 -112c-17 7 -36 12 -56 12c-37 0 -71 -12 -97 -34c-33 36 -53 82 -53 134
c0 110 90 200 200 200c23 114 129 200 250 200zM334 300h4h3c3 0 6 1 9 1c28 0 50 -22 50 -50v-1v-200c0 -28 -22 -50 -50 -50s-50 22 -50 50v200v2c0 20 15 42 34 48zM134 200h4h3c3 0 6 1 9 1c28 0 50 -22 50 -50v-1v-100c0 -28 -22 -50 -50 -50s-50 22 -50 50v100v2
c0 20 15 42 34 48zM534 200h3h4c3 0 6 1 9 1c28 0 50 -22 50 -50v-1v-100c0 -28 -22 -50 -50 -50s-50 22 -50 50v100v2c0 20 15 42 34 48z" />
<glyph glyph-name="b2" unicode="&#xe0b2;"
d="M600 800l200 -150l-200 -150v100h-50l-153 -191l175 -206l6 -3h22v100l200 -150l-200 -150v100h-25c-35 0 -56 12 -78 38l-166 190l-153 -190c-22 -27 -43 -38 -78 -38h-100v100h100l166 206l-163 191l-3 3h-100v100h100c34 0 56 -12 78 -38l153 -178l141 178
c22 27 43 38 78 38h50v100z" />
<glyph glyph-name="b3" unicode="&#xe0b3;"
d="M400 800c110 0 209 -47 281 -119l119 119v-300h-300l109 109c-54 55 -126 91 -209 91c-166 0 -300 -134 -300 -300s134 -300 300 -300c83 0 158 34 212 88l72 -72c-72 -72 -174 -116 -284 -116c-220 0 -400 180 -400 400s180 400 400 400z" />
<glyph glyph-name="b4" unicode="&#xe0b4;"
d="M400 800h400v-400l-166 166l-400 -400l166 -166h-400v400l166 -166l400 400z" />
<glyph glyph-name="b5" unicode="&#xe0b5;" horiz-adv-x="600"
d="M250 800l250 -300h-200v-200h200l-250 -300l-250 300h200v200h-200z" />
<glyph glyph-name="b6" unicode="&#xe0b6;"
d="M300 600v-200h200v200l300 -250l-300 -250v200h-200v-200l-300 250z" />
<glyph glyph-name="b7" unicode="&#xe0b7;"
d="M0 800c441 0 800 -359 800 -800h-200c0 333 -267 600 -600 600v200zM0 500c275 0 500 -225 500 -500h-200c0 167 -133 300 -300 300v200zM0 200c110 0 200 -90 200 -200h-200v200z" />
<glyph glyph-name="b8" unicode="&#xe0b8;"
d="M100 800c386 0 700 -314 700 -700h-100c0 332 -268 600 -600 600v100zM100 600c276 0 500 -224 500 -500h-100c0 222 -178 400 -400 400v100zM100 400c165 0 300 -135 300 -300h-100c0 111 -89 200 -200 200v100zM100 200c55 0 100 -45 100 -100s-45 -100 -100 -100
s-100 45 -100 100s45 100 100 100z" />
<glyph glyph-name="b9" unicode="&#xe0b9;"
d="M300 800h400c55 0 100 -45 100 -100v-200h-400v150c0 28 -22 50 -50 50s-50 -22 -50 -50v-250h400v-300c0 -55 -45 -100 -100 -100h-500c-55 0 -100 45 -100 100v200h100v-150c0 -28 22 -50 50 -50s50 22 50 50v550c0 55 45 100 100 100z" />
<glyph glyph-name="ba" unicode="&#xe0ba;"
d="M75 700h225v-100h-200v-500h400v100h100v-125c0 -41 -34 -75 -75 -75h-450c-41 0 -75 34 -75 75v550c0 41 34 75 75 75zM600 700l200 -200l-200 -200v100h-200c-94 0 -173 -65 -194 -153c23 199 189 353 394 353v100z" />
<glyph glyph-name="bb" unicode="&#xe0bb;"
d="M500 700l300 -284l-300 -316v200h-100c-200 0 -348 -102 -400 -300c0 295 100 500 500 500v200z" />
<glyph glyph-name="bc" unicode="&#xe0bc;"
d="M381 791l19 9l19 -9c127 -53 253 -108 381 -160v-31c0 -166 -67 -313 -147 -419c-40 -53 -83 -97 -125 -128s-82 -53 -128 -53s-86 22 -128 53s-85 75 -125 128c-80 107 -147 253 -147 419v31c128 52 254 107 381 160zM400 100v591l-294 -122c8 -126 58 -243 122 -328
c35 -46 73 -86 106 -110s62 -31 66 -31z" />
<glyph glyph-name="bd" unicode="&#xe0bd;"
d="M600 800h100v-800h-100v800zM400 700h100v-700h-100v700zM200 500h100v-500h-100v500zM0 300h100v-300h-100v300z" />
<glyph glyph-name="be" unicode="&#xe0be;"
d="M300 800h100v-200h200l100 -100l-100 -100h-200v-400h-100v500h-200l-100 100l100 100h200v100z" />
<glyph glyph-name="bf" unicode="&#xe0bf;"
d="M200 800h100v-600h200l-250 -200l-250 200h200v600zM400 800h200v-100h-200v100zM400 600h300v-100h-300v100zM400 400h400v-100h-400v100z" />
<glyph glyph-name="c0" unicode="&#xe0c0;"
d="M200 800h100v-600h200l-250 -200l-250 200h200v600zM400 800h400v-100h-400v100zM400 600h300v-100h-300v100zM400 400h200v-100h-200v100z" />
<glyph glyph-name="c1" unicode="&#xe0c1;"
d="M75 700h650c41 0 75 -34 75 -75v-550c0 -41 -34 -75 -75 -75h-650c-41 0 -75 34 -75 75v550c0 41 34 75 75 75zM100 600v-100h100v100h-100zM300 600v-100h400v100h-400zM100 400v-100h100v100h-100zM300 400v-100h400v100h-400zM100 200v-100h100v100h-100zM300 200
v-100h400v100h-400z" />
<glyph glyph-name="c2" unicode="&#xe0c2;"
d="M400 800l100 -300h300l-250 -200l100 -300l-250 200l-250 -200l100 300l-250 200h300z" />
<glyph glyph-name="c3" unicode="&#xe0c3;"
d="M400 800c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM150 700c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM650 700c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM400 600c110 0 200 -90 200 -200
s-90 -200 -200 -200s-200 90 -200 200s90 200 200 200zM50 450c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM750 450c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM150 200c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50
s22 50 50 50zM650 200c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM400 100c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50z" />
<glyph glyph-name="c4" unicode="&#xe0c4;"
d="M34 800h632c18 0 34 -16 34 -34v-732c0 -18 -16 -34 -34 -34h-632c-18 0 -34 16 -34 34v732c0 18 16 34 34 34zM100 700v-500h500v500h-500zM350 150c-38 0 -63 -42 -44 -75s69 -33 88 0s-6 75 -44 75z" />
<glyph glyph-name="c5" unicode="&#xe0c5;"
d="M0 800h300l500 -500l-300 -300l-500 500v300zM200 700c-55 0 -100 -45 -100 -100s45 -100 100 -100s100 45 100 100s-45 100 -100 100z" />
<glyph glyph-name="c6" unicode="&#xe0c6;"
d="M0 600h200l300 -300l-200 -200l-300 300v200zM340 600h160l300 -300l-200 -200l-78 78l119 122zM150 500c-28 0 -50 -22 -50 -50s22 -50 50 -50s50 22 50 50s-22 50 -50 50z" />
<glyph glyph-name="c7" unicode="&#xe0c7;"
d="M400 800c220 0 400 -180 400 -400s-180 -400 -400 -400s-400 180 -400 400s180 400 400 400zM400 700c-166 0 -300 -134 -300 -300s134 -300 300 -300s300 134 300 300s-134 300 -300 300zM400 600c110 0 200 -90 200 -200s-90 -200 -200 -200s-200 90 -200 200
s90 200 200 200zM400 500c-56 0 -100 -44 -100 -100s44 -100 100 -100s100 44 100 100s-44 100 -100 100z" />
<glyph glyph-name="c8" unicode="&#xe0c8;"
d="M0 700h559l-100 -100h-359v-500h500v159l100 100v-359h-700v700zM700 700l100 -100l-400 -400l-200 200l100 100l100 -100z" />
<glyph glyph-name="c9" unicode="&#xe0c9;"
d="M9 800h782c6 0 9 -3 9 -9v-782c0 -6 -3 -9 -9 -9h-782c-6 0 -9 3 -9 9v782c0 6 3 9 9 9zM150 722l-72 -72l100 -100l-100 -100l72 -72l172 172zM400 500v-100h300v100h-300z" />
<glyph glyph-name="ca" unicode="&#xe0ca;"
d="M0 800h800v-200h-50c0 55 -45 100 -100 100h-150v-550c0 -28 22 -50 50 -50h50v-100h-400v100h50c28 0 50 22 50 50v550h-150c-55 0 -100 -45 -100 -100h-50v200z" />
<glyph glyph-name="cb" unicode="&#xe0cb;"
d="M0 700h100v-400h-100v400zM200 700h350c21 0 39 -13 47 -31c0 0 103 -291 103 -319s-22 -50 -50 -50h-150c-28 0 -50 -25 -50 -50s39 -158 47 -184s-5 -55 -31 -63s-52 5 -66 31s-109 219 -128 238s-44 28 -72 28v400z" />
<glyph glyph-name="cc" unicode="&#xe0cc;"
d="M400 666c10 19 28 32 47 34l19 -3c26 -8 39 -37 31 -63s-47 -159 -47 -184s22 -50 50 -50h150c28 0 50 -22 50 -50s-103 -319 -103 -319c-8 -18 -26 -31 -47 -31h-350v400c28 0 53 9 72 28s114 212 128 238zM0 400h100v-400h-100v400z" />
<glyph glyph-name="cd" unicode="&#xe0cd;"
d="M200 700h300v-100h-100v-6c25 -4 50 -8 72 -16l-34 -94c-28 11 -58 16 -88 16c-139 0 -250 -111 -250 -250s111 -250 250 -250s250 111 250 250c0 31 -5 60 -16 88l91 37c14 -38 25 -81 25 -125c0 -193 -157 -350 -350 -350s-350 157 -350 350c0 176 130 323 300 347v3
h-100v100zM700 584c0 0 -296 -348 -316 -368s-48 -20 -68 0s-20 48 0 68s384 300 384 300z" />
<glyph glyph-name="ce" unicode="&#xe0ce;"
d="M600 700l200 -150l-200 -150v100h-600v100h600v100zM200 300v-100h600v-100h-600v-100l-200 150z" />
<glyph glyph-name="cf" unicode="&#xe0cf;"
d="M300 800h100c55 0 100 -45 100 -100h100c55 0 100 -45 100 -100h-700c0 55 45 100 100 100h100c0 55 45 100 100 100zM100 500h100v-350c0 -28 22 -50 50 -50s50 22 50 50v350h100v-350c0 -28 22 -50 50 -50s50 22 50 50v350h100v-481c0 -11 -8 -19 -19 -19h-462
c-11 0 -19 8 -19 19v481z" />
<glyph glyph-name="d0" unicode="&#xe0d0;"
d="M100 800h200v-400c0 -55 45 -100 100 -100s100 45 100 100v400h100v-400c0 -110 -90 -200 -200 -200h-50c-138 0 -250 90 -250 200v400zM0 100h700v-100h-700v100z" />
<glyph glyph-name="d1" unicode="&#xe0d1;"
d="M9 700h182c6 0 9 -3 9 -9v-482c0 -6 -3 -9 -9 -9h-182c-6 0 -9 3 -9 9v482c0 6 3 9 9 9zM609 700h182c6 0 9 -3 9 -9v-482c0 -6 -3 -9 -9 -9h-182c-6 0 -9 3 -9 9v482c0 6 3 9 9 9zM309 500h182c6 0 9 -3 9 -9v-282c0 -6 -3 -9 -9 -9h-182c-6 0 -9 3 -9 9v282
c0 6 3 9 9 9zM0 100h800v-100h-800v100z" />
<glyph glyph-name="d2" unicode="&#xe0d2;"
d="M10 700h181c6 0 9 -3 9 -9v-191h-200v191c0 6 4 9 10 9zM610 700h181c6 0 9 -3 9 -9v-191h-200v191c0 6 5 9 10 9zM310 600h181c6 0 9 -3 9 -9v-91h-200v91c0 6 4 9 10 9zM0 400h800v-100h-800v100zM0 200h200v-191c0 -6 -3 -9 -9 -9h-182c-6 0 -9 3 -9 9v191zM300 200
h200v-91c0 -6 -3 -9 -9 -9h-181c-6 0 -10 3 -10 9v91zM600 200h200v-191c0 -6 -3 -9 -9 -9h-181c-6 0 -10 3 -10 9v191z" />
<glyph glyph-name="d3" unicode="&#xe0d3;"
d="M0 700h800v-100h-800v100zM9 500h182c6 0 9 -3 9 -9v-482c0 -6 -3 -9 -9 -9h-182c-6 0 -9 3 -9 9v482c0 6 3 9 9 9zM309 500h182c6 0 9 -3 9 -9v-282c0 -6 -3 -9 -9 -9h-182c-6 0 -9 3 -9 9v282c0 6 3 9 9 9zM609 500h182c6 0 9 -3 9 -9v-482c0 -6 -3 -9 -9 -9h-182
c-6 0 -9 3 -9 9v482c0 6 3 9 9 9z" />
<glyph glyph-name="d4" unicode="&#xe0d4;"
d="M50 600h500c28 0 50 -22 50 -50v-150l100 100h100v-300h-100l-100 100v-150c0 -28 -22 -50 -50 -50h-500c-28 0 -50 22 -50 50v400c0 28 22 50 50 50z" />
<glyph glyph-name="d5" unicode="&#xe0d5;"
d="M334 800h66v-800h-66l-134 200h-200v400h200zM500 600v100c26 0 52 -4 75 -10c130 -33 225 -150 225 -290s-95 -258 -225 -291h-3c-23 -6 -47 -9 -72 -9v100c17 0 34 2 50 6c86 22 150 100 150 194s-64 172 -150 194c-16 4 -33 6 -50 6zM500 500l25 -3
c44 -11 75 -51 75 -97s-32 -86 -75 -97l-25 -3v200z" />
<glyph glyph-name="d6" unicode="&#xe0d6;" horiz-adv-x="600"
d="M334 800h66v-800h-66l-134 200h-200v400h200zM500 500l25 -3c44 -11 75 -51 75 -97s-32 -86 -75 -97l-25 -3v200z" />
<glyph glyph-name="d7" unicode="&#xe0d7;" horiz-adv-x="400"
d="M334 800h66v-800h-66l-134 200h-200v400h200z" />
<glyph glyph-name="d8" unicode="&#xe0d8;"
d="M309 800h82c6 0 10 -4 12 -9l294 -682l3 -19v-81c0 -6 -3 -9 -9 -9h-682c-6 0 -9 3 -9 9v81l3 19l294 682c2 5 6 9 12 9zM300 500v-200h100v200h-100zM300 200v-100h100v100h-100z" />
<glyph glyph-name="d9" unicode="&#xe0d9;"
d="M375 800c138 0 269 -39 378 -109l-53 -82c-93 60 -205 91 -325 91c-119 0 -229 -32 -322 -91l-53 82c109 70 237 109 375 109zM375 500c78 0 154 -23 216 -62l-53 -85c-46 30 -104 47 -163 47c-60 0 -112 -17 -159 -47l-54 85c62 40 134 62 213 62zM375 200
c55 0 100 -45 100 -100s-45 -100 -100 -100s-100 45 -100 100s45 100 100 100z" />
<glyph glyph-name="da" unicode="&#xe0da;" horiz-adv-x="900"
d="M551 800c16 0 32 0 47 -3l-97 -97v-200h200l97 97c3 -15 3 -31 3 -47c0 -138 -112 -250 -250 -250c-32 0 -62 8 -90 19l-288 -291c-20 -20 -46 -28 -72 -28s-52 8 -72 28c-39 39 -39 105 0 144l291 287c-11 28 -19 59 -19 91c0 138 112 250 250 250zM101 150
c-28 0 -50 -22 -50 -50s22 -50 50 -50s50 22 50 50s-22 50 -50 50z" />
<glyph glyph-name="db" unicode="&#xe0db;"
d="M141 700c84 -84 169 -167 253 -250c82 83 167 165 247 250l143 -141l-253 -253c84 -82 167 -166 253 -247l-143 -143c-81 86 -165 169 -247 253l-253 -253l-141 143c85 80 167 164 250 247c-83 84 -166 169 -250 253z" />
<glyph glyph-name="dc" unicode="&#xe0dc;"
d="M0 800h100l231 -300h38l231 300h100l-225 -300h225v-100h-300v-100h300v-100h-300v-200h-100v200h-300v100h300v100h-300v100h225z" />
<glyph glyph-name="dd" unicode="&#xe0dd;" horiz-adv-x="900"
d="M350 800c193 0 350 -157 350 -350c0 -61 -17 -119 -44 -169c4 -2 10 -6 13 -9l103 -100c16 -16 30 -49 30 -72c0 -56 -46 -102 -102 -102c-23 0 -56 14 -72 30l-100 103c-3 3 -7 9 -9 13c-50 -28 -108 -44 -169 -44c-193 0 -350 157 -350 350s157 350 350 350zM350 700
c-139 0 -250 -111 -250 -250s111 -250 250 -250c62 0 119 23 163 60c7 11 19 25 31 31l3 3c34 43 53 97 53 156c0 139 -111 250 -250 250zM300 600h100v-100h100v-100h-100v-100h-100v100h-100v100h100v100z" />
<glyph glyph-name="de" unicode="&#xe0de;" horiz-adv-x="900"
d="M350 800c193 0 350 -157 350 -350c0 -61 -17 -119 -44 -169c4 -2 10 -6 13 -9l103 -100c16 -16 30 -49 30 -72c0 -56 -46 -102 -102 -102c-23 0 -56 14 -72 30l-100 103c-3 3 -7 9 -9 13c-50 -28 -108 -44 -169 -44c-193 0 -350 157 -350 350s157 350 350 350zM350 700
c-139 0 -250 -111 -250 -250s111 -250 250 -250c62 0 119 23 163 60c7 11 19 25 31 31l3 3c34 43 53 97 53 156c0 139 -111 250 -250 250zM200 500h300v-100h-300v100z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 54 KiB

View File

@ -0,0 +1,183 @@
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');
html, body {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
a, .btn-link {
color: #0366d6;
}
.btn-primary {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}
#app {
position: relative;
display: flex;
flex-direction: column;
}
.top-row {
height: 3.5rem;
display: flex;
align-items: center;
}
.main {
flex: 1;
}
.main .top-row {
background-color: #f7f7f7;
border-bottom: 1px solid #d6d5d5;
justify-content: flex-end;
}
.main .top-row > a, .main .top-row .btn-link {
white-space: nowrap;
margin-left: 1.5rem;
}
.main .top-row a:first-child {
overflow: hidden;
text-overflow: ellipsis;
}
.sidebar {
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
}
.sidebar .top-row {
background-color: rgba(0,0,0,0.4);
}
.sidebar .navbar-brand {
font-size: 1.1rem;
}
.sidebar .oi {
width: 2rem;
font-size: 1.1rem;
vertical-align: text-top;
top: -2px;
}
.sidebar .nav-item {
font-size: 0.9rem;
padding-bottom: 0.5rem;
}
.sidebar .nav-item:first-of-type {
padding-top: 1rem;
}
.sidebar .nav-item:last-of-type {
padding-bottom: 1rem;
}
.sidebar .nav-item a {
color: #d7d7d7;
border-radius: 4px;
height: 3rem;
display: flex;
align-items: center;
line-height: 3rem;
}
.sidebar .nav-item a.active {
background-color: rgba(255,255,255,0.25);
color: white;
}
.sidebar .nav-item a:hover {
background-color: rgba(255,255,255,0.1);
color: white;
}
.content {
padding-top: 1.1rem;
}
.navbar-toggler {
background-color: rgba(255, 255, 255, 0.1);
}
.valid.modified:not([type=checkbox]) {
outline: 1px solid #26b050;
}
.invalid {
outline: 1px solid red;
}
.validation-message {
color: red;
}
#blazor-error-ui {
background: lightyellow;
bottom: 0;
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
display: none;
left: 0;
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
position: fixed;
width: 100%;
z-index: 1000;
}
#blazor-error-ui .dismiss {
cursor: pointer;
position: absolute;
right: 0.75rem;
top: 0.5rem;
}
@media (max-width: 767.98px) {
.main .top-row:not(.auth) {
display: none;
}
.main .top-row.auth {
justify-content: space-between;
}
.main .top-row a, .main .top-row .btn-link {
margin-left: 0;
}
}
@media (min-width: 768px) {
#app {
flex-direction: row;
}
.sidebar {
width: 250px;
height: 100vh;
position: sticky;
top: 0;
}
.main .top-row {
position: sticky;
top: 0;
}
.main > div {
padding-left: 2rem !important;
padding-right: 1.5rem !important;
}
.navbar-toggler {
display: none;
}
.sidebar .collapse {
/* Never collapse the sidebar for wide screens */
display: block;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>gRPC-Web in Blazor</title>
<base href="/" />
<link href="css/bootstrap/bootstrap.min.css" rel="stylesheet" />
<link href="css/site.css" rel="stylesheet" />
</head>
<body>
<div id="app">Loading...</div>
<div id="blazor-error-ui">
An unhandled error has occurred.
<a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a>
</div>
<script src="_framework/blazor.webassembly.js"></script>
</body>
</html>

View File

@ -0,0 +1,29 @@
// 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 count;
service Counter {
rpc StartCounter (CounterRequest) returns (stream CounterResponse);
}
message CounterRequest {
int32 start = 1;
}
message CounterResponse {
int32 count = 1;
}

View File

@ -0,0 +1,34 @@
// 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";
import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto";
package weather;
service WeatherForecasts {
rpc GetWeatherForecasts (google.protobuf.Empty) returns (GetWeatherForecastsResponse);
}
message GetWeatherForecastsResponse {
repeated WeatherForecast forecasts = 1;
}
message WeatherForecast {
google.protobuf.Timestamp date = 1;
int32 temperatureC = 2;
string summary = 3;
}

View File

@ -0,0 +1,53 @@
#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.ResponseCompression;
using Server.Services;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc();
builder.Services.AddResponseCompression(opts =>
{
opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
new[] { "application/octet-stream" });
});
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

@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<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.Components.WebAssembly.Server" />
<PackageReference Include="Grpc.AspNetCore" />
<PackageReference Include="Grpc.AspNetCore.Web" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Client\Client.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,43 @@
#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.Threading.Tasks;
using Count;
using Grpc.Core;
namespace Server.Services
{
public class CounterService : Counter.CounterBase
{
public override async Task StartCounter(CounterRequest request, IServerStreamWriter<CounterResponse> responseStream, ServerCallContext context)
{
var count = request.Start;
while (!context.CancellationToken.IsCancellationRequested)
{
await responseStream.WriteAsync(new CounterResponse
{
Count = ++count
});
await Task.Delay(TimeSpan.FromSeconds(1));
}
}
}
}

View File

@ -0,0 +1,51 @@
#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 Task<GetWeatherForecastsResponse> GetWeatherForecasts(Empty request, ServerCallContext context)
{
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 Task.FromResult(response);
}
}
}

View File

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

View File

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

View File

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

View File

@ -14,15 +14,13 @@
syntax = "proto3"; syntax = "proto3";
package CoreGreet; package greet;
import "google/protobuf/timestamp.proto";
// The greeting service definition. // The greeting service definition.
service Greeter { service Greeter {
// Sends a greeting // Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {} rpc SayHello (HelloRequest) returns (HelloReply);
rpc SayHellos (HelloRequest) returns (stream HelloReply) {} rpc SayHellos (HelloRequest) returns (stream HelloReply);
} }
// The request message containing the user's name. // The request message containing the user's name.
@ -33,5 +31,4 @@ message HelloRequest {
// The response message containing the greetings // The response message containing the greetings
message HelloReply { message HelloReply {
string message = 1; string message = 1;
google.protobuf.Timestamp timestamp = 2;
} }

View File

@ -0,0 +1,39 @@
#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.Services.AddGrpc();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseGrpcWeb();
app.MapGrpcService<GreeterService>().EnableGrpcWeb();
app.Run();

View File

@ -0,0 +1,44 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<SpaRoot>wwwroot\</SpaRoot>
<DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**;$(SpaRoot)dist\**</DefaultItemExcludes>
</PropertyGroup>
<ItemGroup>
<Protobuf Include="..\Proto\greet.proto" GrpcServices="Server" Link="Protos\greet.proto" />
<PackageReference Include="Grpc.AspNetCore" />
<PackageReference Include="Grpc.AspNetCore.Web" />
</ItemGroup>
<Target Name="DebugEnsureNodeEnv" BeforeTargets="Build" Condition=" '$(Configuration)' == 'Debug' And !Exists('$(SpaRoot)node_modules') ">
<!-- Ensure Node.js is installed -->
<Exec Command="node --version" ContinueOnError="true">
<Output TaskParameter="ExitCode" PropertyName="ErrorCode" />
</Exec>
<Error Condition="'$(ErrorCode)' != '0'" Text="Node.js is required to build and run this project. To continue, please install Node.js from https://nodejs.org/, and then restart your command prompt or IDE." />
<Message Importance="high" Text="Restoring dependencies using 'npm'. This may take several minutes..." />
<Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
<!-- Include source map for debugging (for other source map options see https://webpack.js.org/configuration/devtool/ ) -->
<Exec WorkingDirectory="$(SpaRoot)" Command="npx webpack --debug --devtool inline-source-map scripts/index.js" />
</Target>
<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
<!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
<Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
<Exec WorkingDirectory="$(SpaRoot)" Command="npx webpack scripts/index.js" />
<!-- Include the newly-built files in the publish output -->
<ItemGroup>
<DistFiles Include="$(SpaRoot)dist\**" />
<ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
<RelativePath>%(DistFiles.Identity)</RelativePath>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
</ResolvedFileToPublish>
</ItemGroup>
</Target>
</Project>

View File

@ -0,0 +1,44 @@
#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.Threading.Tasks;
using Greet;
using Grpc.Core;
namespace Server.Services
{
public class GreeterService : Greeter.GreeterBase
{
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply { Message = $"Hello {request.Name}" });
}
public override async Task SayHellos(HelloRequest request, IServerStreamWriter<HelloReply> responseStream, ServerCallContext context)
{
var i = 0;
while (!context.CancellationToken.IsCancellationRequested)
{
await responseStream.WriteAsync(new HelloReply { Message = $"Hello {request.Name} {i}" });
await Task.Delay(TimeSpan.FromSeconds(1));
i++;
}
}
}
}

View File

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

View File

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

View File

@ -0,0 +1,40 @@
# See http://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
/dist
/dist-server
/tmp
/out-tsc
# dependencies
/node_modules
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
yarn-error.log
testem.log
/typings
# System Files
.DS_Store
Thumbs.db

View File

@ -0,0 +1,12 @@
# gRPC-Web generated client
gRPC-Web JavaScript clients and messages are generated using `protoc` the gRPC-Web code generator plugin. Instructions for using it are available [here](https://github.com/grpc/grpc-web#code-generator-plugin).
Files in this directory are generated from *greet.proto*:
* *greet_grpc_web_pb.js* contains the gRPC-Web client.
* *greet_pb.js* contains gRPC messages.
Example of using `protoc` from PowerShell (`protoc` and `protoc-gen-grpc-web` should be on your computer and discoverable from your PATH):
> protoc greet.proto --js_out=import_style=commonjs:CHANGE_TO_SCRIPTS_DIRECTORY --grpc-web_out=import_style=commonjs,mode=grpcwebtext:CHANGE_TO_SCRIPTS_DIRECTORY --plugin=protoc-gen-grpc-web=CHANGE_TO_PROTOC_GEN_GRPC_WEB_EXE_PATH

View File

@ -0,0 +1,225 @@
/**
* @fileoverview gRPC-Web generated client stub for greet
* @enhanceable
* @public
*/
// GENERATED CODE -- DO NOT EDIT!
const grpc = {};
grpc.web = require('grpc-web');
const proto = {};
proto.greet = require('./greet_pb.js');
/**
* @param {string} hostname
* @param {?Object} credentials
* @param {?Object} options
* @constructor
* @struct
* @final
*/
proto.greet.GreeterClient =
function(hostname, credentials, options) {
if (!options) options = {};
options['format'] = 'text';
/**
* @private @const {!grpc.web.GrpcWebClientBase} The client
*/
this.client_ = new grpc.web.GrpcWebClientBase(options);
/**
* @private @const {string} The hostname
*/
this.hostname_ = hostname;
};
/**
* @param {string} hostname
* @param {?Object} credentials
* @param {?Object} options
* @constructor
* @struct
* @final
*/
proto.greet.GreeterPromiseClient =
function(hostname, credentials, options) {
if (!options) options = {};
options['format'] = 'text';
/**
* @private @const {!grpc.web.GrpcWebClientBase} The client
*/
this.client_ = new grpc.web.GrpcWebClientBase(options);
/**
* @private @const {string} The hostname
*/
this.hostname_ = hostname;
};
/**
* @const
* @type {!grpc.web.MethodDescriptor<
* !proto.greet.HelloRequest,
* !proto.greet.HelloReply>}
*/
const methodDescriptor_Greeter_SayHello = new grpc.web.MethodDescriptor(
'/greet.Greeter/SayHello',
grpc.web.MethodType.UNARY,
proto.greet.HelloRequest,
proto.greet.HelloReply,
/**
* @param {!proto.greet.HelloRequest} request
* @return {!Uint8Array}
*/
function(request) {
return request.serializeBinary();
},
proto.greet.HelloReply.deserializeBinary
);
/**
* @const
* @type {!grpc.web.AbstractClientBase.MethodInfo<
* !proto.greet.HelloRequest,
* !proto.greet.HelloReply>}
*/
const methodInfo_Greeter_SayHello = new grpc.web.AbstractClientBase.MethodInfo(
proto.greet.HelloReply,
/**
* @param {!proto.greet.HelloRequest} request
* @return {!Uint8Array}
*/
function(request) {
return request.serializeBinary();
},
proto.greet.HelloReply.deserializeBinary
);
/**
* @param {!proto.greet.HelloRequest} request The
* request proto
* @param {?Object<string, string>} metadata User defined
* call metadata
* @param {function(?grpc.web.Error, ?proto.greet.HelloReply)}
* callback The callback function(error, response)
* @return {!grpc.web.ClientReadableStream<!proto.greet.HelloReply>|undefined}
* The XHR Node Readable Stream
*/
proto.greet.GreeterClient.prototype.sayHello =
function(request, metadata, callback) {
return this.client_.rpcCall(this.hostname_ +
'/greet.Greeter/SayHello',
request,
metadata || {},
methodDescriptor_Greeter_SayHello,
callback);
};
/**
* @param {!proto.greet.HelloRequest} request The
* request proto
* @param {?Object<string, string>} metadata User defined
* call metadata
* @return {!Promise<!proto.greet.HelloReply>}
* A native promise that resolves to the response
*/
proto.greet.GreeterPromiseClient.prototype.sayHello =
function(request, metadata) {
return this.client_.unaryCall(this.hostname_ +
'/greet.Greeter/SayHello',
request,
metadata || {},
methodDescriptor_Greeter_SayHello);
};
/**
* @const
* @type {!grpc.web.MethodDescriptor<
* !proto.greet.HelloRequest,
* !proto.greet.HelloReply>}
*/
const methodDescriptor_Greeter_SayHellos = new grpc.web.MethodDescriptor(
'/greet.Greeter/SayHellos',
grpc.web.MethodType.SERVER_STREAMING,
proto.greet.HelloRequest,
proto.greet.HelloReply,
/**
* @param {!proto.greet.HelloRequest} request
* @return {!Uint8Array}
*/
function(request) {
return request.serializeBinary();
},
proto.greet.HelloReply.deserializeBinary
);
/**
* @const
* @type {!grpc.web.AbstractClientBase.MethodInfo<
* !proto.greet.HelloRequest,
* !proto.greet.HelloReply>}
*/
const methodInfo_Greeter_SayHellos = new grpc.web.AbstractClientBase.MethodInfo(
proto.greet.HelloReply,
/**
* @param {!proto.greet.HelloRequest} request
* @return {!Uint8Array}
*/
function(request) {
return request.serializeBinary();
},
proto.greet.HelloReply.deserializeBinary
);
/**
* @param {!proto.greet.HelloRequest} request The request proto
* @param {?Object<string, string>} metadata User defined
* call metadata
* @return {!grpc.web.ClientReadableStream<!proto.greet.HelloReply>}
* The XHR Node Readable Stream
*/
proto.greet.GreeterClient.prototype.sayHellos =
function(request, metadata) {
return this.client_.serverStreaming(this.hostname_ +
'/greet.Greeter/SayHellos',
request,
metadata || {},
methodDescriptor_Greeter_SayHellos);
};
/**
* @param {!proto.greet.HelloRequest} request The request proto
* @param {?Object<string, string>} metadata User defined
* call metadata
* @return {!grpc.web.ClientReadableStream<!proto.greet.HelloReply>}
* The XHR Node Readable Stream
*/
proto.greet.GreeterPromiseClient.prototype.sayHellos =
function(request, metadata) {
return this.client_.serverStreaming(this.hostname_ +
'/greet.Greeter/SayHellos',
request,
metadata || {},
methodDescriptor_Greeter_SayHellos);
};
module.exports = proto.greet;

View File

@ -0,0 +1,319 @@
// source: greet.proto
/**
* @fileoverview
* @enhanceable
* @suppress {messageConventions} JS Compiler reports an error if a variable or
* field starts with 'MSG_' and isn't a translatable message.
* @public
*/
// GENERATED CODE -- DO NOT EDIT!
var jspb = require('google-protobuf');
var goog = jspb;
var global = Function('return this')();
goog.exportSymbol('proto.greet.HelloReply', null, global);
goog.exportSymbol('proto.greet.HelloRequest', null, global);
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
* server response, or constructed directly in Javascript. The array is used
* in place and becomes part of the constructed object. It is not cloned.
* If no data is provided, the constructed object will be empty, but still
* valid.
* @extends {jspb.Message}
* @constructor
*/
proto.greet.HelloRequest = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.greet.HelloRequest, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.greet.HelloRequest.displayName = 'proto.greet.HelloRequest';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
* server response, or constructed directly in Javascript. The array is used
* in place and becomes part of the constructed object. It is not cloned.
* If no data is provided, the constructed object will be empty, but still
* valid.
* @extends {jspb.Message}
* @constructor
*/
proto.greet.HelloReply = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.greet.HelloReply, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.greet.HelloReply.displayName = 'proto.greet.HelloReply';
}
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
* Field names that are reserved in JavaScript and will be renamed to pb_name.
* Optional fields that are not set will be set to undefined.
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
* For the list of reserved names please see:
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
* JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @return {!Object}
*/
proto.greet.HelloRequest.prototype.toObject = function(opt_includeInstance) {
return proto.greet.HelloRequest.toObject(opt_includeInstance, this);
};
/**
* Static version of the {@see toObject} method.
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
* the JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @param {!proto.greet.HelloRequest} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.greet.HelloRequest.toObject = function(includeInstance, msg) {
var f, obj = {
name: jspb.Message.getFieldWithDefault(msg, 1, "")
};
if (includeInstance) {
obj.$jspbMessageInstance = msg;
}
return obj;
};
}
/**
* Deserializes binary data (in protobuf wire format).
* @param {jspb.ByteSource} bytes The bytes to deserialize.
* @return {!proto.greet.HelloRequest}
*/
proto.greet.HelloRequest.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.greet.HelloRequest;
return proto.greet.HelloRequest.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.greet.HelloRequest} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.greet.HelloRequest}
*/
proto.greet.HelloRequest.deserializeBinaryFromReader = function(msg, reader) {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
var field = reader.getFieldNumber();
switch (field) {
case 1:
var value = /** @type {string} */ (reader.readString());
msg.setName(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.greet.HelloRequest.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.greet.HelloRequest.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
};
/**
* Serializes the given message to binary data (in protobuf wire
* format), writing to the given BinaryWriter.
* @param {!proto.greet.HelloRequest} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.greet.HelloRequest.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getName();
if (f.length > 0) {
writer.writeString(
1,
f
);
}
};
/**
* optional string name = 1;
* @return {string}
*/
proto.greet.HelloRequest.prototype.getName = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};
/**
* @param {string} value
* @return {!proto.greet.HelloRequest} returns this
*/
proto.greet.HelloRequest.prototype.setName = function(value) {
return jspb.Message.setProto3StringField(this, 1, value);
};
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
* Field names that are reserved in JavaScript and will be renamed to pb_name.
* Optional fields that are not set will be set to undefined.
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
* For the list of reserved names please see:
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
* JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @return {!Object}
*/
proto.greet.HelloReply.prototype.toObject = function(opt_includeInstance) {
return proto.greet.HelloReply.toObject(opt_includeInstance, this);
};
/**
* Static version of the {@see toObject} method.
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
* the JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @param {!proto.greet.HelloReply} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.greet.HelloReply.toObject = function(includeInstance, msg) {
var f, obj = {
message: jspb.Message.getFieldWithDefault(msg, 1, "")
};
if (includeInstance) {
obj.$jspbMessageInstance = msg;
}
return obj;
};
}
/**
* Deserializes binary data (in protobuf wire format).
* @param {jspb.ByteSource} bytes The bytes to deserialize.
* @return {!proto.greet.HelloReply}
*/
proto.greet.HelloReply.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.greet.HelloReply;
return proto.greet.HelloReply.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.greet.HelloReply} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.greet.HelloReply}
*/
proto.greet.HelloReply.deserializeBinaryFromReader = function(msg, reader) {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
var field = reader.getFieldNumber();
switch (field) {
case 1:
var value = /** @type {string} */ (reader.readString());
msg.setMessage(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.greet.HelloReply.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.greet.HelloReply.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
};
/**
* Serializes the given message to binary data (in protobuf wire
* format), writing to the given BinaryWriter.
* @param {!proto.greet.HelloReply} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.greet.HelloReply.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getMessage();
if (f.length > 0) {
writer.writeString(
1,
f
);
}
};
/**
* optional string message = 1;
* @return {string}
*/
proto.greet.HelloReply.prototype.getMessage = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};
/**
* @param {string} value
* @return {!proto.greet.HelloReply} returns this
*/
proto.greet.HelloReply.prototype.setMessage = function(value) {
return jspb.Message.setProto3StringField(this, 1, value);
};
goog.object.extend(exports, proto.greet);

View File

@ -0,0 +1,58 @@
const { HelloRequest, HelloReply } = require('./greet_pb.js');
const { GreeterClient } = require('./greet_grpc_web_pb.js');
var client = new GreeterClient(window.location.origin);
var nameInput = document.getElementById('name');
var sendInput = document.getElementById('send');
var streamInput = document.getElementById('stream');
var resultText = document.getElementById('result');
var streamingCall = null;
// Unary call
sendInput.onclick = function () {
var request = new HelloRequest();
request.setName(nameInput.value);
client.sayHello(request, {}, (err, response) => {
resultText.innerHTML = htmlEscape(response.getMessage());
});
};
// Server streaming call
streamInput.onclick = function () {
if (!streamingCall) {
sendInput.disabled = true;
streamInput.value = 'Stop server stream';
resultText.innerHTML = '';
var request = new HelloRequest();
request.setName(nameInput.value);
streamingCall = client.sayHellos(request, {});
streamingCall.on('data', (response) => {
resultText.innerHTML += htmlEscape(response.getMessage()) + '<br />';
});
streamingCall.on('status', (status) => {
if (status.code == 0) {
resultText.innerHTML += 'Done';
} else {
resultText.innerHTML += 'Error: ' + htmlEscape(status.details);
}
});
} else {
streamingCall.cancel();
streamingCall = null;
sendInput.disabled = false;
streamInput.value = 'Start server stream';
}
};
function htmlEscape(str) {
return String(str)
.replace(/&/g, '&amp;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#39;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;');
}

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