Почему вызов метода веб-службы истекает почти сразу?

В рабочей версии этого веб-сервиса, использующего.NET 1.1, такой проблемы нет. Это тестовая среда, в которой работает.NET 4.0 на Windows Server 2003.

У меня проблема, когда я получаю следующее исключение:

    System.Net.WebException: The operation has timed out    
at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)    
at System.Net.HttpWebRequest.GetRequestStream()    
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)    
at HTP.RHIO.PIRManager.TargetWS.PIRService.Upload(Transmission t_request)    
at HTP.RHIO.PIRManager.Manager.PIRManager.Upload(Transmission request)

Это происходит, когда метод Upload моего веб-сервиса вызывает метод Upload другого веб-сервиса. Тайм-аут наступает почти сразу, около 1/3 секунды (обратите внимание на столбец log_datetime)

Журнал

Код: (Строка, в которой записывается интервал в выходных данных исключения, еще не реализована, поэтому она не отображается в выходных данных. Она должна переходить к значению по умолчанию interval = 60 [*1000])

int interval = 0;                                                                           
try 
{

    try
    {
        interval = Convert.ToInt16(System.Configuration.ConfigurationSettings.AppSettings["RealTimeTimeOutSeconds"]);
    }
    catch(Exception ex)
    {
        interval = 60;
    }

    interval = interval * 1000;
    target.Timeout = interval;
    trans = target.Upload(trans);
    }                               
    catch(System.Net.WebException ex)
    {               
        request.TransmissionHeader.MessageCode = GetReturnMessageCode(ex); 
        request.TransmissionHeader.Message = ex.Message;
        Log(request.TransmissionHeader, "Upload", "FAILED", "(Timeout = " + interval.ToString() + ") " + ex.ToString(), 1);

        trans = TA1forFailedRealtimeUpload(trans.TransmissionHeader);                                       
        request = ConvertToLocal(trans, request);
        Log(request.TransmissionHeader, "Upload", "SENDING", "Responding to sender with TA1", 1);
        return request;                             
    }
}

и из файла web.config моего веб-сервиса:

<httpRuntime executionTimeout="600" maxRequestLength="2000000"/>

1 ответ

Convert.ToInt16 может не делать то, что вы ожидаете. Из руководства;

Возвращаемое значение

Тип: System.Int16
16-разрядное целое число со знаком, эквивалентное числу в значении, или 0 (ноль), если значение равно нулю.

Если RealTimeTimeOutSeconds не установлен в вашей конфигурации, вы будете преобразовывать NULL, что приведет к нулевому таймауту.

Другие вопросы по тегам