Проблема времени ожидания веб-службы .NET (asmx) - PullRequest
5 голосов
/ 17 июня 2010

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

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

1 Ответ

4 голосов
/ 17 июня 2010

Во-первых: См. Ответ Стивена Ченга [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)

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

...