2016-04-21 5 views
0

У меня есть веб-приложение WordPress, которое связывается с сервисом WCF через SOAP.Запросы SOAP блокируют другие запросы SOAP

Предположим, что я обращаюсь к длинному запросу SOAP. На другой вкладке я обращаюсь к другому запросу SOAP, но этот короткий. Короткий запрос, похоже, блокируется длинным.

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

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

Почему запросы на выполнение блокируют другие запросы?

ответ

1

Это не связано с WCF. Ваш файл сеанса PHP блокируется, поэтому вы можете иметь только один одновременный запрос для каждого браузера.

Есть два основных решения:

  • Начало вызова WCF в фоновом потоке или фоновый процесс на вашем веб-сервере. Таким образом, PHP-скрипт, обрабатывающий запрос браузера, может немедленно вернуться.

  • Измените службу WCF, чтобы вместо немедленного выполнения она принимала вызов «Начать работу», и вы можете опросить результат выполнения.

+0

Любые предложения о том, как запускать вызовы в фоновом потоке? Любые ресурсы, которые могут помочь мне достичь этого? Я никогда не запускал вызовы WCF в фоновом потоке раньше. –

+0

Нет, я имел в виду начало долгого вызова WCF _from_ PHP в другом потоке, поэтому сценарий продолжает выполнение и возвращает ответ браузеру. Затем вам нужно сохранить результат в базе данных или что угодно, поэтому клиент может быть уведомлен (или опросить), когда вызов WCF завершится. – CodeCaster

+0

Долгосрочный запрос будет запускаться только через REST API (в том же экземпляре PHP), который я предоставил. Можно ли отделить это и позволить регулярной веб-странице не блокироваться файлом сеанса PHP? –