Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds MapGrpcService overload for ServerServiceDefinition #2535

Conversation

aka-nse
Copy link

@aka-nse aka-nse commented Sep 15, 2024

Is your feature request related to a problem? Please describe.

This PR is implement for #2236.

ServerServiceDefinition is defined in Grpc.Core.Api library, and it was a prefer way to implement gRPC server with Grpc.Core.
In current grpc-dotnet, the server should be implemented on Asp.Net web application DI container via GrpcEndpointRouteBuilderExtensions.MapGrpcService generic method.
The APIs in this proposal bridges legacy way into grpc-dotnet to enable to migrate easier.

Describe the solution you'd like

2 overloads of GrpcEndpointRouteBuilderExtensions.MapGrpcService are added:

public static class GrpcEndpointRouteBuilderExtensions
{
    public static GrpcServiceEndpointConventionBuilder MapGrpcService(
        this IEndpointRouteBuilder builder,
        ServerServiceDefinition serviceDefinition);

    public static GrpcServiceEndpointConventionBuilder MapGrpcService(
        this IEndpointRouteBuilder builder,
        Func<IServiceProvider, ServerServiceDefinition> getServiceDefinition);
}

This change enables to map gRPC services via Grpc.Core.ServerServiceDefinition, therefore migration from Grpc.Core can be more easier.

Changes in this PR

  • Grpc.Core.Api

    • makes Grpc.Core.ServerServiceDefinition.BindService(ServiceBinderBase) method as public*
  • Grpc.AspNetCore.Server

    • adds new extension methods in Microsoft.AspNetCore.Builder.GrpcEndpointRouteBuilderExtensions class
      • MapGrpcService(this IEndpointRouteBuilder, ServerServiceDefinition)*
      • MapGrpcService(this IEndpointRouteBuilder, Func<IServiceProvider, ServerServiceDefinition>)*
    • appends service entries of ServerCallHandlerFactory and ServiceRouteBuilder (non-generic) on Microsoft.Extensions.DependencyInjection.AddServiceOptions method**
    • adds new class Grpc.AspNetCore.Server.Internal.EndpointServiceBinder to bind methods in ServerServiceDefinition into ASP.Net core web application server*
    • adds following internal classes that bind service via delegate instances instead of type argument:
      • Grpc.AspNetCore.Server.Internal.ServerCallHandlerFactory class*
      • Grpc.AspNetCore.Server.Model.Internal.ServiceRouteBuilder class*
      • ServerCallHandlerBase*, UnaryServerCallhandler*, ServerStreamingServerCallHandler*, ClientStreamingServerCallHandler*, and DuplexStreamingServerCallHandler* classes in Grpc.AspNetCore.Server.Internal.CallHandlers namespace
      • ServerMethodInvokerBase*, UnaryServerMethodInvoker*, ServerStreamingServerMethodInvoker*, ClientStreamingServerMethodInvoker*, and DuplexStreamingServerMethodInvoker* classes in Grpc.Shared.Server namespace
    • extracts shared interface between ServerCallHandlerFactory and ServerCallHandlerFactory<TService> into IServerCallHandlerFactory*
  • test

    • adds test cases for new overloads of MapGrpcService
  • examples

    • modifies examples/README.md
    • adds new example project examples/GreeterByServiceDefinition
    • appends implementation of Grpc.AspNetCore.Server.Tests.TestObjects.Services.WithAttribute.GreeterWithAttribute.BindService method

Describe alternatives you've considered

This commit contains concrete code as far as I can write, but I do not care about these implementations.
I welcome better ways to realize this suggestion.

Additional context

No response

JamesNK and others added 30 commits September 1, 2022 21:34
…ot (#1909)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
#1911)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
#1910)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Update version to 2.50.0-pre1 (on v2.50.x branch)

* Update VersionInfo.cs
…#1957)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
#1958)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
wabalubdub and others added 2 commits September 12, 2024 22:31
…ServerServiceDefinition (#1)

* support MapGrpcService with ServerServiceDefinition

* support MapGrpcService with ServerServiceDefinition

* rename sample solution file

* create factory method

* remove extra using

* fix sample project for ServerServiceDefinition mapping

* implement Metadata creation for ServerServiceDefinition

* implement unit test for MapGrpcService for ServerServiceDefinition

---------

Co-authored-by: aka-nse <nakased.1220@gmail.com>
Copy link

linux-foundation-easycla bot commented Sep 15, 2024

CLA Signed

The committers listed above are authorized under a signed CLA.

dependabot bot and others added 23 commits September 16, 2024 21:54
…ntApp (#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](expressjs/serve-static@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>
…2567)

Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.7 to 6.6.0.
- [Commits](indutny/elliptic@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>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ebWebsite/Tests (#2574)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: James Newton-King <james@newtonking.com>
…ServerServiceDefinition (#1)

* support MapGrpcService with ServerServiceDefinition

* support MapGrpcService with ServerServiceDefinition

* rename sample solution file

* create factory method

* remove extra using

* fix sample project for ServerServiceDefinition mapping

* implement Metadata creation for ServerServiceDefinition

* implement unit test for MapGrpcService for ServerServiceDefinition

---------

Co-authored-by: aka-nse <nakased.1220@gmail.com>
@aka-nse aka-nse force-pushed the feature/MapGrpcService-with-ServerServiceDefinition branch from 4606a64 to e2789f3 Compare December 16, 2024 13:07
@aka-nse aka-nse closed this Dec 16, 2024
@aka-nse aka-nse deleted the feature/MapGrpcService-with-ServerServiceDefinition branch December 16, 2024 13:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.