WCF服务超时

时间:2011-01-21 16:19:45

标签: c# wcf

我有一个暴露wcf服务的插件。如果我使用WCFStorm测试这项服务,一切正常。我马上收到回复。当我尝试从加载插件的应用程序中使用服务时,我会抽出时间。

ProgrammingMaster_ServiceClient aClient = new ProgrammingMaster_ServiceClient();
aClient.Endpoint.Address = new EndpointAddress("http://localhost:8081/ProgrammingMaster/PM_Service");
aClient.BeginProgrammingSession(0x01);
aClient.Close();

我正在使用的代码是否正在使用该服务。 ProgrammingMaster_SErviceClient由svcutil.exe生成。

如果删除行

,我会遇到同样的问题
aClient.Endpoint.Address = new EndpointAddress("http://localhost:8081/ProgrammingMaster/PM_Service");

我不确定我应该在哪里开始调试它。

被调用的服务在不同的网络上发送消息。当我通过wcfstorm调用它时,我可以看到服务发送的消息。所以我知道服务正常。

当我从我的应用程序调用导致超时的服务时,我做错了什么。

编辑:超时后(我正在捕捉并记录异常),服务在其他网络上发送它的消息,就像它应该的那样。

编辑2:希望这是一个更好的解释。

所以我有一个暴露Web服务的插件,并使用不同的Web服务。 因此,插件基本上连接到特殊网络上的对象,然后通过使用Web服务传递该对象属性值。

我有一个应用程序,它公开了插件用来提供远程对象值更新的Web服务,并使用插件公开的Web服务将命令传递给远程对象。

插件向应用程序发送更新时没有超时问题。当应用程序使用Web服务通过插件向远程对象发送命令时,我收到超时错误。超时到期后,执行命令。因此,Web服务被成功调用。我想我只是没有得到回复?

编辑3: 这是我的app配置文件。我将发送超时降低到00:00:01,以便等待时间不长,但我真的想修复它,所以不必每次都超时。

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_IProgrammingMaster_Service" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:00:01" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
          <security mode="Message">
            <transport clientCredentialType="Windows" proxyCredentialType="None" realm="">
              <extendedProtectionPolicy policyEnforcement="Never"/>
            </transport>
            <message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:8081/ProgrammingMaster/PM_Service" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IProgrammingMaster_Service" contract="IProgrammingMaster_Service" name="WSHttpBinding_IProgrammingMaster_Service">
        <identity>
          <userPrincipalName value="mzjkk7@nam.corp.gm.com"/>
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

3 个答案:

答案 0 :(得分:4)

...喔

  

是的,超时只发生在   客户端和服务器都是其中的一部分   相同的申请。

重要的问题是客户端和服务在同一个线程上运行?

如果是这样,那可能是你的问题。尝试在自己的线程中启动服务,看看是否可以解决问题。

答案 1 :(得分:1)

打开内置的WCF调试/日志记录功能:

http://msdn.microsoft.com/en-us/library/ms733025.aspx

这帮助我解决了WCF的各种古怪问题。只需记住在完成后将其关闭 - 它会将大量数据写入磁盘!

答案 2 :(得分:0)

您是否在关闭防火墙的情况下尝试了它,看看是否可能是导致它的原因?