{"id":17956160,"url":"https://github.com/sleipnir/cloudstate-csharp","last_synced_at":"2025-04-03T17:18:37.790Z","repository":{"id":138952423,"uuid":"224856154","full_name":"sleipnir/cloudstate-csharp","owner":"sleipnir","description":null,"archived":false,"fork":false,"pushed_at":"2020-02-06T17:05:13.000Z","size":265,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-09T05:44:47.860Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sleipnir.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-11-29T13:07:07.000Z","updated_at":"2022-10-31T00:55:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"2d82f30a-5313-4cbf-9869-40fe231ea2ba","html_url":"https://github.com/sleipnir/cloudstate-csharp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sleipnir%2Fcloudstate-csharp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sleipnir%2Fcloudstate-csharp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sleipnir%2Fcloudstate-csharp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sleipnir%2Fcloudstate-csharp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sleipnir","download_url":"https://codeload.github.com/sleipnir/cloudstate-csharp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247043352,"owners_count":20874087,"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":[],"created_at":"2024-10-29T10:35:11.216Z","updated_at":"2025-04-03T17:18:37.758Z","avatar_url":"https://github.com/sleipnir.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Purpose\n\nThis repo is a csharp dotnet implementation of the cloudstate.io\nuser service provider protocol.  \n\n\u003e Note: This README is a bit dated, so I plan to update it shortly.\n\n# Prerequisites\n\n- docker\n- dotnetcore 2.2 SDK\n- grpc_cli (for testing the gRPC endpoint - use your own if you prefer)\n- mac/linux (currently limited by build, setup scripts - but should be\n  cross platform eventually)\n\n# Running the sample\n\nCheck out the examples/ShoppingCart folder for detailed instructions.\n\n# Discussion\n\n## gRPC Library\n\nThere are two common gRPC implementations for dotnet.  \n\n- C Core Wrapper - https://github.com/grpc/grpc/tree/master/src/core\n- Native C# - https://github.com/grpc/grpc-dotnet\n\nThe native C# implementation requires services to be registered by \nproviding a concrete class to the route builder.  And at first glance\nit did not seem possible to implement the cloudstate protocol this way.\nHowever, I reached that conclusion in the early stages of writing this\ncode so it may actually be possible now given that I understand the \nframework a lot better now.\n\nAdditionally, the Native C# implementation is only supported by netcore\n3.0 which is still in early days of adoption.  Comparatively, the C core\nimplementation is supported by netcore 2.0.  Adopting the C core library\nallows us a wider array of adoption, but we may be able to deliniate \nuser-function code away from the service code in a way that allows \nthe user-functions to be written in any netstandard 1.0 compatible library.\n\nBased on the above, I've chosen the C Core implementation of gRPC for\nnow and may change that later on.\n\n## Protobuf Compilation\n\nCurrently there's an issue with OmniSharp (VSCode plugin that helps\norchestrate Roslyn and Intellisense) when adding a protobuf directive\nto a netcore 3.0 csproj.  Additionally, when adding the Grpc.Tools library\nto the project for build integration, we create a dependency on the \nGoogle.Protobuf library which does not fully support what we are setting \nout to achieve (_see 'Custom Libs' below).  So, protobuf compilation is \ncurrently provided by submodule repo.  Additionally, the examples/Template\nproject has been set up with a custom NuGet version of protobuf.\n\n## Custom Libs\n\nCurrently, there's some limitations in the protobuf csharp implementation.\nPrimarily, the descriptor proto that is used to send a file descriptor set\non discovery is internal.  (I raised an issue on github, but at this point\ndon't have enough info about the whole system to justify the request).\n\nAs a result, I've downloaded the protobuf binaries and have customised the\nfield so that we can carry on with this implementation.\n\nWill need to investigate the blockers caused by protobuf in order to ensure\nthat we can go ahead without customizing the protobuf library each time.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsleipnir%2Fcloudstate-csharp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsleipnir%2Fcloudstate-csharp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsleipnir%2Fcloudstate-csharp/lists"}