我有几个 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 应用程序下运行,但我找不到任何不同的东西可以解释为什么该检查器不起作用。检查器不工作的服务也是从不同的基类派生的,但是我从该基类中删除了所有代码,但仍然没有调用该方法。
我打开了消息跟踪,确实看到客户端正在调用正确的端点。
有谁知道为什么会发生这种情况或如何更好地调试它?