【问题标题】:timeoutexception or default connection limit on wcf?wcf 的超时异常或默认连接限制?
【发布时间】:2012-01-12 15:50:21
【问题描述】:

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

其次,我关闭了我的第一个订阅者并再次打开它以订阅相同的服务,即订阅了该服务的所谓的第二个订阅者。再一次,它能够接收帖子。

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

消息无法在分配的超时时间 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 更改为 single。

InstanceContextMode = InstanceContextMode.Single

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

【问题讨论】:

    标签: wcf exception exception-handling


    【解决方案1】:

    这将有助于在客户端订阅者类中添加UseSynchronizationContext = false

    例如

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

    原因可能是解锁回调 类似的帖子在这里WCF: Having trouble with one-way callbacks

    【讨论】:

    • 您好,感谢您的回复。在客户端订阅者类中添加它是什么意思?我应该在我的服务项目或订阅者项目中添加代码吗?
    • 它应该在您的订阅者项目中?你在订阅者项目中使用回调行为吗
    • 编辑了我上面的帖子。目前,还没有。但是在添加了您所说的内容之后。它似乎有一些错误。有关错误,请参阅我上面的帖子:)
    猜你喜欢
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2014-04-25
    • 2012-09-28
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多