说明
RPC服务在被调用是,可以使用实现IRpcActionFilter的特性(Attribute),进行相关AOP操作。
声明特性
class MyRpcActionFilterAttribute : Attribute, IRpcActionFilter{/// <summary>/// 在执行RPC之前。/// <para>当<paramref name="invokeResult"/>的InvokeStatus不为<see cref="InvokeStatus.Ready"/>。则不会执行RPC</para>/// <para>同时,当<paramref name="invokeResult"/>的InvokeStatus为<see cref="InvokeStatus.Success"/>。会直接返回结果</para>/// </summary>/// <param name="caller"></param>/// <param name="invokeResult"></param>/// <param name="methodInstance"></param>/// <param name="ps"></param>public void Executing(object caller, ref InvokeResult invokeResult, MethodInstance methodInstance, object[] ps){if (caller is TcpTouchRpcSocketClient client){client.Logger.Message($"即将执行RPC-{methodInstance.Name}");}}/// <summary>/// 成功执行后。/// <para>如果修改<paramref name="invokeResult"/>的InvokeStatus,或Result。则会影响RPC最终结果</para>/// </summary>/// <param name="caller"></param>/// <param name="invokeResult"></param>/// <param name="methodInstance"></param>public void Executed(object caller, ref InvokeResult invokeResult, MethodInstance methodInstance){if (caller is TcpTouchRpcSocketClient client){client.Logger.Message($"执行RPC-{methodInstance.Name}完成,状态={invokeResult.Status}");}}/// <summary>/// 执行遇见异常。/// <para>如果修改<paramref name="invokeResult"/>的InvokeStatus,或Result。则会影响RPC最终结果</para>/// </summary>/// <param name="caller"></param>/// <param name="invokeResult"></param>/// <param name="methodInstance"></param>/// <param name="exception"></param>public void ExecutException(object caller, ref InvokeResult invokeResult, MethodInstance methodInstance, Exception exception){if (caller is TcpTouchRpcSocketClient client){client.Logger.Message($"执行RPC-{methodInstance.Name}异常,信息={invokeResult.Message}");}}}
使用
[Description("性能测试")][TouchRpc][MyRpcActionFilter]public int Performance(int a){return a;}
