Saturn icon indicating copy to clipboard operation
Saturn copied to clipboard

use_grpc does not work with multiples services

Open joshuapassos opened this issue 3 years ago • 1 comments

Based from sample here

Add someone new service

let app = application {
  no_router
  listen_local 10042 (fun opts -> opts.Protocols <- HttpProtocols.Http2)
  use_grpc Service1
  use_grpc Service2
}

Only Service2 works

joshuapassos avatar May 17 '21 13:05 joshuapassos

To workaround, I created a new grpc to use interceptors and multiples services

type Saturn.Application.ApplicationBuilder with
    [<CustomOperation("grpc")>]
    member __.UseCustomGrpc(state) =
        let configureServices (services: IServiceCollection) =
            // services.AddGrpc(fun opt -> opt.Interceptors.Add<InterceptorTest>()) |> ignore
            services.AddGrpc() |> ignore
            services

        let configureApp (app: IApplicationBuilder) =
            app.UseRouting()

        let configureGrpcEndpoint (app: IApplicationBuilder) =
            app.UseEndpoints (fun endpoints -> endpoints.MapGrpcService<Service1>() |> ignore) |> ignore
            app.UseEndpoints (fun endpoints -> endpoints.MapGrpcService<Service2>() |> ignore) |> ignore
            app.UseEndpoints (fun endpoints -> endpoints.MapGrpcService<Service3>() |> ignore) |> ignore
            app

        { state with
            AppConfigs = configureApp::configureGrpcEndpoint::state.AppConfigs
            ServicesConfig = configureServices::state.ServicesConfig
        }

let app = application {
  no_router
  listen_local 10042 (fun opts -> opts.Protocols <- HttpProtocols.Http2)
  grpc
}

joshuapassos avatar May 17 '21 13:05 joshuapassos