Mar*_*her 11 .net vb.net wcf wcf-client
我有一个使用WCF的VB .NET应用程序.我已经为代码中的所有内容设置了客户端超时:
Dim oMastSrv As MastSvc.IclsIOXferClient = Nothing
Dim binding As New ServiceModel.NetTcpBinding("NetTcpBinding_IclsIOXfer")
Dim intTimeout As Integer = 2500
binding.SendTimeout = New TimeSpan(0, 0, 0, 0, intTimeout)
binding.ReceiveTimeout = New TimeSpan(0, 0, 0, 0, intTimeout)
binding.OpenTimeout = New TimeSpan(0, 0, 0, 0, intTimeout)
binding.CloseTimeout = New TimeSpan(0, 0, 0, 0, intTimeout)
Dim address As New ServiceModel.EndpointAddress("net.tcp://" & GetSrvIP(intSrvID) & ":30000/MyMastSvc")
oMastSrv = New MastSvc.IclsIOXferClient(binding, address)
Try
oMastSrv.ServiceConnect( ... )
oMastSrv.InnerChannel.OperationTimeout = New TimeSpan(0, 0, 0, 0, intTimeout)
Catch ex As Exception
...
End Try
Run Code Online (Sandbox Code Playgroud)
但是,当我连接到崩溃的服务时,Endpoint Not Found异常需要花费超过20秒而不是我指定的2.5.这实际上是我的负载平衡,我需要知道服务在2.5秒内消失了.有没有办法在所需的时间跨度内抛出此异常?
BTW,例外情况如下:
无法连接到net.tcp://192.168.227.130:30000/MXIOXfer.连接尝试持续时间跨度为00:00:02.4209684.TCP错误代码10060:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机未能响应192.168.227.130:30000.
但它确实需要超过二十秒.我已经打开了WCF跟踪并且可以在异常之前看到TCP操作失败警告并且它具有实时:
无法连接到net.tcp://192.168.227.130:30000/MXIOXfer.连接尝试持续时间跨度为00:00:21.0314092.TCP错误代码10060:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机未能响应192.168.227.130:30000.
如果它有任何区别,服务的所有通信都在不同的线程上完成.
编辑:
此线程似乎表明套接字超时由操作系统设置.是否有针对此类事情的注册表设置?
我相信这篇文章讨论了同一个问题:wcf channelfactory 和 opentimeout。
问题是底层套接字有一个默认的 20 秒左右的超时,WCF 不会覆盖该超时。检查最后一个答案,了解通过异步打开来实现自己的超时的方法。