Docker gRPC流媒体程序返回“;方法尚未实现。”;在Azure容器实例中运行时

Docker gRPC流媒体程序返回“;方法尚未实现。”;在Azure容器实例中运行时,docker,.net-core,grpc,azure-container-instances,Docker,.net Core,Grpc,Azure Container Instances,我在dotnet core 3.1中使用C#定义并实现了一个gRPC服务。我有一个流调用,定义如下: service MyService { rpc MyStreamingProcedure(Point) returns (stream ResponseValue); } 在服务中,它是生成的 public virtual global::System.Threading.Tasks.Task MyStreamingProcedure(global::MyService.gRPC.Po

我在dotnet core 3.1中使用C#定义并实现了一个gRPC服务。我有一个流调用,定义如下:

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, ""));
  }
现在问题来了。当我在Azure容器实例中运行此操作并使用公共IP地址调用客户端时,调用失败,原因是

未处理的异常。Grpc.Core.RpcException:Status(StatusCode=Unimplemented,Detail=“方法未实现”) 位于Grpc.Net.Client.Internal.HttpContentClientStreamReader`2.MoveNextCore(CancellationToken CancellationToken)


它似乎没有看到覆盖,正在基类中运行过程。使用在公共ACI中运行的容器,对同一gRPC服务的一元调用可以正常工作。为什么流式调用在本地主机上和在公共IP地址上运行时会有不同的行为?

我收到了相同的错误,因为我没有注册服务

       app.UseEndpoints(endpoints =>
        {
            endpoints.MapGrpcService<MyService>();
           
        });
app.UseEndpoints(端点=>
{
endpoints.MapGrpcService();
});

如何部署映像?你介意和我分享这个图像吗?除非你的RPC是长寿命的,否则流媒体和一元RPC不太可能有什么不同。在HTTP2协议层,两种类型的rpc看起来是相同的。我认为在你的代码中有一些非常简单的东西你错过了。我认为也有可能是您无意中与旧版本的后端对话,而该版本没有您认为的代码。您解决过这个问题吗?在本地机器上运行docker时,我也会有同样的行为。我自己发现了错误。我有一个单独的项目中的原型文件。这个项目使用Grpc.Tools和服务器。这两个版本需要匹配(Grpc.Tools由Grpc.AspNetCore间接使用)。
docker run -it -p 8001:8001 mycontainerregistry.azurecr.io/myservice.grpc:latest
       app.UseEndpoints(endpoints =>
        {
            endpoints.MapGrpcService<MyService>();
           
        });