wcf上的timeoutexception或默认连接限制?

时间:2011-12-04 15:22:27

标签: wcf exception exception-handling

我首先为我的WCF服务启动了我的订阅者,然后继续发布我的发布者的帖子。我的订阅者可以收到帖子。

其次,我关闭了我的FIRST订户并再次打开它以订阅相同的服务,即所谓的已订阅该服务的SECOND订户。再一次,它能够收到一个帖子。

一旦我第三次重复这个,就会有

的例外
  

无法在分配的00:01:00超时内传输消息。可靠频道的传输窗口中没有可用空间。分配给此操作的时间可能是较长超时的一部分。

摘要:

  1. 在第一个客户端,SUBSCRIBED,一切正常
  2. 关闭第一个客户端
  3. 在cilent AGAIN上,(意味着同一服务上的第二个连接(?)),一切正常
  4. 关闭“第二个客户”
  5. 打开客户端第三次,发生错误

根据我目前研究的内容,我已经看到在这个问题中,它提到默认连接限制为2?

WCF Service Throttling

这是导致我错误的问题吗?如果是,是否可以调整连接的限制以及如何调整?

在WCF领域相当新,欢迎任何人给我他们的意见。 谢谢!

修改

在我的客户端上使用UseSynchronizationContext = false尝试。每次发送帖子时,我的订阅者的PostReceived()方法包括打开包含发布信息的弹出窗口表单。使用UseSynchronizationContext = false时,Windows窗体将无法正常打开(此处出现错误)。

任何人都知道如何解决这个问题或有任何其他解决方案?

编辑2

阅读了大量与WCF连接相关的内容,发现大多数人都在尝试切换maxConnections变量或配置文件中的相关内容。我的问题是我的客户端中只有配置文件,而我的服务项目没有配置文件。我是否有必要为我的服务项目添加配置文件?

由于“连接限制”(?)是2,我尝试了在客户端退出应用程序时取消订阅它的方法,但这不起作用并给我和错误。我已经发布了一个关于我收到的错误的问题。

https://stackoverflow.com/questions/8395525/objectdisposedexception-on-wcf-service

添加了客户端的配置代码:

<system.serviceModel>
  <diagnostics performanceCounters="All" />
  <bindings>
    <wsDualHttpBinding>
      <binding name="WSDualHttpBinding_IPostingContract" clientBaseAddress="http://localhost:8000/wcfClient/" closeTimeout="00:01:00"
          openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
          messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384"  />
        <reliableSession ordered="true" inactivityTimeout="00:10:00" />
        <security mode="Message">
          <message clientCredentialType="Windows" negotiateServiceCredential="true"
              algorithmSuite="Default" />
        </security>
      </binding>
    </wsDualHttpBinding>
  </bindings>

  <client>
    <endpoint address="http://localhost:8888/PostingContract/Posting"
        binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_IPostingContract"
        contract="IPostingContract" name="WSDualHttpBinding_IPostingContract">
      <identity>
        <userPrincipalName value="##" />
      </identity>
    </endpoint>
  </client>

</system.serviceModel>

如果我的服务部分在行为或配置文件方面做了任何错误,有人会告诉我。欣赏一百万。谢谢!

编辑3

管理以解决服务行为。对于该行为,我将InstanceContextMode更改为单个。

InstanceContextMode = InstanceContextMode.Single

这实际上允许我启动我的Windows窗体应用程序的2个以上的连接。但是,如果我这样做,如果我事先启动了2个连接,对于第三个连接,它将接收3个弹出窗口,随后对于第四个连接,它将收到4.当它被假设接收1时。

1 个答案:

答案 0 :(得分:3)

这有助于在客户端订阅者类

上添加UseSynchronizationContext = false

例如。

[CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant,
UseSynchronizationContext = false)]

原因可能是交易回调 这里有类似的帖子WCF: Having trouble with one-way callbacks