2016-07-25 3 views
0

サーバー上でホストされているWebサービスと通信するクライアントアプリケーションがあります(ホストサーバー)。私のクライアントアプリケーションは、basicHttpBindingを使って細かくビルドして接続することができます。しかし、私はセキュリティ上の理由からwsHttpBindingを念入りにしようとしています。WsHttpBindingを持つクライアントアプリケーションでは、 "エンドポイントが聞こえません"というメッセージが表示されます。

先週の昼食前に、ハードコードされた証明書で作業していたと私は誓っていました。ランチから戻ってきて、自分のコードをチェックして、今は動かないでしょう。私は "このメッセージを受け入れることができるhttps://hostServer:1234/Service.svc/MyServiceNameを聞いているエンドポイントはありませんでした。これはしばしば不正なアドレスまたはSOAPアクションによって引き起こされます。"私は自分の設定を再チェックしようとしましたが、私の踏みとどがれは戻りましたが、機能していた状態に戻ることはできませんでした。

アドレスが "https:// hostServer: 1234/Service.svc?singleWsdl "を参照してください。 "https:// hostServer:1234/Service.svc"に問題なく移動し、Wsdlを表示できます。

私のクライアントコードは

WSHttpBinding wsBinding = new WSHttpBinding(SecurityMode.Transport); 
wsBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; 

Client = new MyServiceName(wsBinding, new EndpointAddress(endpoint)); 

Client.ClientCredentials.ClientCertificate.SetCertificate(
    StoreLocation.CurrentUser, 
    StoreName.My, 
    X509FindType.FindBySubjectName, 
    "localCertName"); 

Client.ChangePassword("test_user", "pt", "a1"); 

マイ値エンドポイントです = https://hostServer:1234/Service.svc/MyServiceName私のIISサイトが

(正しいIP &ポートIDで)HTTPとHTTPSのバインディングに設定されている

私は本当にこのコードを離陸する前に働かせる必要があります(私の妻はいつでも私たちの2番目の子供による予定です)。私はこれを2日間そのままデバッグするように働いていました。助けてください。

答えて

0

これで私はようやく再びこの作業を行うことができました。下に実行されたステップが他の人を助けることを期待してリストされています。 IISサーバー(IISマネージャ)で

修飾された "サイトのバインド" "SSLを要求" と「同意するHTTP & HTTPS(異なるポート番号/ w)の

設定SSLの設定を含むように「IISサーバー上で

(のWeb.Config):

追加

"System.ServiceModel"タグに対する
<bindings> 
    <wsHttpBinding> 
    <binding name="wsHttpEndpointBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType ="Certificate"/> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 

また、 'bindingConfiguration = "wsHttpEndpointBinding"をエンドポイントに追加しました。コード

は、IISサーバー上で生成されたことを使用するエンドポイントのアドレスを更新しました。エンドポイントに

WSHttpBinding wsBinding = new WSHttpBinding(SecurityMode.Transport); 
    wsBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; 
    Client = new ServiceClient(wsBinding, new EndpointAddress(endpoint)); 
    Client.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.LocalMac‌​hine, StoreName.My, X509FindType.FindByIssuerName, certName); 
を作成するための次のコードを使用し

関連する問題