Сбой службы WCF: при получении ответа HTTP произошла ошибка

У меня есть сервис WCF, и я размещаю его на своем локальном сервере (локальном компьютере), он работает нормально, но когда я размещаю его на сервере (в Интернете), он выдает ошибку

Произошла ошибка при получении ответа HTTP на http://www.xxxxxxxx.com/Services/WCFService.svc. Это может быть связано с тем, что привязка конечной точки службы не использует протокол HTTP. Это также может быть связано с тем, что сервер прерывает контекст HTTP-запроса (возможно, из-за закрытия службы). Смотрите журналы сервера для более подробной информации.

Этот сервис WCF предназначен для загрузки файлов PDF, а также выполняет операции в соответствии с загруженным файлом PDF.

проблема возникает, когда я загрузил файл PDF, и этот файл имеет больше страниц (около 500), в то время как это занимает больше времени (приблизительно от 6 до 8 минут).

если я загружу pdf-файл, который содержит 100 страниц, 200 страниц, 300 страниц, тогда он работает хорошо.

ПРИМЕЧАНИЕ: весь файл PDF имеет размер менее 5 МБ.

2 ответа

Вполне возможно, что обработка занимает слишком много времени и время ожидания клиента, прежде чем она будет продолжена

<bindings>
  <basicHttpBinding>
    <binding name="IncreasedTimeout"
             sendTimeout="24:00:00">
    </binding>
  </basicHttpBinding>
</bindings>

Поскольку загрузка файлов на локальный хост происходит мгновенно - этот тайм-аут учитывает как обработку сервера, так и загрузку на ваш сервер.

Для этого нужно установить максимальный размер сообщения и размер буфера для веб-сайта WCF.

<bindings>
  <webHttpBinding>
    <binding name="LargeWebBinding"
             maxBufferPoolSize="2147483647"
             maxReceivedMessageSize="2147483647"
             maxBufferSize="2147483647">
      <readerQuotas 
             maxArrayLength="2147483647" 
             maxNameTableCharCount="2147483647"
             maxStringContentLength="2147483647"
             maxDepth="2147483647"
             maxBytesPerRead="2147483647" />
    </binding>

Вы можете попробовать использовать это:

<behaviors>
  <serviceBehaviors>
    <behavior name="LargeWebBehavior">
      <dataContractSerializer ignoreExtensionDataObject="true" maxItemsInObjectGraph="2147483647" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceTimeouts transactionTimeout="00:10:00" />
      <serviceThrottling maxConcurrentCalls="200" maxConcurrentSessions="100"
        maxConcurrentInstances="100" />
    </behavior>
  </serviceBehaviors>
</behaviors>
Другие вопросы по тегам