簡體   English   中英

gRPC 服務器上的任務參數范圍

[英]Task parameter scope on gRPC server

我有一個從客戶端調用的 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();
    }
}

我期望 currentRequest 可以在 Taks 范圍之外使用。 如何在主線程和其他類上使用請求信息?

由於gRPC 服務注冊為瞬態(至少如果它們以標准方式注冊),將為每次 gRPC 服務調用創建類LogginImpl的新實例。

使請求靜態化可能會導致您期望的行為,因為它不會在每次調用時重新實例化(第 4 行):

private static RequestInfo currentRequest;

請記住,如果您想從請求中記錄一條(字符串)消息,您仍然必須從請求中提取消息(因為您在GetRequestInfo()方法中將整個對象傳遞給了控制台)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM