【问题标题】:Self hosted WCF service not responding after several hours of being idle自托管 WCF 服务在空闲几个小时后没有响应
【发布时间】:2013-06-27 07:28:36
【问题描述】:

我在一个控制台应用程序中托管了 WCF 服务,该应用程序预计将 24/7 全天候运行并响应来自多个应用程序的请求。如果它连续收到请求,甚至在 4 小时的空闲时间之后,它就会很好地工作。下面给出了为托管服务而编写的代码,

    static void Main(string[] args)
    {
        using (ServiceHost host = new ServiceHost(typeof(abcdService)))
        {
            host.Open();
            Console.ReadLine();
            host.Close();
        }
    }

在 WCF 服务中,我将输出写入控制台。当它抛出超时错误时,我可以看到 WCF 服务中的方法从未收到过请求。

我是否需要进行任何设置才能使自托管 WCF 服务即使在几个小时的空闲时间后也能响应简单的调用?

我收到的错误如下,

请求通道在 00:00:59.9989999 之后等待回复时超时。增加传递给 Request 调用的超时值或增加 Binding 上的 SendTimeout 值。分配给此操作的时间可能是较长超时的一部分。 ---> System.TimeoutException:对 '' 的 HTTP 请求已超过分配的超时时间 00:01:00。分配给此操作的时间可能是较长超时的一部分。 ---> System.Net.WebException:操作已超时。中止测试执行。

注意:当我重新启动托管 WCF 服务的控制台应用程序时,它又开始正常工作了。

【问题讨论】:

  • 显示配置、实现、客户端代码、服务合同
  • 我在使用自托管服务时遇到了完全相同的问题。在正常使用和重负载测试期间,它工作正常,但在夜间的某个时候 - 当没有人使用它时,它会以某种方式崩溃,我无法再从我的客户端应用程序/浏览器访问它。您找到问题的原因了吗?
  • 还没有。但是我们正在做一个变通方法来减少问题的发生。基本上,我们每天午夜通过 Windows 调度程序重新启动控制台应用程序 (.exe)。这减少了崩溃次数。

标签: wcf visual-studio-2012 self-hosting


【解决方案1】:

您的请求可能在处理之前在服务器上排队,然后超时。

1) 在您的 WCF 服务中尝试throttling

2) 尝试使用PerCall 使用以下内容删除界面中的 Session

[ServiceContract(Namespace="namespace", SessionMode=SessionMode.NotAllowed)]

合约类实现接口

ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

您应该能够启用跟踪以准确查看正在发生的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2011-11-07
    • 1970-01-01
    相关资源
    最近更新 更多