WCF服务代理在关闭时超时

时间:2012-05-07 17:20:10

标签: wcf .net-3.5 timeout

我有一个WCF客户端应用程序,可以为每个调用创建一个新的代理实例。我在前一个实例上调用Close()以确保连接已关闭,但它总是在1分钟后超时,这是默认的关闭时间。我之前在这种情况下调用了Abort(),而不是Close(),但后来我意识到我将超过默认的10个并发连接限制。我不确定是什么导致Close()调用超时。查看WCF跟踪日志,我看到一段显示以下内容的日志,但我不清楚它是否是我调用Close()或自动执行此操作的结果:

  • 消息已关闭
  • 消息已关闭
  • 消息再次关闭

我的服务定义了以下行为:

[ServiceBehavior(IncludeExceptionDetailInFaults = true, AutomaticSessionShutdown = false, InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]

以下是我的服务行为:

  <service behaviorConfiguration="AdminServiceBehavior" name="My.WebServices.AdminService">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="AdminUserNameBinding"
      name="wsHttpBindingWithAuthAdmin" contract="My.WebServices.IAdminService">
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" name="mexAdminBinding"
      contract="IMetadataExchange" />

如果没有超时,我需要做什么来优雅地关闭()我的连接?我已经阅读过关于何时调用Close()与Abort()的文章,如果你应该Dispose /使用'using'块,但是Close()超时我和Abort()的事实并不是免费的同时进行的会议令我感到困惑。

这可能与AutomataticSessionShutdown有关,但我不确定为什么会导致Close()中止。说实话,我不知道为什么我的财产设置为假。

更新:将AutomaticSessionShutdown设置为true(默认值)允许我调用Close()而不会超时。这似乎有效,但我不确定原因。

0 个答案:

没有答案