1

サードパーティのWSDLを使用しようとしています。サービスリファレンスとして追加しました。クライアントを初期化し、次のようにパラメータをクエリします。

var ltRequest = new SearchEmailAddressStatus 
            {
                 EmailAddress = emailAddressList.ToArray()
            };
var ltClient = new CommunicationPreferenceServiceClient
             {
                ClientCredentials =
                   {
                       UserName = 
                         {
                             UserName = ltProperties.CompanyCredential.UserName,
                             Password = ltProperties.CompanyCredential.Password
                         }
                     }
              };  
var ltResponse = ltClient.searchEmailAddressStatusWS(ltRequest);

Fiddlerでパケットを監視した後、Authヘッダーがサーバーに送信されないことに気付きました。リクエストに認証ヘッダーを手動で挿入する方法はありますか?

4

1 に答える 1

0

さて、たくさん掘った後、私は答えを見つけました。クライアントを宣言した後、次のコードを使用しました。

using (var scope = new OperationContextScope(ltClient.InnerChannel))
{
    var reqProperty = new HttpRequestMessageProperty();
    reqProperty.Headers[HttpRequestHeader.Authorization] = "Basic " 
             + Convert.ToBase64String(Encoding.ASCII.GetBytes(
               ltClient.ClientCredentials.UserName.UserName + ":" + 
               ltClient.ClientCredentials.UserName.Password));

    OperationContext.Current
        .OutgoingMessageProperties[HttpRequestMessageProperty.Name] = reqProperty;

    var ltResponse = ltClient.searchEmailAddressStatusWS(ltRequest);
}

これは、wsdlリクエスト内でカスタマイズされたヘッダーを取得するための最も汚い手段ではないと思います。誰かがもっと良い方法を持っているなら、私はそれを聞きたいです。

于 2013-02-28T04:24:00.697 に答える