Routing WCF路由服务IClientMessageInspector-->;在发送请求之前不调用
在发送到后端服务之前,我需要为WCF路由服务中的每条消息添加HTTP头。我已经实现了下面的类。但是,当我调试时,不会调用“BeforeSendRequest”,因此不会添加HTTP头ic 我注意到调用了“AfterReceiveRequest”,并添加了HTTP头,但发现头并没有发送到后台服务器 我需要在调用“BeforeSendRequest”时添加,但是,这不会触发Routing WCF路由服务IClientMessageInspector-->;在发送请求之前不调用,routing,wcf-routing,Routing,Wcf Routing,在发送到后端服务之前,我需要为WCF路由服务中的每条消息添加HTTP头。我已经实现了下面的类。但是,当我调试时,不会调用“BeforeSendRequest”,因此不会添加HTTP头ic 我注意到调用了“AfterReceiveRequest”,并添加了HTTP头,但发现头并没有发送到后台服务器 我需要在调用“BeforeSendRequest”时添加,但是,这不会触发 public class RouterMessageLogger : BehaviorExtensionElement, IC
public class RouterMessageLogger : BehaviorExtensionElement, IClientMessageInspector, IEndpointBehavior, IDispatchMessageInspector
{
public override Type BehaviorType
{
get
{
return typeof(RouterMessageLogger);
}
}
protected override object CreateBehavior()
{
return new RouterMessageLogger();
}
#region IClientMessageInspector Members
**public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
Message MyMsg = request;
this.AddHTTPHeader(ref request);
//_Logging.LogMessage("Routing message to service");
return null;
}**
public void AfterReceiveReply(ref Message reply, object correlationState)
{
Message MyMsg = reply;
//_Logging.LogMessage("Response from service received");
}
#endregion
#region IDispatchMessageInspector Members
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
Message MyMsg = request;
this.AddHTTPHeader( ref request);
//_Logging.LogMessage("Message received from client");
return request;
}
public void BeforeSendReply(ref Message reply, object correlationState)
{
Message MyMsg = reply;
this.AddHTTPHeader(ref reply);
//_Logging.LogMessage("Sending response to client");
}
#endregion
#region IEndpointBehavior Members
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{
bindingParameters.Add(this);
//return;
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.MessageInspectors.Add(this);
clientRuntime.CallbackDispatchRuntime.ImpersonateCallerForAllOperations = true;
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(this);
}
public void Validate(ServiceEndpoint endpoint)
{
return;
}
}
这个问题用下面的解决方案解决了
禁用要路由到的服务或终结点的SOAPProcessingBehavior(在路由配置中)。此链接告诉您如何操作:此问题通过以下解决方案解决
禁用要路由到的服务或终结点的SOAPProcessingBehavior(在路由配置中)。此链接告诉您如何执行此操作:您可以为该服务提供web.config(或app.config)设置吗?您可以为该服务提供web.config(或app.config)设置吗?