Веб-сервис.NET (asmx) проблема тайм-аута

Я соединяюсь с предоставленным поставщиками веб-сервисом ASMX и отправляю ряд данных по проводу. Моя первая попытка поразила тайм-аут 1 минуты, который Visual Studio добавляет по умолчанию в app.config файле, когда Вы добавляете сервисную ссылку на проект. Я увеличил его до 10 минут, другого тайм-аута. 1 час, другой тайм-аут:

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 час. К сожалению, каждое изменение занимает, по крайней мере, дополнительный час для тестирования. Есть ли некоторый внутренний предел, в который я врезаюсь - другая установка тайм-аута, которая будет изменена где-нибудь? Все изменения в этих настройках до одного часа имели ожидаемый эффект.

Спасибо за любую справку можно обеспечить!

5
задан John Saunders 17 June 2010 в 18:50
поделиться

1 ответ

Во-первых: См. Ответ Стивена Ченга [MSFT] здесь о тайм-аутах. Вы можете установить время ожидания выполнения для httpRuntime. После этого он говорит кое-что интересное, а именно: «Кроме того, убедитесь, что вы установили 'compilation debug =" false "', чтобы заставить тайм-аут работать правильно »

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

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

ws.LongRunningOperationAsync();

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

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

4
ответ дан 15 December 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: