某些SOAP服务中未调用IDispatchMessageInspector.AfterReceiveRequest

时间:2015-09-28 00:59:16

标签: c# wcf debugging iis endpointbehavior

我有几个WCF SOAP服务,它们以编程方式公开一个IEndPointBehavior所附加的端点。

var endpoint = AddServiceEndpoint(contractType,
                                  basicBinding,
                                  address);
_logger.Write("Adding behavior for service {0}, contract: {1}", serviceName, cd.Value.ContractType);
endpoint.Behaviors.Add(new MyBehavior());

在行为类中,我将消息检查器添加到Dispatch运行时:

void IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint endpoint, 
        EndpointDispatcher endpointDispatcher)
{
    _logger.WriteError("Adding Inspector to endpoint {0}, contract {1}", endpoint.Address.ToString(), endpoint.Contract.Name);

    endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new MyInspector());
}

在消息检查器中,我实现了AfterReceiveRequest方法,如:

public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
    _logger.WriteError("AfterReceiveRequest for {0} via {1}", request.Headers.Action, request.Properties.Via);
     // implementation omitted...
     return null;
}

现在我可以看到我的所有服务的“添加行为”和“添加检查器”日志消息,但AfterReceiveRequest方法仅针对某些服务调用。

未调用该方法的服务在IIS中的其他Web应用程序下运行,但我找不到任何可以解释为什么此检查器无法工作的不同内容。 检查员不工作的服务也来自不同的基类,但是我从该基类中删除了所有代码,但仍未调用该方法。

我打开了邮件跟踪,确实看到客户端正在调用正确的端点。

有谁知道为什么会发生这种情况或者我如何更好地调试它?

1 个答案:

答案 0 :(得分:0)

但是我没有实现IInstanceContextProvider就让它工作了。 只需通过contractbehavior而不是端点行为来连接您的检查器对象。