Клиент WCF игнорирует значения времени ожидания, когда служба не работает

У меня есть приложение 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.

Если это имеет какое-то значение, все коммуникации со службой выполняются в отдельных потоках.

РЕДАКТИРОВАТЬ:

Этот поток , по-видимому, указывает на то, что время ожидания сокета устанавливается операционной системой. Есть ли параметр реестра для таких вещей?

11
задан MarkFisher 14 August 2012 в 19:16
поделиться