1

SOA サービスを利用しようとしています。wsdl からサービス参照を生成し、バインディング構成でクライアント オブジェクトをインスタンス化します。これは basicHttpBinding です。

次に、カスタム動作とメッセージ インスペクターを実装し、以下に示すようなカスタム ヘッダー プロパティを追加します...

    public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
    {
        request.Properties.Add("CONTENT-TYPE", "text/xml;charset=UTF-8");
        request.Properties.Add("PropertyOne", "One");
        request.Properties.Add("PropertyTwo", "Two");

        return null;
    }

次に、サービスを利用しようとすると、常にエラーメッセージが表示されます

(502不正なゲートウェイ。

フィドラーを使用して、サービスに送信される生の http データを調べますが、カスタム プロパティはヘッダーにありません。

4

2 に答える 2

3

HttpRequestMessagePropertyカスタム HTTP ヘッダーをメッセージに追加するには、それらをメッセージ プロパティ バッグのインスタンスに追加する必要があります。

public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
    HttpRequestMessageProperty prop;
    if (request.Properties.ContainsKey(HttpRequestMessageProperty.Name))
    {
        prop = (HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name];
    }
    else
    {
        prop = new HttpRequestMessageProperty();
        request.Properties.Add(HttpRequestMessageProperty.Name, prop);
    }

    prop.Headers["Content-Type"] = "text/xml; charset=UTF-8";
    prop.Headers["PropertyOne"] = "One";
    prop.Headers["PropertyTwo"] = "Two";

    return null;
}
于 2013-03-12T15:28:19.567 に答える
0

私も似たようなことをしたかったのですが、WeboperationContext でうまくいきました

WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Accepted; WebOperationContext.Current.OutgoingResponse.Headers.Add("ヘッダー名", "ヘッダー値");

そしてそれは魅力のように働きました

于 2015-07-28T23:01:37.573 に答える