【问题标题】:WCF proxy close basicHttpBinding - Help explain behaviorWCF 代理关闭 basicHttpBinding - 帮助解释行为
【发布时间】:2012-09-07 09:39:02
【问题描述】:

我在 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 绑定时,是否在代理上调用“关闭”结束与服务器建立的“tcp 连接”?

PS:请注意,我已将 Enable HTTP Keep-alive on IIS 设置为 false

【问题讨论】:

  • 您能否详细说明这个问题与your earlier question 有何不同?
  • 您好 Jeroen,在前面的问题中,我想知道收到 sc-win32-status 的 64 是否是由于某些底层网络问题以及是否有人遇到过类似问题。后来我发现 WCF 服务是罪魁祸首,我已经更新了这个问题以反映它。

标签: .net wcf proxy basichttpbinding


【解决方案1】:

服务将从客户端获取请求。它将处理请求,需要 60 秒。与此同时,客户端已经“放弃”了,但是对于 HTTP,它无法通知服务不再需要之前的请求。

最后,服务:

【讨论】:

  • 我也是这么怀疑的。如果绑定是 net tcp 会发生什么?它的行为是否不同?也更新了问题
  • 哦,好问题。我不确定 IIS 日志会为 net.tcp 端点显示什么。在 IIS 中设置 net.tcp 并不是一件容易的事,如果我有时间我可能会尝试检查一下。
  • 并不奇怪,但 net.tcp 请求不会显示在默认的 iis 日志中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多