重复rpc调用不会将新对象添加到队列中

问题描述 投票:0回答:1

我正在尝试实现一个简单的 gRPC 服务,客户端可以将任务排队到服务器。 我决定测试多个调用,其中客户端发送多个请求,但任务计数停留在 1。为了调试更多,我添加了一个简单的计数器,每当调用该方法时该计数器都会增加。由于某种原因,这两个值都停留在 1,但它表明该方法已被调用多次。我是否误解了 gRPC 协议的工作原理?

客户端代码

public async Task SendTaskToSchedulerAsync()
{
    using var channel = GrpcChannel.ForAddress(ClientData.schedulerAddress, new GrpcChannelOptions
    {
        HttpHandler = _handler
    });
    var client = new Scheduler.SchedulerClient(channel);
    var task = new gRPCreq_Task { Type = TaskType.TtGeneratePassword, NLoops = 30, WorkTime = 20 };
    try
    {
        for(int i = 0; i < 10; i++)
        {
            var response = await client.C_SendTaskAsync(task);
            Console.WriteLine($"Server responded with: {response.TaskStatus}");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error communicating with the server: {ex.Message}");
    }
}

Server Code:

 public override async Task<gRPCres_TaskStatus> C_SendTask(gRPCreq_Task request, ServerCallContext context)
 {

     _tasks.Enqueue(request);
     counter++;
     Console.WriteLine($"Queue size: {_tasks.Count}");
     Console.WriteLine($"Counter {counter}");
     return await Task.FromResult(new gRPCres_TaskStatus { TaskStatus = TaskStatus.TsTaskAccepted });
 }

Server Output:
Queue size: 1
Counter 1
Queue size: 1
Counter 1
Queue size: 1
Counter 1
Queue size: 1
Counter 1
Queue size: 1
Counter 1
Queue size: 1
Counter 1
Queue size: 1
Counter 1
Queue size: 1
Counter 1
Queue size: 1
Counter 1
Queue size: 1
Counter 1
c# protocol-buffers grpc
1个回答
0
投票

好吧,我设法在某个地方找到了答案。在 Program.cs 中我需要添加:

builder.Services.AddSingleton<MyService>();

我认为在添加该行之前,每个新调用都会创建一个新的服务实例。但我可能是错的。

© www.soinside.com 2019 - 2024. All rights reserved.