我有一个非常奇怪的问题。我有一个WCF服务和一个调用它的一些方法的控制台应用程序。在某些时候,它不能再调用它们中的一个。它只是调用方法,但它从不输入它。它只是等待和等待......什么都没发生。
我是否应该以某种方式刷新服务客户端?我尝试创建一个新的服务客户端对象
QueryingServiceClient queryingClient = new QueryingServiceClient();
然后再次调用该方法,但它不起作用。只是补充说我在停止工作之前几次调用该方法和其他几种方法。
有什么想法吗?
感谢。
答案 0 :(得分:1)
假设:
问题可能是您正在耗尽服务器上的可用插槽数(在这种情况下为会话数),以达到最大并发会话数。然后,您的客户端将等待在服务端关闭会话的定义超时(在这种情况下显然永远不会发生)。
建议修复:
编辑:
using (var proxy = new Proxy())
{
// Use the proxy as much as needed
proxy.Method();
}
答案 1 :(得分:0)
它停止前的次数是否相同?您是否达到连接限制?
您的WCF服务如何实例化?
Singleton,Session,PerCall?
您可以发布客户端和服务器端点的配置部分吗?
如果使用WcfClient工具,它是否能够始终如一地工作?
答案 2 :(得分:0)
这很奇怪,它不会等待并永远等待。您应该获得WCF超时异常。 app.config中的超时值是多少?
如果您没有收到任何超时异常,那么可能就是您没有调用那个服务方法。我知道这很明显,但有时长名字的方法可能会互相混淆。如果你正在调试客户端,你必须已经排除了这一点。
答案 3 :(得分:0)
感谢您的回复。
这不是永远的,我没有正确表达自己。一段时间后,我得到以下异常:
超出了最大重试次数,远程端点没有响应。可靠的会议出了问题。这通常表明远程端点不再可用。
这是一个单身人士。这是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>