2011-07-27 15 views
0

nettcpバインディングを使用するように以前に構成されたサービスがあります。この構成は機能しました。結合wcfでcustomBindingのセキュリティを無効にする方法

そのはこのように見えた:

<binding name="TcpBinding" closeTimeout="00:01:00" openTimeout="00:01:00" 
      receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" 
      transferMode="Streamed" transactionProtocol="OleTransactions" 
      hostNameComparisonMode="StrongWildcard" listenBacklog="10" 
      maxBufferPoolSize="524288"  
      maxConnections="10" maxReceivedMessageSize="100000000"> 
    <readerQuotas maxNameTableCharCount="1000000" maxStringContentLength="8192000" 
      maxArrayLength="1638400" /> 
    <security mode="None"/> 
    </binding> 

私はleaseTimeoutを有効にするには、customBindingにこれを翻訳してみました。

<customBinding> 
    <binding name="TcpBindingCustom" closeTimeout="00:01:00" 
     openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" > 
     <windowsStreamSecurity protectionLevel="None" /> 
     <transactionFlow transactionProtocol="OleTransactions"/> 
     <tcpTransport transferMode="Streamed" hostNameComparisonMode="StrongWildcard"   
       maxBufferPoolSize="524288" listenBacklog="10" 
       maxReceivedMessageSize="100000000" portSharingEnabled="true" 
       maxBufferSize="65536"> 
     <connectionPoolSettings groupName="default" leaseTimeout="00:05:00" 
      idleTimeout="00:02:00" maxOutboundConnectionsPerEndpoint="20" /> 
     </tcpTransport> 
    </binding> 
<customBinding> 

私はすべてがローカルの場合にこれが正常に動作<security mode ="None">

を複製する方法を見ていないが、それが展開された後、私は次の例外を取得します。

System.ServiceModel.Security.SecurityNegotiationException: 
The server has rejected the client credentials. --->  
System.Security.Authentication.InvalidCredentialException: 
The server has rejected the client credentials. ---> 
System.ComponentModel.Win32Exception: 

tcpBindingでこれらのエラーは発生しませんでした。

この動作をcustomBindingでどのように複製できますか? SecurityNegotiationExceptionの原因となるものが他にありますか?

答えて

0

答えは、バインディングタグからすべてのセキュリティ情報を削除することでした。したがって、この場合には

<windowsStreamSecurity protectionLevel="None" /> 

<security authenticationMode="AnonymousForSslNegotiated"/> 

を削除し、私はシクストサエスのアドバイスをいくつか続き、リフレクターにNetTcpBindingの実装を見ました。 CreateMessageSecurityと

SecurityBindingElement item = this.CreateMessageSecurity(); 
if (item != null) 
{ 
    elements.Add(item); 
} 

はこのように実装:私の共同労働者の

private SecurityBindingElement CreateMessageSecurity() 
{ 
    if ((this.security.Mode != SecurityMode.Message) 
      && (this.security.Mode != SecurityMode.TransportWithMessageCredential)) 
    { 
     return null; 
    } 
    return this.security.CreateMessageSecurity(this.ReliableSession.Enabled); 
} 

一つは、このロジックをステップ実行することができました

NetTcpBindingクラスは、このロジックを含めるようにCreateBindingElementsメソッドをオーバーライドしますカスタムバインディングでこの現象を再現します。

基本バインディングがカスタムバインディング要素でどのように作成されたかを示す変換テーブルを作成できれば、実際には非常に役立ちます。

1

サービスを設定するにはcustomBinding elementを使用する必要があると思います。私はあなたが提供した設定でそれを見ていない。バインディングの構成については、good MSDN articleを参照して、カスタムバインディングを作成する方法を参照してください。カスタムバインディングは記事の最後に向かっています。

編集: 申し訳ございませんが、設定ブロックを有効にしてください。 WCFのnetTcpBindingは、デフォルトでWindowsのIDとトランスポートセキュリティを使用するsecure bindingです。セキュリティモードを "none"に設定してカスタムバージョンを作成しようとしていますが、実際にはnetTcpBindingの設定方法と一致する必要があります。 MSDNがすべての標準バインディングを文書化しているかどうかは、実際にカスタムバインディングのように見えるようにして表示するとよいでしょう。この設定を試してください:

<customBinding> 
    <binding name="TcpBindingCustom" closeTimeout="00:01:00" 
     openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" > 
     <windowsStreamSecurity protectionLevel="None" /> 
     <transactionFlow transactionProtocol="OleTransactions"/> 
     <tcpTransport transferMode="Streamed" hostNameComparisonMode="StrongWildcard"   
      maxBufferPoolSize="524288" listenBacklog="10" 
      maxReceivedMessageSize="100000000" portSharingEnabled="true" 
      maxBufferSize="65536"> 
      <connectionPoolSettings groupName="default" leaseTimeout="00:05:00" 
       idleTimeout="00:02:00" maxOutboundConnectionsPerEndpoint="20" /> 
     </tcpTransport> 
     <security authenticationMode="AnonymousForSslNegotiated"/> 
    </binding> 
<customBinding> 
+0

示された最初のバインディング構成は、動作するOLD tcpBinding構成です。示されている2番目の設定は、SecurityNegotiationExceptionを与える新しいcustomBindingです。 –

関連する問題