调用上下文
一、说明
RPC服务是无状态的,即只知道当前服务被调用,但无法得知是被谁调用,这个问题给日志记录、RPC回调等带来了很多麻烦事。但是,Touch的Rpc支持调用上下文获取。在上下文中可以获得调用者(
ICaller
)信息等。
二、通过标签参数获取
步骤:
- Rpc标签需要传入
MethodFlags.IncludeCallContext
参数。 - 定义的服务的第一个参数必须是
ICallContext
或其派生类。 - 最后获得其Caller属性即可得到调用者。
public class MyRpcServer : RpcServer
{
[Description("登录")]
[TouchRpc(MethodFlags = MethodFlags.IncludeCallContext)]//使用调用上才文
public bool Login(ICallContext callContext,string account,string password)
{
if (callContext.Caller is TcpTouchRpcSocketClient)
{
Console.WriteLine("TcpTouchRpc请求");
}
if (account=="123"&&password=="abc")
{
return true;
}
return false;
}
}
三、通过瞬时生命周期获取
步骤:
- 继承TransientRpcServer或者实现ITransientRpcServer接口。
public class MyRpcServer : TransientRpcServer
{
[Description("登录")]
[TouchRpc]
public bool Login(string account,string password)
{
if ( this.CallContext.Caller is TcpTouchRpcSocketClient)
{
Console.WriteLine("TcpTouchRpc请求");
}
if (account=="123"&&password=="abc")
{
return true;
}
return false;
}
}