У меня есть веб-сервис PHP, созданный с использованием Zend_Soap. На apache или IIS 7 с модулем PHP в качестве CGI все работает просто отлично. Но если я настраиваю PHP как FastCGI, каждый второй запрос к веб-сервису приводит к ответу 400 BedRequest.
Я обнаружил следующее сообщение об ошибке при прослушивании с помощью wireshark:
POST /JaR/soapTest/Service.php HTTP/1.1
Content-Type: text/xml; charset=utf-8
VsDebuggerCausalityData: uIDPoyo7FNjw0FZJlPkpvI/09dIAAAAA7yLlSSd4sEqSVBHiUG/JW55FahmIOYRAtQ0OUnO49ZoACQAA
SOAPAction: "http://signia.cz/WebClientCEVO/1.0#QueryByBasicInformation"
Host: w7pr-xampp-dev:8000
Content-Length: 971
Expect: 100-continue
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Thu, 17 Feb 2011 14:03:46 GMT
Connection: close
Content-Length: 311
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request</h2>
<hr><p>HTTP Error 400. The request is badly formed.</p>
</BODY></HTML>
Позже я создал трассировку в iis и выяснил, что каждый первый вызов завершается успешно, а второй отказывает при сбое, что приводит к перезапуску процесса php-cgi.exe. Из трассировки IIS я получаю следующую информацию:
MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName FastCgiModule
Notification 128
HttpStatus 500
HttpReason Internal Server Error
HttpSubStatus 0
ErrorCode 2147942401
ConfigExceptionInfo
Notification EXECUTE_REQUEST_HANDLER
ErrorCode Nesprávná funkce. (0x80070001)
Затем я попытался проверить саму связь с прокси-сервером fidler2, но безуспешно. Когда я вызываю веб-сервис с включенным прокси-сервером, каждый звонок завершается успешно. fidler2 также выводит предупреждение о том, что объявленная длина ответа от моего WS не совпадает с фактической длиной (в apache длины в порядке).
Кто-нибудь знает, где может быть проблема?