我有一个暴露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>
答案 0 :(得分:4)
...喔
是的,超时只发生在 客户端和服务器都是其中的一部分 相同的申请。
重要的问题是客户端和服务在同一个线程上运行?
如果是这样,那可能是你的问题。尝试在自己的线程中启动服务,看看是否可以解决问题。
答案 1 :(得分:1)
打开内置的WCF调试/日志记录功能:
http://msdn.microsoft.com/en-us/library/ms733025.aspx
这帮助我解决了WCF的各种古怪问题。只需记住在完成后将其关闭 - 它会将大量数据写入磁盘!
答案 2 :(得分:0)
您是否在关闭防火墙的情况下尝试了它,看看是否可能是导致它的原因?