2

Я разрабатываю веб-службу WCF в webHttpBinding, клиентское приложение вызывает этот веб-сервис WCF по запросу (HTTP POST) или через службу окон диспетчера (в настоящее время использует Quartz.net).Длительное время работы WCF 504 Ошибка GATEWAY_TIMEOUT

Каждый вызов будет содержать список задач, которые могут занимать 10-30 минут. Я получаю сообщение об ошибке 504 Gateway_Timeout через 1 минуту. Я попытался увеличить лимит в веб-сервисе WCF, но все еще получаю ошибку.

<webHttpBinding> 
    <binding name="webHttpBindingWithJsonP" closeTimeout="00:30:00" openTimeout="00:30:00" receiveTimeout="00:30:00" sendTimeout="00:30:00" maxReceivedMessageSize="50000000" maxBufferSize="50000000" maxBufferPoolSize="50000000" crossDomainScriptAccessEnabled="true"/> 
    </webHttpBinding> 


<httpRuntime executionTimeout="1800" targetFramework="4.0"/> 

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

Я пробовал журналы трассировки со всем значением switchvalue и использовал traceviewer для мониторинга вывода, ошибок не обнаружено.

Мои вопросы: должен ли WCF-сервис быть сконфигурирован как webHttpBinding, или я должен проектировать его как другой тип?

+1

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

+0

@Tim, да в клиентском приложении я использую Task.Run() для реализации вызова Fire & забыть API, как раз когда я тестирую WCF в Postman от Chrome, он дает ошибку 504. Я хотел бы убедиться, что процесс в WCF все еще запущен после возврата 504. –

ответ

1

Рассматривали ли вы предоставление статуса страницы как части вашего первоначального вызова, а затем проверку пользователя на странице состояния (повторно), чтобы проверить, завершена ли задача?

Это гарантирует, что ничего не произойдет, поскольку соединение будет недолгим.

+0

В клиентском приложении я использую Task.Run() для реализации вызова Fire & забыть API, зарегистрируйте статус задания как запущенный и проведете ajax проверку завершения каждые x секунд, только когда я тестирую WCF в Postman от Chrome, он дает ошибка 504. Я хотел бы убедиться, что процесс в WCF все еще запущен после возврата 504 на сторону клиента. –

+0

Вам нужно выставить способ проверить на другой конечной точке, выполняется ли завершение или нет. Удержание соединения WCF, как вы, приведет к таким ошибкам. Если вы общаетесь каким-то образом, это может быть сделано для работы, но просто ждать десятки минут будет сложно, так как это долгое время, чтобы открыть соединение без передачи данных. – Guvante

+0

Это то, что я делаю, имеет другой статус проверки wcf, моя проблема - это первая задача, реализация wcf не может поддерживать соединение слишком долго, как я могу убедиться, что он всегда запускается и завершается? Я не возражаю против одностороннего вызова и забываю результат, проверьте статус wcf позже. –