【问题标题】:WCF - The remote endpoint no longer recognizes this sequenceWCF - 远程端点不再识别此序列
【发布时间】:2016-01-27 09:21:50
【问题描述】:

我在调用 WCF 方法时遇到了一个非常奇怪的问题。 Web 和服务代码通过开发,在本地开发人员机器和 QA 服务器上运行良好。但是当作为 Windows 服务发布到 UAT 服务器时返回:

远程端点不再识别此序列。这是最 可能是由于远程端点上的中止。的价值 wsrm:Identifier 不是已知的序列标识符。可靠的 会话出错。

方法本身运行良好,它们从数据库调用构建传输对象,然后在返回对象时抛出异常。

有一个类似的question 有相同的错误,但没有应用建议的解决方案。完全相同的代码在所有机器上都运行良好,但在服务器上安装时抛出异常。

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

    我遇到了这个错误,我通过添加最大尺寸数据并增加超时来解决:

    <binding name="WSHttpBinding_ILetterRegistrationService" closeTimeout="00:50:00" openTimeout="00:50:00" receiveTimeout="00:50:00" sendTimeout="00:50:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="52428800" maxReceivedMessageSize="2000000" messageEncoding="Mtom" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
              <readerQuotas maxDepth="32" maxStringContentLength="200000000" maxArrayLength="200000000" maxBytesPerRead="524288" maxNameTableCharCount="524288" />
              <reliableSession ordered="true" inactivityTimeout="00:50:00" enabled="true" />
              <security mode="None">
                <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />
                <message clientCredentialType="Windows" negotiateServiceCredential="true" />
              </security>
            </binding>
    
      <endpoint address="http://myLink.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ILetterRegistrationService" contract="LetterReg.ILetterRegistrationService" name="WSHttpBinding_ILetterRegistrationService" />
    

    【讨论】:

      【解决方案2】:

      我仍然不确定为什么,但这种行为的原因是该方法返回的接口具有 IEnumerable 属性。将其替换为 List 解决了该问题。

      我很想知道为什么这在我们尝试过的所有其他机器上都有效,但在 UAT 服务器上却无效。

      两者上安装的 .Net 版本是相同的。

      我能看到的唯一区别是不同的操作系统。

      在 Windows Server 2008 R2 企业版、Windows 7 企业版上运行良好

      它引发了异常:Windows Server 2008 R2 Datacenter。

      编辑: 虽然这解决了问题,但我希望得到一个解释为什么 IEnumerable 可以在我们运行它的每台机器上运行,但在 UAT 机器上崩溃的答案。

      【讨论】:

      • 您是否使用过 EntityFramework? LINQ 有一种称为“延迟执行”的东西,这意味着它只会在枚举数据后才对数据执行查询。如果是List&lt;T&gt;,它不使用“延迟执行”,而是立即对数据执行查询。虽然“延迟执行”的概念并不是 EF 特有的(它是 LINQ 的东西),但这种问题在 EF 场景中很常见
      【解决方案3】:

      我得到了同样的错误,但它发生在服务代理(客户端)上调用 Close() 方法时。我的应用程序打开通道并在 2-3 分钟内连续进行一系列调用,所有这些调用都成功,但是当 Close() 时,程序会挂起配置的持续时间 closeTimeout(1 分钟)被调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-13
        • 2020-02-29
        • 2016-11-16
        • 1970-01-01
        相关资源
        最近更新 更多