2011-06-30 15 views
12

私はwsHttpBindingを使用するWCFクライアントを持っていますが、http keep-aliveを有効にしたいと思います。httpキープアライブを使用したWCF wsHttpBinding

私はクライアントの設定を変更するだけでこれを有効にしたいと思っています...私はbasicHttpバインディングのキープアライブを有効にする方法についてたくさんの説明を見つけましたが、wsHttpBindingでは不運です...これは可能ですか?

多くのありがとうございます。

はここに結合私のクライアントです:

<wsHttpBinding> 
    <binding name="WSHttpBinding_IRepositoryService" closeTimeout="00:00:10" 
     openTimeout="00:00:10" receiveTimeout="00:05:00" sendTimeout="00:05:00" 
     bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
     maxBufferPoolSize="524288" maxReceivedMessageSize="655360" messageEncoding="Mtom" 
     textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> 
     <readerQuotas maxDepth="32" maxStringContentLength="81920" maxArrayLength="163840" 
     maxBytesPerRead="409600" maxNameTableCharCount="16384" /> 
     <reliableSession ordered="true" inactivityTimeout="00:10:00" 
     enabled="true" /> 
     <security mode="Message"> 
     <transport clientCredentialType="Windows" proxyCredentialType="None" 
      realm=""> 
      <extendedProtectionPolicy policyEnforcement="Never" /> 
     </transport> 
     <message clientCredentialType="Windows" negotiateServiceCredential="true" 
      algorithmSuite="Default" establishSecurityContext="true" /> 
     </security> 

    </binding> 
</wsHttpBinding> 

答えて

22

あなたはその機能が内蔵された結合のクラスのいずれにもさらされていないので、Keep-Aliveヘッダを無効にするために、custom bindingを使用する必要があります。

カスタムバインディングをゼロから定義せずにこれを達成する最も簡単な方法は、コード内のクライアントプロキシに関連付けられている既存のBasicHttpBindingまたはWSHttpBindingインスタンスをカスタマイズすることです。

はここに例を示します

var proxy = new MyServiceClient(); 
var customBinding = new CustomBinding(proxy.Endpoint.Binding); 
var transportElement = customBinding.Elements.Find<HttpTransportBindingElement>(); 
transportElement.KeepAliveEnabled = false; 

proxy.Endpoint.Binding = customBinding; 
+0

この場合、同じ構成をサーバー側に適用する必要はありません。生き続けることはHTTP転送機能であり、どのように構成するかは参加者次第です。 –

+0

@Ladislav Mrnka絶対に正しい。ただし、この設定*はサーバーに適用することができます。私は自分の答えを更新しました。 –

+0

多くのありがとう。私はキープアライブがデフォルトで有効になっていることを認識していませんでしたので、それは私にはあまりありません:) – Nathan

4

は、すべてのHTTPベースのバインディングにデフォルトで有効になって生きてください、それをオフにすることはできません。これをオフにしたい場合は、新しいカスタムバインディング全体を作成し、バインディング要素でkeepAliveEnabledをfalseに設定する必要があります。

+5

組み込みのHTTPベースのバインディング(basicHttpBinding、wsHttpBindingなど)でキープアライブをオフにすることはできません..)これらのバインディングはプロパティを公開しないためです。カスタムバインドでは無効にすることができます。私はそれがあなたが言ったことを知っていますが、あなたがそれを表現する方法は混乱しており、私は明確にしたいと思いました。 –

関連する問題