调用上下文
定义
命名空间:TouchSocket.Rpc
程序集:TouchSocket.Rpc.dll
一、说明
Rpc服务的调用是无状态的,即只知道当前服务被调用,但无法得知是被谁调用,这个问题给日志记录、Rpc回调等带来了很多麻烦事。所以我们在设计Rpc时,也设计了调用上下文获取。
在上下文中可以获得调用者Caller
等信息,可以获得调用的IP或其他信息。
说明
调用上下文(ICallContext
)实例每次请求都会创建,所以,不要在上下文中存放一些需要长期使用的数据。
二、使用
2.1 通过传参获得
当服务是单例注册时,服务方法可能会被并发调用,所以,调用上下文必须从参数获得传入。
步骤:
定义的服务方法的第一个参数
使用ICallContext
或其派生类(例如:DmtpRpc
可以使用IDmtpRpcCallContext
)。
public class MyRpcServer : RpcServer
{
[Description("登录")]
[DmtpRpc]
public bool Login(ICallContext callContext,string account,string password)
{
if (callContext.Caller is TcpDmtpSessionClient)
{
Console.WriteLine("TcpDmtpRpc请求");
}
if (account=="123"&&password=="abc")
{
return true;
}
return false;
}
}