我有一个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()而不会超时。这似乎有效,但我不确定原因。