我在 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 POST /SimpleTimeWCF/Service1.svc - 80 - ::1 - 200 0 64 60015
您可以观察到状态为 200,sc-win32-status 为 64,所用时间为 60015(大约一分钟)。
当 WCF 服务忙于处理请求时,客户端调用了 clientProxy.Close。服务器上的预期行为是什么?
使用 basicHttpBinding 时服务器上“客户端代理关闭”方法调用的预期行为是什么?
使用其他绑定时行为是否会发生变化?例如:网络 TCP 绑定?当我们使用 net tcp 绑定时,是否在代理上调用“close”结束与服务器建立的“tcp 连接”?
PS:请注意,我已将 IIS 上的 Enable HTTP Keep-alive 设置为 false