C # grpc соединение не удается при попытке подключиться через веб-API .net core 2.1 - PullRequest
0 голосов
/ 06 февраля 2019

Итак, я настроил проект веб-API с помощью простого консольного приложения, работающего в качестве сервера, для приема удаленного вызова из интерфейса веб-API.Я запускаю его через визуальную студию IIS.Сначала я подумал, что экземпляр IIS-сервера вращается, вызывает проблему и не может найти работающую службу.

Код контроллера:

// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
  Channel channel = new  Channel("0.0.0.0:50051", ChannelCredentials.Insecure);

  var client = new Greeter.GreeterClient(channel);


  String user = "you";
  try
  {
    var reply = client.SayHello(new HelloRequest { Name = "user" });


    var reply2 = client.SayHelloAgain(new HelloRequest { Name = user }, new CallOptions().WithWaitForReady(true));


    channel.ShutdownAsync().Wait();

    return new string[] { reply.Message, reply2.Message };
  }

  catch(Exception e)
  {
    return null;   
  }

Сервер выглядит следующим образом:

public class CustomerManager : Greeter.GreeterBase
  {
    // Server side handler of the SayHello RPC
    public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
    {
      return Task.FromResult(new HelloReply { Message = "Hello customer " + request.Name });
    }
    public override Task<HelloReply> SayHelloAgain(HelloRequest request, ServerCallContext context)
    {
      return Task.FromResult(new HelloReply { Message = "The second time I have had to tell you from the customer " + request.Name });
    }
  }
    class Program
    {
      const int Port = 50051;

      public static void Main(string[] args)
      {
        Server server = new Server
        {
          Services = { Greeter.BindService(new CustomerManager()) },
          Ports = { new ServerPort("127.0.0.1", Port, ServerCredentials.Insecure) }
        };
        server.Start();



        Console.WriteLine("Greeter server listening on port " + Port);
        Console.WriteLine("Press any key to stop the server...");
        Console.ReadKey();

        server.ShutdownAsync().Wait();
      }
    }
}

трассировка стека:

в Grpc.Core.Internal.AsyncCall 2.UnaryCall(TRequest msg) in T:\src\github\grpc\src\csharp\Grpc.Core\Internal\AsyncCall.cs:line 78 at Grpc.Core.DefaultCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method 2 метод, хост String, параметры CallOptions, запрос TRequest) в T: \ src \ github \ grpc \ src \ csharp \ Grpc.Core \DefaultCallInvoker.cs: строка 46 в Grpc.Core.Interceptors.InterceptingCallInvoker.b__3_0 [TRequest, TResponse] (TRequest req, контекст ClientInterceptorContext 2 ctx) in T:\src\github\grpc\src\csharp\Grpc.Core\Interceptors\InterceptingCallInvoker.cs:line 51 at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext 2, метод BlockingUnaryCallContinuation 2 continuation) in T:\src\github\grpc\src\csharp\Grpc.Core\ClientBase.cs:line 174 at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method 2, методы запроса запроса String, узел String T): \ src \ github \ grpc \ src \ csharp \ Grpc.Core \ Interceptors \ InterceptingCallInvoker.cs: строка 48 в Helloworld.Greeter.GreeterClient.SayHello (запрос HelloRequest, параметры CallOptions) в C: \ Users \ x165572 \ source \ repos\ grpc \ examples \ csharp \ Helloworld \ Greeter \ obj \ Debug \ netstandard1.5 \ HelloworldGrpc.cs: строка 120 в Helloworld.Greeter.GreeterClient.SayHello (запрос HelloRequest, заголовки метаданных, конечный срок Nullable`1, отмена CancellationTokenМаркер) в C: \ Users \ x165572 \ source \ repos \ grpc \ examples \ csharp \ Helloworld \ Greeter \ obj \ Debug \ netstandard1.5 \ HelloworldGrpc.cs: строка 110 в CustomerClient.Controllers.ValuesController.Get () в C: \ Users \ x165572 \ source \ repos \ grpc \ examples \ csharp \ Helloworld \ CustomerClient \ Controllers \ ValuesController.cs: строка 27

Это работает, потому что у меня есть простое консольное приложение, которое являетсявыступать в роли клиента и без проблем подключаться.

...