2017-06-16 17 views
0

基本認証を必要とするWebサービスがあります。小さなJavaプログラムでテストします。基本C#を使用したWebサービスへの認証

、実質的に:

... 
String authorization = s + ':' + (s1 != null ? s1 : ""); 
authorization = Base64.getEncoder().encodeToString(authorization2.getBytes()); 
httpurlconnection.setRequestProperty("Authorization", "Basic " + authorization); 
.... 

これが正常に動作します。しかし、私はこれをC#プログラムで扱わなければなりません。 wsdlファイルをインポートしてプロジェクトに「サービスリファレンス」を追加します。

WSHttpBinding binding = new WSHttpBinding(); 
binding.Name = "pisconfigwebserviceSOAP"; 
EndpointAddress epAdd = new EndpointAddress(remoteAddress); 
myWebserviceClient client = new myWebserviceClient(binding, epAdd); 

ContractDescription cd = ContractDescription.GetContract(typeof(myWebservice), typeof(myWebserviceClient)); 
    client.Endpoint.Contract = cd; 

// this part should add the Basic Authentication to the header. Or not? 
using (OperationContextScope scope = new OperationContextScope(client.InnerChannel)) { 
    var httpRequestProperty = new HttpRequestMessageProperty(); 
    httpRequestProperty.Headers.Add(HttpRequestHeader.Authorization, "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(mUserName + ":" + mPassword))); 
    OperationContext.Current.OutgoingMessageProperties.Add(HttpRequestMessageProperty.Name, httpRequestProperty); 

    int result = client.AddOrUpdate(obj); 
} 

私は私が間違っているのかわからない、多くの多くの異なるものを試してみて、私はここにこだわっています: は、検索の多くの後、私はこれが取引になると思います。 私は助けていただければ幸いです。おかげで

答えて

0

あなたのコードの最後のセクションでこれを試してください。これをテストすると、「Authorization」ヘッダーにデータが入力されていることがわかります。

using (var scope = new OperationContextScope(client.InnerChannel)) 
{ 
    var hrmp = new HttpRequestMessageProperty(); 
    hrmp.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(mUserName + ":" + mPassword)); 

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

    int result = client.AddOrUpdate(obj); 
} 
関連する問題