System.Net.WebException: запрос был прерван: запрос был отменен - PullRequest
14 голосов
/ 10 октября 2010

У меня есть служба WCF, которая выдает мне эту ошибку в условиях нагрузки (и я не могу воссоздать ошибку в противном случае). Мы пытались найти способ обойти это около недели без такой удачи ..

Ошибка, которую я вижу, состоит из двух частей,

System.ServiceModel.CommunicationException: Ошибка: (Запрос был прерван: запрос был отменен) при передаче данных через http канал.

и

System.Net.WebException: запрос был прерван: запрос был отменен.

Я видел, что многие люди предлагают отключить работу с поддержкой активности, перегрузив метод в файле Reference.cs и установив KeepAlive = false, однако наша клиентская сторона использует ссылку на службу (в дополнение к веб-ссылке) и эта опция больше не существует.

Другой вариант, который я видел, заключался в добавлении пользовательской привязки к службе вместо BasicHttpBinding, который мы используем сейчас, но это будет мешать обратной поддержке веб-сервиса тем, кто использовал webReference (начиная с CustomBinding не включена поддержка SOAP).

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

Ответы [ 3 ]

6 голосов
/ 10 октября 2010

Я не думаю, что за это отвечает HTTP.WCF должен быть в состоянии справиться с этим сам, чтобы постоянное соединение HTTP распределялось между запросами, и если оно истекает (оно истекает после 100 с бездействия ), WCF создает новое без возникновения каких-либо исключений.Если ваше соединение прерывается во время передачи запроса, то я ожидаю, что возникнет другая проблема.

Вы можете использовать эту пользовательскую привязку как эквивалентную BasicHttpBinding без поддержки HTTP:

<bindings>
  <customBinding>
    <binding name="NoKeepAlive">
      <textMessageEncoding messageVersion="Soap11" />
      <httpTransport keepAliveEnabled="false" />
    </binding>
  </customBinding>
</bindings> 
4 голосов
/ 06 сентября 2013

У меня была эта проблема при попытке загрузить большие файлы. Мне пришлось добавить это в web.config веб-сервисов

<system.web>
  <httpRuntime maxRequestLength="10240" />
1 голос
/ 06 сентября 2011

У меня была точно такая же проблема.В моем случае я выполнял запросы в асинхронном режиме.Я отправлял на сервер несколько сотен запросов от моего клиента.Я использую BasicHttpBinding.А в моем app.config для свойства openTimeout было установлено значение 60 секунд или одна минута.Как только я установил это значение на 10 минут, проблема исчезла.

Так, например, я изменил все эти значения в моем файле app.config:

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IScriptRunHost" closeTimeout="00:10:00"
                    openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"

на 10минут.

...