WCF サービスに次のコードがあり、basicHttpBindingを使用しています
public class Service1 : IService1
{
public string GetData(int value)
{
// Sleep for a minute
System.Threading.Thread.Sleep(60000);
return string.Format("You entered: {0}", value);
}
}
クライアントに次のコードがあり、クライアントの「sendTimeout」はわずか1秒です(サーバーが応答する前にクライアントをタイムアウトさせたい)
Service1Client clientProxy = new Service1Client();
try
{
Console.WriteLine(clientProxy.GetData(10));
clientProxy.Close();
}
catch (TimeoutException)
{
if (((ICommunicationObject)clientProxy).State == CommunicationState.Opened)
{
// In the case of TimeoutException the state is not faulted and
// "close" is invoked
clientProxy.Close();
}
}
要求の IIS ログに表示される内容は次のとおりです。
2012-09-07 07:22:51::1 ポスト/SimpleTimeWCF/Service1.svc - 80 - ::1 - 200 0 64 60015
ステータスが 200、sc-win32-status が 64、所要時間が 60015 (約 1 分) であることを確認できます。
WCF サービスが要求の処理でビジー状態である間に、クライアントが clientProxy.Close を呼び出しました。サーバー上で予想される動作は何ですか?
basicHttpBinding を使用する場合、サーバーでの「クライアント プロキシ クローズ」メソッド呼び出しの予想される動作は何ですか?
他のバインディングを使用すると動作が変わりますか? 例: ネット TCP バインディング? net tcp バインディングを使用すると、サーバーとの "tcp 接続" が確立された後、プロキシで "close" が呼び出されますか?
PS: IIS で HTTP キープアライブを有効にするを false に設定したことに注意してください。