我正在创建一个 grpc 客户端-服务器项目。对于每个客户,我想实例化一个不同的对象:
我的客户类看起来像:
static void Main(string[] args)
{
Channel channel = new Channel("localhost", 5001,SslCredentials.Insecure);
var client = new Greeter.GreeterClient(channel);
var client2 = new Greeter.GreeterClient(channel);
String user = "Alice";
String user2 = "Bob";
var reply = client.putName(new HelloRequest { Name = user });
Console.WriteLine(reply.Message);
var reply2 = client2.putName(new HelloRequest { Name = user2 });
Console.WriteLine(reply2.Message);
reply = client.getName();
Console.WriteLine(reply.Message);
reply2 = client2.getName();
Console.WriteLine(reply2.Message);
reply = client.modifyName(new HelloRequest { Name = "Frank" });
Console.WriteLine(reply.Message);
reply2 = client2.modifyName(new HelloRequest { Name = "Russel" });
Console.WriteLine(reply2.Message);
}
public class GreeterService : Greeter.GreeterBase
{
private IName n;
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger,IName n)
{
this.n = n;
_logger = logger;
}
public override Task<HelloReply> putName(HelloRequest request, ServerCallContext context)
{
n.SetName(request.Name);
return Task.FromResult(new HelloReply
{
Message = "User changed"
});
}
public override Task<HelloReply> getName(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply
{
Message = this.name
});
}
public override Task<HelloReply> modifyName(HelloRequest request, ServerCallContext context)
{
string new_name= n.SetName(request.Name);
return Task.FromResult(new HelloReply
{
Message = "Hello " + new_name
});
}
}
我还在Startup.csservices.AddSingleton<IName>(new Name("name"));
中添加了ConfigureServices方法。
运行我的客户端的结果是:
> User changed
> User changed
> Bob
> Bob
> Hello Frank
> Hello Russel
相反,我希望服务器保留每个Name
对象的实例以及结果输出:
> User changed
> User changed
> Alice
> Bob
> Hello Frank
> Hello Russel
这可能使用 gRPC 吗?