【问题标题】:WCF method not invoked未调用 WCF 方法
【发布时间】:2010-10-28 09:46:51
【问题描述】:

我有一个很奇怪的问题。我有一个 WCF 服务和一个调用其中一些方法的控制台应用程序。在某些时候,它不能再调用其中之一了。它只是调用该方法,但它从不进入它。它只是等待和等待......然后什么都没有发生。

我应该以某种方式刷新服务客户端吗?我尝试创建一个新的服务客户端对象

QueryingServiceClient queryingClient = new QueryingServiceClient();

然后再次调用该方法,但它没有工作。只是补充一点,在它停止工作之前,我多次调用该方法和其他几个方法。

有什么想法吗?

谢谢。

【问题讨论】:

  • 你怎么知道它没有进入方法?是调用代码卡住了还是报错了?
  • 我处于调试模式,我可以看到它永远不会进入方法。我还在要调用的方法的开头放置了一个 Console.Write,它什么也不写(因为它从未被调用过)。
  • 我没有收到任何错误,只是卡住了。
  • 可能值得使用数据包嗅探器(例如 Wireshark)并查看底层到底发生了什么。网络/通信本身可能有问题,而不是您的服务代码。

标签: c# .net wcf wcf-client


【解决方案1】:

假设:

  • 您的服务使用 Session 实例模式(默认模式)
  • 您的客户端会为它对服务的每次调用创建一个新的代理实例。
  • 您的客户不会在调用后处理代理。

问题可能是您正在耗尽服务器上可用插槽(在这种情况下为会话)的数量,以至于您达到了最大并发会话数。然后,您的客户端将根据定义的超时等待在服务端关闭会话(在这种情况下显然不会发生)。

建议的修复:

  • 将 InstanceContextMode 设置为 PerCall,除非您确实需要 WCF 会话。
  • 使用后请务必关闭您的代理。

编辑:

using (var proxy = new Proxy())
{
    // Use the proxy as much as needed
    proxy.Method();
}

【讨论】:

  • 我尝试使用 PerCall,但 id 没有帮助。关于代理,我不知道该怎么做。有新手帮忙吗?
【解决方案2】:

停止之前的次数是否相同?您是否达到连接限制?

您的 WCF 服务是如何实例化的?

单例、会话、PerCall?

您能否发布您的客户端和服务器端点的配置部分?

如果您使用 WcfClient 工具,它是否始终如一地工作?

【讨论】:

  • 我把我的回复贴在下面,但我忘了提到它停止之前的次数并不总是一样的。
【解决方案3】:

这很奇怪,它不会一直等下去。您应该得到 WCF 超时异常。 app.config 中的超时值是多少?

如果您没有收到任何超时异常,则可能是您没有调用 that 服务方法。我知道这很明显,但有时名称很长的方法可能会相互混淆。不过,如果你也在调试客户端,那你肯定已经排除了。

【讨论】:

    【解决方案4】:

    感谢您的回复。

    这不是永远,我没有正确表达自己。一段时间后,我得到以下异常:

    已超过最大重试次数,远程端点没有响应。可靠会话出现故障。这通常表明远程端点不再可用。

    这是一个单例。这是 app.config 的一部分:

    <system.serviceModel>
        <bindings>
              <wsHttpBinding>
                    <binding name="WSHttpBinding_QueryingService" closeTimeout="00:25:00"
                          openTimeout="00:25:00" receiveTimeout="00:25:00" sendTimeout="00:25:00"
                          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                          maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
                          messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                          allowCookies="false">
                          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                                maxArrayLength="2147483647" maxBytesPerRead="2147483647"
                                maxNameTableCharCount="2147483647" />
                          <reliableSession ordered="true" inactivityTimeout="00:25:00"
                                enabled="true" />
                          <security>
                                <transport>
                                      <extendedProtectionPolicy policyEnforcement="Never" />
                                </transport>
                          </security>
                    </binding>
    ...
    

    在提供商方面:

    <wsHttpBinding>
        <binding name="wsHttpConfig" maxReceivedMessageSize="2147483647" receiveTimeout="00:25:00">
          <readerQuotas maxDepth="2147483647"
                        maxStringContentLength="2147483647"
                        maxArrayLength="2147483647"
                        maxBytesPerRead="2147483647"
                        maxNameTableCharCount="2147483647" />
          <reliableSession enabled="true" ordered="true" />
        </binding>
      </wsHttpBinding>
    
    ...
    
    <service name="Platform.WSLA.Impl.Services.Querying.QueryingService"
               behaviorConfiguration="Default.Behavior">
    
        <endpoint address="http://localhost:8004/Platform/wsla/querying/QueryingService"
                  binding="wsHttpBinding"
                  bindingConfiguration="wsHttpConfig"
                  contract="Platform.WSLA.Contracts.Services.Querying.IQueryingService" />
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  name="MetadataExchange"
                  contract="IMetadataExchange" />
    
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8004/Platform/wsla/querying" />
          </baseAddresses>
        </host>
    
      </service>
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    相关资源
    最近更新 更多