c# - 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, inputs, ex);
throw;
}
}
public bool IsSynchronous => _baseInvoker.IsSynchronous;
public object[] AllocateInputs() => _baseInvoker.AllocateInputs();
public IAsyncResult InvokeBegin(object instance, object[] inputs, AsyncCallback callback, object state)
{
try
{
var asyncResult = _baseInvoker.InvokeBegin(instance, inputs, callback, state);
return asyncResult;
}
catch (Exception ex)
{
LogOperationException(_operationDescription.Name, inputs, 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, inputs, ex);
throw;
}
}
}
如果 _baseInvoker.InvokeBegin 抛出异常,我需要记录 InvokeBegin 函数的“输入”参数。我想我应该使用 _baseInvoker.InvokeBegin 的“状态”参数,但我现在不知道如何传递我的自定义参数而不是“状态”,函数永远不会结束。使用调试器检查代码,“state”参数似乎是一个 System.ServiceModel.Dispatcher.MessageRpc.Wrapper 对象。
有什么建议么?谢谢
解决方案
推荐阅读
- java - 如何在 Spring Boot 中禁用 Jolokia 的写操作?
- python - 如何在 PYQTgraph 中更改 GlBarGraphItem 的默认颜色
- php - 在 TYPO3 插件中创建新内容 cType 时使用 FlexForm
- r - 构建一个“简单”的固定滚动窗口
- php - 登录php跳过登录
- python-3.x - 为什么返回 -1 而不是 201?
- vb.net - 在 Do While 循环中仅接受来自 InputBox VB.Net 的整数值
- apache - .htaccess 代理 slug 到另一个域
- php - Twig path() 函数生成不同的参数
- resize - 当我调整浏览器大小时,为什么我的列垂直重叠?