【发布时间】:2011-07-01 05:13:18
【问题描述】:
我使用 Zend_Soap 创建了 PHP Web 服务。在 apache 或带有 PHP 模块作为 CGI 的 IIS 7 上,一切正常。但是,如果我将 PHP 配置为 FastCGI,则对 Web 服务的每秒请求都会导致 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 代理检查通信本身,但没有真正成功。当我在启用代理的情况下调用 Web 服务时,每次调用都会成功。 fidler2 还打印出警告,即我的 WS 宣布的响应长度与实际长度不同(在 apache 上长度很好)。
有人知道问题出在哪里吗?
【问题讨论】:
-
您是否安装了 IIS 7 Fast CGI Admin Pack?
标签: php web-services iis-7 fastcgi