{"id":19991170,"url":"https://github.com/netcore-jroger/SimpleRpc","last_synced_at":"2025-05-04T10:31:10.273Z","repository":{"id":38152354,"uuid":"183840226","full_name":"netcore-jroger/SimpleRpc","owner":"netcore-jroger","description":"A light-weight RPC wrap of google gRPC framework.","archived":false,"fork":false,"pushed_at":"2024-04-14T13:24:11.000Z","size":91,"stargazers_count":18,"open_issues_count":0,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-09T17:46:38.887Z","etag":null,"topics":["grpc","grpc-net-core","rpc"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/netcore-jroger.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-28T01:46:55.000Z","updated_at":"2025-04-09T10:49:28.000Z","dependencies_parsed_at":"2024-04-13T08:45:22.951Z","dependency_job_id":null,"html_url":"https://github.com/netcore-jroger/SimpleRpc","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netcore-jroger%2FSimpleRpc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netcore-jroger%2FSimpleRpc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netcore-jroger%2FSimpleRpc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netcore-jroger%2FSimpleRpc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/netcore-jroger","download_url":"https://codeload.github.com/netcore-jroger/SimpleRpc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252320141,"owners_count":21729072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["grpc","grpc-net-core","rpc"],"created_at":"2024-11-13T04:51:38.935Z","updated_at":"2025-05-04T10:31:09.629Z","avatar_url":"https://github.com/netcore-jroger.png","language":"C#","funding_links":[],"categories":["C\\#"],"sub_categories":[],"readme":"# SimpleRpc\nA light-weight RPC wrap of google gRPC framework.\n\n![Build Status](https://github.com/netcore-jroger/SimpleRpc/workflows/SimpleRpc-CI/badge.svg)\n![GitHub](https://img.shields.io/github/license/netcore-jroger/SimpleRpc.svg)\n\n| **Package** | **NuGet** |\n| --- | --- |\n| SimpleRpc.Shared | ![Nuget](https://img.shields.io/nuget/v/SimpleRpc.Shared.svg) |\n| SimpleRpc.Server | ![Nuget](https://img.shields.io/nuget/v/SimpleRpc.Server.svg) |\n| SimpleRpc.Client | ![Nuget](https://img.shields.io/nuget/v/SimpleRpc.Client.svg) |\n\n## Getting Started\n\n```csharp\n// gRPC Client side\nvar configuration = new ConfigurationBuilder()\n    .AddJsonFile(\"appsettings.json\", false, true)\n    .Build();\nvar provider = new ServiceCollection()\n    .AddRpcClient(configuration)\n    .AddRpcClientService\u003cIUserService\u003e()\n    .BuildServiceProvider();\n```\n\n#### Unary\n```csharp\n// gRPC Client side\nvar tokenSource = new CancellationTokenSource(1000 * 60 * 2);\nvar userService = provider.GetService\u003cIUserService\u003e();\nvar userDto = await userService.GetUserBy(userRequest, tokenSource.Token);\n\n```\n\n#### ClientStreaming\n```csharp\n// gRPC Client side\nvar tokenSource = new CancellationTokenSource(1000 * 60 * 2);\nvar rpcChannel = provider.GetService\u003cIRpcChannel\u003e();\nvar call = rpcChannel.AsyncClientStreamingCall\u003cUserDto, UserDto\u003e(\"greet.Greeter\", \"TestClientStreaming\", tokenSource.Token);\nawait call.RequestStream.WriteAsync(new UserDto { Id = 1, Name = \"abc1\" });\nawait call.RequestStream.WriteAsync(new UserDto { Id = 2, Name = \"abc2\" });\nawait call.RequestStream.CompleteAsync();\nvar userDto = await call;\n\nConsole.WriteLine($\"Id: {userDto.Id}, Name: {userDto.Name}, CreateDate: {userDto.CreateDate:yyyy-MM-dd HH:mm:ss fff}\");\n```\n\n// gRPC Server side\n- see `IUserService.cs` line: 19-20\n- see `UserService.cs` line: 36-50\n\n#### ServerStreaming\n```csharp\n// gRPC Client side\nvar tokenSource = new CancellationTokenSource(1000 * 60 * 2);\nvar rpcChannel = provider.GetService\u003cIRpcChannel\u003e();\nvar call = rpcChannel.AsyncServerStreamingCall\u003cUserRequest, UserDto\u003e(\"greet.Greeter\", \"TestServerStreaming\", new UserRequest { Id = 1, Keyword = $\"client[ServerStreaming]1: {input}\" }, tokenSource.Token);\nawait call.ResponseStream.MoveNext(tokenSource.Token).ConfigureAwait(false);\nvar userDto = call.ResponseStream.Current;\nConsole.WriteLine($\"ServerStreaming: Id: {userDto.Id}, Name: {userDto.Name}, CreateDate: {userDto.CreateDate:yyyy-MM-dd HH:mm:ss fff}\");\n\nawait call.ResponseStream.MoveNext(tokenSource.Token).ConfigureAwait(false);\nuserDto = call.ResponseStream.Current;\nConsole.WriteLine($\"ServerStreaming: Id: {userDto.Id}, Name: {userDto.Name}, CreateDate: {userDto.CreateDate:yyyy-MM-dd HH:mm:ss fff}\");\n```\n\n// gRPC Server side\n- see `IUserService.cs` line: 22-23\n- see `UserService.cs` line: 52-76\n\n#### DuplexStreaming\n```csharp\nvar tokenSource = new CancellationTokenSource(1000 * 60 * 2);\nvar rpcChannel = provider.GetService\u003cIRpcChannel\u003e();\nvar call = rpcChannel.AsyncDuplexStreamingCall\u003cUserRequest, UserDto\u003e(\"greet.Greeter\", \"TestDuplexStreaming\", tokenSource.Token);\nawait call.ResponseStream.MoveNext(tokenSource.Token).ConfigureAwait(false);\nvar userDto = call.ResponseStream.Current;\nConsole.WriteLine($\"DuplexStreaming: Id: {userDto.Id}, Name: {userDto.Name}, CreateDate: {userDto.CreateDate:yyyy-MM-dd HH:mm:ss fff}\");\n\nawait call.ResponseStream.MoveNext(tokenSource.Token).ConfigureAwait(false);\nuserDto = call.ResponseStream.Current;\nConsole.WriteLine($\"DuplexStreaming: Id: {userDto.Id}, Name: {userDto.Name}, CreateDate: {userDto.CreateDate:yyyy-MM-dd HH:mm:ss fff}\");\n\nawait call.RequestStream.WriteAsync(new UserRequest { Id = 1, Keyword = $\"client[DuplexStreaming]1 - {input}\" });\nawait call.RequestStream.WriteAsync(new UserRequest { Id = 2, Keyword = $\"client[DuplexStreaming]2 - {input}\" });\nawait call.RequestStream.CompleteAsync();\n```\n\n// gRPC Server side\n- see `IUserService.cs` line: 25-26\n- see `UserService.cs` line: 78-107\n\n## Roadmap\n\n- [x] Unary supported.\n\n- [x] ClientStreaming supported.\n\n- [x] ServerStreaming supported.\n\n- [x] DuplexStreaming supported.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetcore-jroger%2FSimpleRpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetcore-jroger%2FSimpleRpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetcore-jroger%2FSimpleRpc/lists"}