gRP C потоковая процедура, возвращающая «Метод не реализован». при работе в Azure Экземпляре контейнера - PullRequest
0 голосов
/ 06 марта 2020

У меня есть служба gRP C, определенная и реализованная в do tnet core 3.1 с использованием C#. У меня есть потоковый вызов, определенный так:

service MyService {
    rpc MyStreamingProcedure(Point) returns (stream ResponseValue);
}

В сервисе он генерируется

public virtual global::System.Threading.Tasks.Task MyStreamingProcedure(global::MyService.gRPC.Point request, grpc::IServerStreamWriter<global::MyService.gRPC.ResponseValue> responseStream, grpc::ServerCallContext context)
  {
    throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
  }

В моем сервисе это реализовано путем переопределения этого:

public override async Task MyStreamingProcedure(Point request, IServerStreamWriter<ResponseValue> responseStream, ServerCallContext context)
{ 
    /* magic here */ 
}

У меня есть это здание в docker контейнере, и когда я запускаю его на локальном хосте, оно отлично работает:

docker run -it -p 8001:8001 mycontainerregistry.azurecr.io/myservice.grpc:latest

Теперь возникает вопрос. Когда я запускаю это в Azure Container Instance и вызываю клиента, используя общедоступный c IP-адрес, вызов завершается неудачно с

Необработанное исключение. Grp c .Core.RpcException: Status (StatusCode = Unimplemented, Detail = "Метод не реализован.") В Grp c. Net .Client.Internal.HttpContentClientStreamReader`2.MoveNextCore (CancellationToken cancellationToken)

Похоже, что он не видит переопределения и выполняет процедуру в базовом классе. Унарный вызов той же службы gRP C работает нормально, используя контейнер, работающий в publi c ACI. Почему потоковый вызов ведет себя по-разному на локальном хосте и работает по общедоступному c IP-адресу?

...