2017-01-30 11 views
1

私はWSDLを使用しており、Webサービスメソッドとも呼ばれています。リクエストには、要求が行われた時点でのみ追加できるAuthorizationヘッダーがあります。サービス参照SOAPリクエストに承認ヘッダーを追加する

public static NumberCaptureClient Connect() 
    { 
     var remoteAddress = new EndpointAddress("https://website.com:8443/webservice/WebServiceNumberCapture"); 

     using (var NumberCaptureClient = new NumberCaptureClient(new BasicHttpBinding(BasicHttpSecurityMode.Transport), remoteAddress)) 
     { 
      NumberCapture.ClientCredentials.UserName.UserName = "test"; 
      NumberCapture.ClientCredentials.UserName.Password = "test"; 

      try 
      { 
       using (OperationContextScope scope = new OperationContextScope(NumberCaptureClient.InnerChannel)) 
       { 
        var httpRequestProperty = new HttpRequestMessageProperty(); 

        httpRequestProperty.Headers[HttpRequestHeader.Authorization] = "Basic " + 
        Convert.ToBase64String(Encoding.ASCII.GetBytes(NumberCaptureClient.ClientCredentials.UserName.UserName + ":" + NumberCaptureClient.ClientCredentials.UserName.Password)); 

        OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty; 
       } 

      } 
      catch (Exception error) 
      { 
       MessageBox.Show("Error"); 
       return null; 
      } 

      return NumberCaptureClient; 
     }  
    } 

私はプロキシクライアントのインスタンスを返す必要がありますが(クライアントはすべてヘッダーが必要なメソッドを用意しています)、ヘッダーが常に送信されるようにする必要があります。スコープが外部で失われるため、これは不可能です。

ヘッダーを永久に追加して、Webサービスに要求ごとに送信する方法はありますか?

答えて

1

これはWCFプロキシです。一般的に言えば、Connectメソッドからusingを削除する必要があります。メソッドが準備されたサービスプロキシを取得するために使用される場合、それを作成するメソッドの一部としてそれを処理することは意味がありません。

代わりに、Connect方法はそれusingの責任を負わなければならない使用方法/コード:

using(var proxy = theClass.Connect()) 
{ 
    // call service using proxy here 

    // process response here, if you may need to call the service again 
    // as part of processing 
} 
// process response here if you don't need to call the service again 

WCFプロキシに、Dispose方法は内部Closeメソッドを呼び出しますので、キャッチは、しかしあり、その例外をスローすることができます。このため、マイクロソフトはWCFプロキシのクリーンアップの処理方法を推奨しています。 hereを参照してください。

+0

ありがとうございました。完璧に今働いている。 –

関連する問題