Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wcf上的timeoutexception或默认连接限制?_Wcf_Exception_Exception Handling - Fatal编程技术网

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

wcf上的timeoutexception或默认连接限制?,wcf,exception,exception-handling,Wcf,Exception,Exception Handling,我首先为我的WCF服务启动了我的订阅者,然后继续发布我的发布者发布的帖子。我的订阅者能够收到帖子 其次,我关闭了我的第一个订户,然后再次打开它,以订阅同一服务,即所谓的已订阅该服务的第二个订户。再一次,它能够收到一个帖子 一旦我第三次重复这一点,就会有一个例外 无法在分配的00:01:00超时内传输消息。可靠通道的传输窗口中没有可用空间。分配给此操作的时间可能是较长超时的一部分 总结: 在第一个客户机上,订阅后,一切正常 关闭第一个客户端 在cilent上(意味着在同一个服务上的第二个连接(?)

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

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

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

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

总结:

  • 在第一个客户机上,订阅后,一切正常
  • 关闭第一个客户端
  • 在cilent上(意味着在同一个服务上的第二个连接(?),一切正常
  • 关闭“第二个客户端”
  • 第三次打开客户端时出错 从我到目前为止的研究中,我看到在这个问题中,它提到默认连接限制是2

    这就是导致我出错的原因吗?如果是,是否可以调整连接限制以及如何调整

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

    编辑

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

    有人知道如何解决这个问题或者有其他的解决方案吗

    编辑2

    阅读了大量与WCF连接相关的资料,发现大多数人都试图在配置文件中切换maxConnections变量或相关变量。我的问题是,我仅有的配置文件在我的客户机中,而我的服务项目没有配置文件。我是否需要为我的服务项目添加配置文件

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

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

    <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>
    

    这实际上让我可以启动超过2个windows窗体应用程序连接。但是如果我这样做,如果我事先启动了2个连接,第三个连接将收到3个弹出窗口,随后第四个连接将收到4个弹出窗口。当假定它接收1时。

    在客户端订户类上添加
    UseSynchronizationContext=false
    会有帮助吗

    例如

    [CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant,
    UseSynchronizationContext = false)]
    
    原因可能是取消锁定回调
    这里也有类似的帖子

    您好,谢谢您的回复。在客户端订户类中添加它是什么意思?我是在我的服务项目还是我的订户项目中添加代码?它应该在您的订户项目中?你在你的订户项目中使用回调行为吗?编辑了我上面的帖子。目前还没有。但在加入你所说的内容之后。它似乎有一些错误。有关错误,请参阅我上面的帖子:)
    [CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant,
    UseSynchronizationContext = false)]