WCF服务如何被锁定?

时间:2011-07-15 10:59:03

标签: wcf locked

在我的应用程序中,同步的Winform UI线程调用WCF方法。 99.99%的时间没问题,但偶尔对WCF方法的调用被锁定,UI冻结。

我知道我可以通过调用异步来阻止UI的冻结 - 我们的大多数WCF调用都是异步的 - 但我们认为使这个特殊的微小方法同步并不是那么糟糕。

当WCF服务中发生锁定时,其他用户也无法访问该服务。我必须重新启动WCF服务主机(Windows服务)才能解决问题。

WCF服务如何被锁定且无法访问? 我想不出一个场景 我们检查了正常运行的数据库。

技术细节: 我们在服务代理中使用代理。当应用程序运行时,此代理服务代理将保持活动状态。

[PreserveReferences]
[OperationContract(IsOneWay = false, AsyncPattern = false, Action = "MyMethod")]
        MyType MyMethod();

正在使用的绑定:

<wsHttpBinding>
        <binding name="AppWsHttpBindingConfig" transactionFlow="true" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Mtom">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <reliableSession ordered="false" enabled="false" />
          <security mode="Message">
            <message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="true" />
          </security>
        </binding>
      </wsHttpBinding>

1 个答案:

答案 0 :(得分:2)

大多数WCF服务挂起问题与处理WCF客户端代理有关,我认为这是您的问题。如果您没有正确处理客户端代理,则在进行(maxConcurrentSessions + 1)第n次调用时会出现超时异常。

请查看this文章。

基本上它表示,如果您的频道未处于故障状态,则在该频道上调用Abort可释放客户端资源,但不会释放服务器资源。例如,当服务方法抛出FaultException时,它不会将通道置于故障状态。因此,在此代理上调用abort将导致服务器中没有客户端的打开会话。

这是你的情况,你应该考虑使用那篇文章中描述的方法,或其他一些有相同想法的方法。