如何解决Wcf 操作调用程序,在 InvokeEnd 中记录输入参数
我遇到了 WCF 项目的问题。 我正在尝试扩展 wcf 行为,实现自定义操作调用程序以记录所有异常,保存操作名称和操作输入。同步函数没问题,但是异步函数我不知道如何在 InvokeEnd 中获取输入参数,这是我写的代码:
public class OperationInvokerWithLogger : IOperationInvoker
{
private IOperationInvoker _baseInvoker;
private DispatchOperation _operation;
private OperationDescription _operationDescription;
public OperationInvokerWithLogger(
OperationDescription operationDescription,DispatchOperation operation
)
{
_baseInvoker = operation.Invoker;
_operationDescription = operationDescription;
_operation = operation;
}
public object Invoke(object instance,object[] inputs,out object[] outputs)
{
try
{
return _baseInvoker.Invoke(instance,inputs,out outputs);
}
catch (Exception ex)
{
LogOperationException(_operationDescription.Name,ex);
throw;
}
}
public bool IsSynchronous => _baseInvoker.IsSynchronous;
public object[] AllocateInputs() => _baseInvoker.AllocateInputs();
public IAsyncResult InvokeBegin(object instance,AsyncCallback callback,object state)
{
try
{
var asyncResult = _baseInvoker.InvokeBegin(instance,callback,state);
return asyncResult;
}
catch (Exception ex)
{
LogOperationException(_operationDescription.Name,ex);
throw;
}
}
public object InvokeEnd(object instance,out object[] outputs,IAsyncResult result)
{
try
{
var taskResult = _baseInvoker.InvokeEnd(instance,out outputs,result);
return taskResult;
}
catch (Exception ex)
{
LogOperationException(_operationDescription.Name,ex);
throw;
}
}
}
如果 _baseInvoker.InvokeBegin 抛出异常,我需要记录 InvokeBegin 函数的“输入”参数。 我想我应该使用 _baseInvoker.InvokeBegin 的“state”参数,但我现在不知道如何,如果传递我的自定义参数而不是“state”,函数永远不会结束。 使用调试器检查代码,“state”参数似乎是 System.ServiceModel.Dispatcher.MessageRpc.Wrapper 对象。
有什么建议吗? 谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。