经过多次头痛和查看 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));
}
?>