【问题标题】:Time out issue in WCFWCF 中的超时问题
【发布时间】:2009-08-27 13:30:41
【问题描述】:

我在 WCF 中遇到超时问题。

以下是错误:

{"请求通道在 00:00:59.9843744 之后等待回复时超时。增加传递给 Request 调用的超时值或增加 Binding 上的 SendTimeout 值。分配给此操作的时间可能是较长超时的一部分。"}

google了一下,找到了解决办法

来自这个网站

http://social.msdn.microsoft.com/Forums/en-US/peertopeer/thread/38306972-3128-4f0c-937b-5d162d4d8e74

所以我相应地更改了我的 app.config 文件

<behavior name="ContactServiceBehaviour">
  <serviceMetadata httpGetEnabled="true" />
  <dataContractSerializer maxItemsInObjectGraph="1000000000"/>
  <serviceDebug includeExceptionDetailInFaults="true" />
  <serviceThrottling    maxConcurrentCalls="100"
                      maxConcurrentSessions="100"
                      maxConcurrentInstances="100"/>
</behavior>

解决办法是什么?

【问题讨论】:

  • 嗨,你在这里没有给出太多的东西。您在托管服务吗?还是您正在运行 WCF 客户端?

标签: c# wcf


【解决方案1】:

您提到的论坛帖子是红鲱鱼。错误消息明确指出您需要增加 WCF 客户端和服务中的超时属性。 (如果您在服务中更改它,我发现它在更新时并不总是被客户端拾取)

在 Visual Studio 中转到“工具”菜单,您将在其中找到“WCF 服务配置编辑器”。加载您的项目 web.config 并为您的服务定义一个新的绑定。

要更改的设置是 SendTimeout 值。默认为 60 秒。

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="WCFBinding" sendTimeout="00:02:00">
    </binding>
  </basicHttpBinding>
</bindings>

【讨论】:

  • 听起来您对 WCF 很陌生。 msdn.microsoft.com/en-us/library/ms731067.aspx 一些很棒的教程
  • 超时错误几乎永远不会通过增加超时来解决。它们通常是由于客户端无法连接到服务器而引起的。超时只是为了让您在放弃前不必等待数小时或数天。
  • 如果是客户端等待一个长时间运行的任务,那么60秒并不是特别长。并且很可能是最简单的解决方法。
  • 它在我的情况下不起作用,我必须这样设置:MyWCFService.Endpoint.Binding.SendTimeout = new TimeSpan(0, 10, 0);
【解决方案2】:

如果要处理超时,可以将 WCF 服务的客户端调用包装在 try/catch 块中。

这里有个技巧,如果你没有附加调试器,超时会导致catch块被执行。但是,如果您确实附加了调试器,则调试器会在错误到达 catch 块之前拦截错误。

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 2011-12-28
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    相关资源
    最近更新 更多