WCF会话问题

时间:2009-06-25 06:28:46

标签: wcf

我是WCF的新手并没有太多想法。通过使用示例代码,我尝试通过远程处理WCF ...

它工作正常几分钟,但如果我离开客户端而不访问WCF服务器,我得到一个像这样的例外....

例外:无法连接到远程服务器。

内部例外:

System.Net.Sockets.SocketException:连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接主机无法响应而建立连接失败122.165.27.38:80

at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress)

在System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)

at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure,Socket s4,Socket s6,Socket& socket,IPAddress& address,ConnectSocketState state,IAsyncResult asyncResult,Int32 timeout,Exception& exception)

堆栈跟踪:

在System.Net.HttpWebRequest.GetRequestStream()

at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName,Object [] parameters)

at TeleMailer.TeleMailer.cbxtmuname_SelectedIndexChanged(Object sender,EventArgs e)

来源:

系统

例外:服务器无法处理请求。 --->通信对象System.ServiceModel.Channels.ServiceChannel不能用于通信,因为它处于Faulted状态。

内部例外:

堆栈跟踪:

at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message,WebResponse response,Stream responseStream,Boolean asyncCall)

at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName,Object [] parameters)

在TeleMailer.Server.Service.get_path()

at TeleMailer.TeleMailer.TeleMailer_Load(Object sender,EventArgs e)

来源:

System.Web.Services

但它不是处于故障状态,也不是关闭!!!

实际上在我的应用程序中,客户端与服务器进行通信,而服务器又与WCF联系并为他提供工作....

现在我正在使用Cassini作为我的服务器。它可以很好地工作几分钟但是在接近十分钟之后它只显示这个错误消息....但是如果我重新启动我的卡西尼号它再次正常工作几分钟并且得到问题....

我无法理解它能够连接更多客户端时如何处理故障状态....

是因为会话超时还是什么?如果会话超时,那么从我的服务器或客户端的哪一侧???

任何想法PLZ ..........

我一整天都在选址,但无法找出任何东西!!!

2 个答案:

答案 0 :(得分:0)

这可能是一个超时问题,与您在客户端代码中创建wcf代理对象时有关。

看起来您在启动客户端时创建了代理对象,然后只是重用它。此对象维护与服务器的连接,该连接在10分钟后超时。

更好的方法是在每次需要时使用using语句创建一个新的代理对象。

答案 1 :(得分:0)

“如果我离开客户端而没有访问WCF服务器,我会得到一个像”

这样的例外

可能是由于不活动超时,所以你可以增加它,或者尽快处理你的客户端对象(尝试使用语句)

您可以按如下方式设置属性

 <reliableSession ordered="true" inactivityTimeout="00:00:05"
            enabled="false" />