У меня есть служба 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-адресу?