2

バック エンド サービスに送信する前に、WCF ルーティング サービスで各メッセージの HTTP ヘッダーを追加する必要があります。以下のクラスを実装しました。ただし、デバッグ時に「BeforeSendRequest」が呼び出されないため、HTTP ヘッダー ic が追加されません。

「AfterReceiveRequest」が呼び出されていることに気付き、HTTP ヘッダーを追加しましたが、これはヘッダーがバックエンス サーバーに送信されていないことがわかりました。

「BeforeSendRequest」が呼び出されたときに追加する必要がありますが、これはトリガーされません。

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;
    }
}
4

1 に答える 1

0

この問題は、以下のソリューションで解決されます。

ルーティング先のサービスまたはエンドポイントの SOAPProcessingBehavior を無効にします (ルーティング構成で)。このリンクは、その方法を教えてくれます: http://msdn.microsoft.com/en-us/library/ee816919.aspx

于 2011-04-21T15:23:36.203 に答える