2009-08-07 15 views
6

WCFクライアントからのサードパーティWSE 3.0 Webサービスへの接続に問題があります。このKB資料に示されているように私は、カスタムバインディング・クラスを実装している:WCFクライアントからのWSE 3.0 Webサービスへの接続

http://msdn.microsoft.com/en-us/library/ms734745.aspx

問題は、Webサービスで使用されるセキュリティアサーションとしなければならないようだ - UsernameOverTransport。

私はメソッドを呼び出すしようとすると、私は次の例外を取得:

のSystem.InvalidOperationException:。。 'WseHttpBinding' '[名前空間]' が バインディング 'MyWebServiceSoap' '[ネームスペース] ' コントラクトは、 トランスポートレベルの完全性と の機密性が必要な 認証モードで構成されています。しかし、輸送 は、それは、ユーザ名、パスワード、およびCN番号を期待します。..

を完全性と機密性 を提供することはできません。ベンダから提供されたサンプルコードでは、これらの資格情報はMicrosoft.Web.Services3.Security.Tokens.UsernameTokenにバンドルされています。ここでは、ベンダーによって提供される例があります:


これは、インストール/ WSE 3.0ワット2.0アプリから正常に動作します。ここに私のWCFクライアントからのコードの抜粋です:

EndpointAddress address = new EndpointAddress(new Uri("<web service uri here>")); 

WseHttpBinding binding = new WseHttpBinding(); // This is the custom binding I created per the MS KB article 

binding.SecurityAssertion = WseSecurityAssertion.UsernameOverTransport; 
binding.EstablishSecurityContext = false; 

// Not sure about the value of either of these next two 
binding.RequireDerivedKeys = true; 
binding.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt; 

MembershipServiceSoapClient proxy = new MembershipServiceSoapClient(binding, address); 

// This is where I believe the problem lies – I can’t seem to properly setup the security credentials the web service is expecting 

proxy.ClientCredentials.UserName.UserName = "username"; 
proxy.ClientCredentials.UserName.Password = "pwd"; 
// How do I supply the CN number?      

MyObject mo = proxy.MyMethod(); // this throws the exception 

私はこの質問への答えを探してウェブを精練してきました。いくつかの情報源は私を(MS KBの記事のように)閉じてしまいますが、私はこっこを乗り越えることはできません。誰かが私を助けることができますか?

+0

WSEが時代遅れであることをサードパーティが知っていますか? –

+0

これを解決できましたか?誰にもアイデアはありますか?私は現在、同じことに固執しています。 –

答えて

1

エラーメッセージは、トランスポートレベルセキュリティを参照しています。これは、通常、httpsを意味します。

設定ファイルが表示されていません。しかし、私はあなたがトランスポートになるようにセキュリティを設定している(または別の選択の合意として必要とされている)と推測し、httpsではなくhttpであるアドレスを使用しました。

+0

こんにちはシラーズ、応答のおかげで。私は上で提供するコードで、プログラムでUserNameOverTransportとしてSecurityAssertionを定義しています。 Webサービスはhttpsを使用しないので、これは問題ではないと私は信じています。 –

+0

私はこれがエラーを起こす理由だと思います。 WCFは、転送されたユーザー名とパスワードを送信すると、パスワードが暗号化されていないことを確認し、サービスの開始を拒否します。 –

+0

WSE3.0とWCFの間に大きな違いがあるようです。私はWSE3サービスに接続するためにSSLなしでWSE 3.0クライアントを使用できますが、WCFクライアントは彼のサンプルに入った同じメッセージに接続しません。 –

9

私は、以下の結合の構成と似たようなケースで成功を収めて:

<bindings> 
    <customBinding> 
     <binding name="FNCEWS40MTOMBinding"> 
     <security enableUnsecuredResponse="true" authenticationMode="UserNameOverTransport" 
        allowInsecureTransport="true" messageProtectionOrder="SignBeforeEncrypt"> 
      <secureConversationBootstrap /> 
     </security> 
     <mtomMessageEncoding messageVersion="Soap12WSAddressingAugust2004" 
           maxBufferSize="2147483647" /> 
     <httpTransport maxReceivedMessageSize="2147483647" /> 
    </binding> 
    </customBinding> 
</bindings> 

は、それはあまりにもあなたのために働く願っています。

関連する問題