私はこの件がここにかなり数回育ったことを知っていますが、WCFから期待される接続待ち時間に関して私が探している正確な答えを見つけることができません。netTcpBindingで遅い(ish)WCF接続速度
私は基本的に、工場環境でアラーム処理を行う自己ホストWCFサービス(サーバー)を持っています。これらのアラームに対して、遅延をエンドツーエンドで最小限に抑える必要があるため、接続時間を検討しています。アラームは、さまざまな方法で配信されます。そのうちの1つは、netTcpBinding WCFサービスです。 atmの別のサービスアプリケーション(クライアント)。同じサーバー上で実行されている場合は、一般的にうまく機能するこのバインディングを通じてサーバーを使用してアラームを配信しています。
私の問題は、IChannel.Open()呼び出しに100〜500ミリ秒かかるため、クライアントからの初期接続の待ち時間です。平均で〜300ミリ秒です。これはTCP/IPを介して同じサーバー上で接続を作成するために非常に高いようです。
クライアントでは、起動時に一度手動でChannelFactoryを作成し、アラームを送信する必要があるときに "channelFactory.CreateChannel()"に再利用します。 。この後、私は明らかにIChannelを開きます(これは私が心配している時です)。このサービスはバッチのアラームを送信し、その後、IChannelは閉じられ、処分されます。クイック再接続には0ミリ秒かかりますが、セキュリティがなくてもすぐにテストを実行することを考えると、「長い」ポーズが遅いとアラームと再開の間に3〜5分かかることがよくあります。
私のバインディングの構成はかなり基本的なものです:
<binding name="AlarmService_NetTcpBindingConfig"
hostNameComparisonMode="StrongWildcard"
closeTimeout="00:01:00"
portSharingEnabled="false"
listenBacklog="20"
maxConnections="50"
transactionFlow="false"
transferMode="Buffered"
>
<security mode="None">
<message clientCredentialType="None" />
<transport clientCredentialType="None" protectionLevel="None" />
</security>
<reliableSession enabled="false" />
</binding>
だから、基本的には(:)不満を自動販売機のほかに)質問です、これは私がWCF netTcpBindingによって期待することができ、接続の待ち時間がある場合は?
私がまだ試していないと思う唯一のことは、「Net.TCPポート共有サービスの設定」の記事(http://msdn.microsoft.com/en-us/library)に従うことです。 /aa702669.aspx)、それが何かを助けるかどうかを見てください。接続共有(上記のバインディングでは無効になっていますが)が問題になりますか?他の誰かが接続速度/待ち時間を調べましたか?
クライアントは1回の接続だけを開き、この接続は「長い」時間(通常3〜5分)アイドル状態なので、この場合、プロキシプーリングがどのように役立つかを見てください。基礎となるTCP/IP接続は必ず閉じられます。 (これは、私がオープン接続をしているように見えますが、これが〜0ミリ秒かかるので、短時間後に再接続すればいいと思います。)私が行った研究から、ChannelFactoryは作成するのにかなりの時間がかかります既にキャッシュされています。 – Reonekot
ポート共有について - 私はWCFサービスをセルフホストしているので、ポートシェアリングは必要ありません。いくつかのブログなどは、それがperfであることを示しています。問題はありますが、100〜500ミリ秒です。過度のイドはあなたに与えているようだ。それはかなり唯一のものです(SMSvcHost.exe.configファイルを編集することで無効にします)。私は試していないので、誰かがそれを経験しているなら、私は知りたいと思います。 :) – Reonekot