【问题标题】:Task parameter scope on gRPC servergRPC 服务器上的任务参数范围
【发布时间】:2022-12-24 03:59:38
【问题描述】:

我有一个从客户端调用的 gRPC 服务器任务。请求参数在任务范围内,我不知道如何检索它并在其他类中使用它。 在任务外打印“currentRequest”不返回任何内容。 非常感谢你的帮助。

public class LoggingImpl : Logging.LoggingBase
{
    private Server server;
    RequestInfo currentRequest;
    public ClientController controller;

    public override Task<LoggingResponse> LoggingMCM(RequestInfo request, ServerCallContext context)
    {
        currentRequest = request;
        Console.Log(currentRequest);
        return Task.FromResult(new LoggingResponse { Result = "this is a reply from Unity Server" });
    }

    public void GetRequestInfo()
    {
        Console.Log(currentRequest);
    }


    public void StartServer()
    {
        server = new Server
        {
            Services = { Logging.BindService(new LoggingImpl()) },
            Ports = { new ServerPort("127.0.0.1", 50010, ServerCredentials.Insecure) }

        };
        server.Start();
    }
}

我期待当前的 Request 可以在 Task 范围之外使用。如何在主线程和其他类上使用请求信息?

【问题讨论】:

    标签: c# .net unity3d grpc grpc-c#


    【解决方案1】:

    gRPC services are registered as transient(至少如果他们以标准方式注册),​​你的类的一个新实例登录实现将为服务的每个 gRPC 调用创建。

    使请求静态化可能会导致您期望的行为,因为它不会在每次调用时重新实例化(第 4 行):

    private static RequestInfo currentRequest;
    

    请记住,如果你想从请求中记录一条(字符串)消息,你仍然必须从请求中提取消息(因为你将整个对象传递给控制台获取请求信息()方法)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 2021-12-24
      • 2022-08-15
      • 1970-01-01
      • 2020-07-07
      相关资源
      最近更新 更多