我有一个使用WCF的VB .NET应用程序。我已经在代码中为所有客户端超时设置了时间:
当我连接的服务崩溃时,Endpoint Not Found异常需要超过20秒才能被抛出,而不是我指定的2.5秒。这真的会影响我的负载均衡,我需要知道服务在2.5秒内是否消失。有没有办法在期望的时间范围内抛出此异常?
顺便说一下,异常内容类似于:
无法连接到net.tcp://192.168.227.130:30000/MXIOXfer。连接尝试持续了00:00:02.4209684的时间跨度。TCP错误代码10060:由于经过了一段时间后连接方没有正确地响应,或者已建立的连接失败,因为连接的主机未能响应192.168.227.130:30000。
但实际上需要超过20秒。我已经打开了WCF跟踪,并可以看到TCP操作失败警告就在异常之前,并且具有真实时间。
无法连接到 net.tcp://192.168.227.130:30000/MXIOXfer。连接尝试持续了00:00:21.0314092的时间跨度。TCP错误代码10060:连接方在一段时间后未正确响应,或已建立的连接因连接主机未能响应而失败192.168.227.130:30000。
如果有任何区别,所有与服务的通信都在单独的线程上完成。
编辑: 此线程似乎表明套接字超时由操作系统设置。是否有这样的注册表设置?
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
当我连接的服务崩溃时,Endpoint Not Found异常需要超过20秒才能被抛出,而不是我指定的2.5秒。这真的会影响我的负载均衡,我需要知道服务在2.5秒内是否消失。有没有办法在期望的时间范围内抛出此异常?
顺便说一下,异常内容类似于:
无法连接到net.tcp://192.168.227.130:30000/MXIOXfer。连接尝试持续了00:00:02.4209684的时间跨度。TCP错误代码10060:由于经过了一段时间后连接方没有正确地响应,或者已建立的连接失败,因为连接的主机未能响应192.168.227.130:30000。
但实际上需要超过20秒。我已经打开了WCF跟踪,并可以看到TCP操作失败警告就在异常之前,并且具有真实时间。
无法连接到 net.tcp://192.168.227.130:30000/MXIOXfer。连接尝试持续了00:00:21.0314092的时间跨度。TCP错误代码10060:连接方在一段时间后未正确响应,或已建立的连接因连接主机未能响应而失败192.168.227.130:30000。
如果有任何区别,所有与服务的通信都在单独的线程上完成。
编辑: 此线程似乎表明套接字超时由操作系统设置。是否有这样的注册表设置?