2016-09-06 5 views
0

でWebサービスを消費:リクエストがウェブに送信されは、私はこのコードでWebサービスを利用したいC#と基本認証

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="GenRelClientPortBinding"> 
     <security mode="TransportCredentialOnly"> 
      <transport clientCredentialType="Basic" /> 
     </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint 
      address="http://ws.domain.com/GenRel/GenRel" 
      binding="basicHttpBinding" 
      bindingConfiguration="GenRelClientPortBinding" 
      contract="WebService.GenRelClientPort" 
      name="GenRelClientPort" /> 
    </client> 
    </system.serviceModel> 
</configuration> 

WebService.GenRelClient client = new WebService.GenRelClient(); 
client.ClientCredentials.UserName.UserName = @"UserName"; 
client.ClientCredentials.UserName.Password = @"Password"; 
var response = client.returnString("test"); 

そして、私の設定は次のようになりますサービスは応答が返されます。これは、要求が資格情報なしで送信された可能性がありますので、基本認証が必要であるという誤ったメッセージが返されるため、間違いがどこにあるか分かりません。あなたはSOAPヘッダにセキュリティ情報を追加する必要がありますのWebサービスを呼び出すことができるようにするには

はあなたの助け

+0

私はこの質問は、タイトル「どのようにWebサービスへのユーザーの資格情報を渡すように」との質問の重複であることを同意しません。 Bushwackaが直面する問題は、サーバーがPreemptive認証を使用するように構成されていることです。クライアントがSOAPヘッダーで認証情報を送信する必要がある非常に特殊なケースです。これは前に述べた問題では解決されていません。 –

答えて

5

いただきありがとうございます。

hereをクリックすると、基本原則が説明されているMSDNの記事が表示されます。

以下のサンプルコードを見て、それはあなたの問題を解決するかどうかを確認:

var client = new WCClient(); 
using (OperationContextScope scope = new OperationContextScope(client.InnerChannel)) 
{ 
    var httpRequestProperty = new HttpRequestMessageProperty(); 
    httpRequestProperty.Headers[System.Net.HttpRequestHeader.Authorization] = "Basic " + 
        Convert.ToBase64String(Encoding.ASCII.GetBytes(client.ClientCredentials.UserName.UserName + ":" + 
        client.ClientCredentials.UserName.Password)); 
    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty; 

    client.DoSomething(); 
} 
+0

回答ありがとうございますが、私はホストにアクセスできない、私はサービスを消費することができます。私は、SoapUIツールを介して要求の送信をテストし、正常に動作し、そこに私はそれがC言語でそれを行う必要があるので、UserNameとパスワードとプリエンプティブ認証で要求を送った – Bushwacka

+0

今は完璧な仕事です! – Bushwacka

関連する問題