我有几个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应用程序下运行,但我找不到任何可以解释为什么此检查器无法工作的不同内容。 检查员不工作的服务也来自不同的基类,但是我从该基类中删除了所有代码,但仍未调用该方法。
我打开了邮件跟踪,确实看到客户端正在调用正确的端点。
有谁知道为什么会发生这种情况或者我如何更好地调试它?
答案 0 :(得分:0)
但是我没有实现IInstanceContextProvider就让它工作了。 只需通过contractbehavior而不是端点行为来连接您的检查器对象。