イメージをクライアントにストリームする単純なWCFサービスがあります。クライアントでは、最初の画像要求は約5.5秒かかり、その後の要求は約40msかかります。これは素晴らしい方法です。WCFリクエスト遅延が50秒ごとに発生する
しかし、約45秒ごとに、要求が行われたかどうかにかかわらず、次の要求は常に約4.6秒かかります。この45秒のサイクルは連続的に繰り返されます。
私はストリーミング転送モードでnet.tcpバインディングを使用しています。私はまた、信頼できるセッションを有効/無効にした状態でバッファリングされた転送モードを試しましたが、このすべてが各要求にかかる時間が増えました。
変更なしでバインディングタイムアウト(オープン、クローズ、送信、受信、非アクティブ)のそれぞれを増やしてみました。
サーバ設定:
serviceHost = new ServiceHost(typeof(TServiceImplementation), serviceUri);
serviceHost.Description.Behaviors.Add(new ServiceMetadataBehavior() { HttpGetEnabled = false });
var netTCPBinding = new NetTcpBinding(SecurityMode.Transport);
netTCPBinding.TransferMode = TransferMode.StreamedResponse;
netTCPBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;
serviceHost.AddServiceEndpoint(typeof(TServiceContract), netTCPBinding, ServiceName);
serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
クライアントの設定:
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="TcpBinding" transferMode="StreamedResponse" maxReceivedMessageSize="2147483647" />
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://hostname:9000/StreamService"
binding="netTcpBinding" bindingConfiguration="TcpBinding" contract="StreamService.IStream"
name="NetTcpBinding_IStream" />
</client>
</system.serviceModel>
UPDATE:これはマシン固有の問題かもしれないように見えます - 私は私のローカルマシン上のサービスを実行したときに、私は経験していませんこの問題。
タイムアウト時間を変更すると、エラーを宣言する前にシステムが応答を待つ時間に影響します。応答速度には影響しません。アプリケーションプールがリサイクルされているように聞こえるため、サービスが削除され、再作成されます数秒間の稼働時間を設定する必要があるため、IIS設定を調べる – MikeT
これはWindowsサービスとして実行されているため、おそらくこれは問題ではありません。 – irv075