У меня есть приложение 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 требуется более двадцати секунд, а не 2,5, которые я указал. Это действительно портит мою балансировку нагрузки, мне нужно знать, что служба исчезнет в течение 2,5 секунд. Есть ли способ получить это исключение в течение желаемого промежутка времени?
Кстати, исключение выглядит примерно так:
Could not connect to net.tcp://192.168.227.130:30000/MXIOXfer. The connection attempt lasted for a time span of 00:00:02.4209684. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.227.130:30000.
но на самом деле это занимает более двадцати секунд. Я включил трассировку WCF и вижу предупреждение о сбое операции TCP непосредственно перед исключением, и оно имеет РЕАЛЬНОЕ время:
Could not connect to net.tcp://192.168.227.130:30000/MXIOXfer. The connection attempt lasted for a time span of 00:00:21.0314092. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.227.130:30000.
Если это имеет какое-то значение, все коммуникации со службой выполняются в отдельных потоках.
РЕДАКТИРОВАТЬ:
Этот поток , по-видимому, указывает на то, что время ожидания сокета устанавливается операционной системой. Есть ли параметр реестра для таких вещей?