У меня есть приложение VB.NET, которое использует WCF. Я установил время ожидания для всего кода в коде:
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.
но это действительно занимает более двадцати секунд. Я включил трассировку WCF и вижу предупреждение о неудачной попытке TCP непосредственно перед исключением и имеет РЕАЛЬНОЕ время:
Не удалось подключиться к net.tcp://192.168.227.130: 30000/MXIOXfer. попытка подключения продолжалась в течение промежутка времени 00: 00: 21.0314092. TCP код ошибки 10060: попытка подключения не удалась, поскольку подключенный сторона не отвечала должным образом после определенного периода времени или соединение не удалось, поскольку подключенный хост не смог ответить 192.168.227.130:30000.
Если это имеет значение, все сообщения службы выполняются в отдельных потоках.
EDIT:
Этот поток, кажется, указывает, что тайм-ауты сокета заданы операционной системой. Есть ли параметр реестра для таких вещей?