WCF代理连接打开会导致错误

时间:2012-03-21 12:11:38

标签: wcf wcf-client

我们正在中间层使用托管在IIS上的WCF服务并使用WPF客户端。 我们在生产日志中看到了这些错误。从谷歌我被指向这里的链接http://kennyw.com/indigo/150,清楚地表明此错误与MaxConcurrentSessions有关。

下面的生产日志详细说明当WPF客户端尝试使用ICommunicationObject.Open()打开WCF代理连接时发生错误 我们的生产系统上的此错误经常发生,但我无法在本地设置上重现此错误。我尝试将MaxConcurrentSessions更改为1,然后打开WPF应用程序的5个实例,在WPF应用程序上,默认仪表板每1分钟运行一次计时器,试图获取数据,但仍然无法重现此错误。

我的问题是这个错误何时发生,从上面的链接说它会在服务器出现压力时发生,但在上面的测试用例中应该已经加载了。我还需要能够重现这个甚至尝试修复。

如果我在正确的道路上,任何想法,MaxConcurrentSessions是正确的地方,我如何在本地模拟这个。请帮忙。

2/16/2012 4:10:40 PM:Information:Exception in the ServiceCall constructor:       System.ServiceModel.CommunicationException: 
  The socket connection was aborted. 
  This could be caused by an error processing your message or a receive timeout being   exceeded by the remote host, or an underlying network resource issue. 
  Local socket timeout was '00:00:59.9687730'. --->System.Net.Sockets.SocketException: 
An existing connection was forcibly closed by the remote host at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) at System.ServiceModel.Channels.SocketConnection.ReadCore(Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout, Boolean closing)
 --- End of inner exception stack trace ---
 Server stack trace: 
 at System.ServiceModel.Channels.SocketConnection.ReadCore(Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout, Boolean closing)
 at System.ServiceModel.Channels.SocketConnection.Read(Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout)
 at System.ServiceModel.Channels.DelegatingConnection.Read(Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout)
 at System.ServiceModel.Channels.ConnectionUpgradeHelper.InitiateUpgrade       (StreamUpgradeInitiator upgradeInitiator, IConnection& connection, ClientFramingDecoder decoder, IDefaultCommunicationTimeouts defaultTimeouts, TimeoutHelper& timeoutHelper)
 at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.SendPreamble(IConnection connection, ArraySegment`1 preamble, TimeoutHelper& timeoutHelper)
 at  System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.DuplexConnectionPoolHelper.AcceptPooledConnection(IConnection connection, TimeoutHelper& timeoutHelper)
 at System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout)
 at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)
 at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
 at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
 at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)

3 个答案:

答案 0 :(得分:2)

您的问题的根本原因很可能是您的WPF应用程序中服务代理实例的不正确的一次性使用。查看代理如何实例化并处置

如果您的代码没有遵循此SO question的答案中描述的模式之一,那么您就不能正确释放TCP连接。当使用依赖于TCP会话的绑定时,此问题往往会弹出最多。

答案 1 :(得分:0)

该错误可能有几个原因。 MaxConcurrentSessions 是其中之一。

在服务器和客户端的配置文件中,请确保增加 receiveTimeout sendTimeout 。您可能超过了这些参数允许的时间。

您需要确保这些字段的服务器和客户端具有相同的配置值。如果你只改变其中一个,那么另一个仍然可以提前超时。

除此之外,他们的XML配置的MS参考文献在下面,可以帮助您找到导致问题的原因。

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

答案 2 :(得分:0)

将此行放在消费者方面的App.Config中

<system.net>
   <defaultProxy useDefaultCredentials="true">
     <proxy usesystemdefault="True" bypassonlocal="True"/>
  </defaultProxy>
 </system.net>