经过一番头疼和查看 PHP 源代码后,我终于找到了 handle() 函数为什么会立即返回包含字符串“错误请求”的错误的原因。
事实证明我的客户端发送的是有效的 XML,但 XML 的第一行是实际的 XML 声明
<?xml version="1.0" encoding="UTF-8"?>
当调用 SoapServer 类中的“handle”函数时,它首先尝试解析 XML。当 XML 文档无法解析时,会返回“错误请求”错误,脚本执行立即停止。我假设 PHP 中内置的 XML 解析器 (libxml2) 已经假设该文档是 XML,当它找到声明时,它认为它无效。
我在调用 handle() 函数之前添加了一些 XML 解析调用来检查有效的 XML 以避免“错误请求”错误。这也允许我发送更合适的错误消息
<?php
$parser = xml_parser_create("UTF-8");
if (!xml_parse($parser,$HTTP_RAW_POST_DATA,true)){
$webService->fault("500", "Cannot parse XML: ".
xml_error_string(xml_get_error_code($parser)).
" at line: ".xml_get_current_line_number($parser).
", column: ".xml_get_current_column_number($parser));
}
?>