2010-06-17 4 views
5

Я подключаюсь к предоставленной поставщику веб-службе ASMX и отправляю набор данных по проводу. Моя первая попытка ударила тайм-аут в 1 минуту, который Visual Studio выбрасывает по умолчанию в файле app.config, когда вы добавляете ссылку на службу в проект. Я увеличил его до 10 минут, еще один тайм-аут. 1 час, другой таймаут:.NET Web Service (asmx) Задача таймаута

Error: System.TimeoutException: The request channel timed out while waiting for 
a reply after 00:59:59.6874880. Increase the timeout value passed to the call to 
Request or increase the SendTimeout value on the Binding. The time allotted to 
this operation may have been a portion of a longer timeout. ---> System.TimeoutE 
xception: The HTTP request to 'http://servername/servicename.asmx' has exceeded the allotted timeout of 01:00:00. The time allotted to this 
operation may have been a portion of a longer timeout. ---> System.Net.WebExcept 
ion: The operation has timed out 
    at System.Net.HttpWebRequest.GetResponse() [... lengthly stacktrace follows] 

Я связался с продавцом. Они подтвердили, что звонок может занять более часа (не спрашивайте, они являются проклятием моего существования.) Я увеличил таймаут до 10 часов, чтобы быть в безопасности. Однако вызов веб-службы продолжается до 1 часа. Соответствующий раздел app.config теперь выглядит следующим образом:

<basicHttpBinding> 
    <binding name="BindingName" closeTimeout="10:00:00" 
        openTimeout="10:00:00" receiveTimeout="10:00:00" sendTimeout="10:00:00" 
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" 
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
        useDefaultWebProxy="true"> 
    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="2147483647" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
    <security mode="None"> 
     <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
    </security> 
    </binding> 
    </basicHttpBinding> 

Довольно абсурдно, но независимо от тайм-аут по-прежнему ногами в на 1 час. К сожалению, для каждого изменения требуется, как минимум, еще один час для тестирования. Есть ли какой-то внутренний предел, на который я натыкаюсь - где-то меняют другую настройку тайм-аута? Все изменения в этих настройках до один час имел ожидаемый эффект.

Спасибо за любую помощь, которую вы можете предоставить!

+0

Когда он срабатывает через один час, это точно такое же исключение, которое вы получаете, когда таймаут установлен на 1 минуту? –

+0

Да, это та же ошибка. –

ответ

4

Во-первых: См. Ответ Стивена Ченга [MSFT] here о таймаутах. Существует таймаут выполнения, который вы можете установить для httpRuntime. Он говорит что-то интересное после этого, который «Кроме того, убедитесь, что вы установили„компиляции отлаживать = „ложное““, чтобы сделать тайм-аут правильной работы»

Помимо того, что что-то может быть очень неправильно на их конце (или возвращенные данные настолько объемны/я не собираюсь судить - может быть, это хорошая причина), вы пытались назвать их работу асинхронно? Те же результаты? Я предполагаю, что это будет длиться час

YourVendor.WebService ws = new YourVendor.WebService(); 
ws.LongRunningOperationCompleted += new YourVendor.LongRunningOperationEventHandler(ws_LongRunningOperationCompleted); 

ws.LongRunningOperationAsync(); 

// Implement the ws_LongRunningOperationCompleted handler (stub will auto generate) 

Заполненная обработчик события будет иметь конкретные ARGS события из параметров, которые будут содержать результаты, для ARGS событий е, e.Result должны иметь то, что вам нужно, когда он завершает.

+0

Файл web.config со стороны клиента не имеет элемента httpRuntime, поэтому я добавил один с очень большим таймаутом, а затем снова запустил его. Мы увидим через час, спасибо! –

+0

Что касается опции async, я могу открыть капот и изменить вызов async. Являются ли эти люди более терпимыми к тайм-аутам, они выполняются по-разному? Данные не слишком объемные, но их нужно обрабатывать на другом конце до того, как результаты будут возвращены, и тот, кто написал код обработки, не имел никакого представления о производительности за определенный размер данных. –

+0

@BarryFandango: Привет Барри, как вы решили проблему? Я установил время ожидания HTTPRuntime на большое значение и также установил отладку компиляции в false. Все равно получите ту же ошибку через 1 час – MichaelS

Смежные вопросы