2

我在使用 nuSoap 和 IIS 时遇到了一些问题。问题是,当调用 web 服务时,我收到以下错误。

第 1 行解析 SOAP 有效负载时出现 XML 错误:标签不匹配

Apache 环境中的相同调用会返回一个格式良好的 XML,开始时没有其他字符。这是它在 IIS 上返回的内容

*<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:crearSolicitudResponse xmlns:ns1="http://localhost/EasyFlow/interfaces/webservices/"><respuesta xsi:type="xsd:string">EXITO: Solicitud 106 creada</respuesta></ns1:crearSolicitudResponse></SOAP-ENV:Body></SOAP-ENV:Envelo*

所以我在这里看到的是 IIS 在打开 XML 之前生成了额外的  并因此截断了信封的最后一个结束标记。这是请求信息和标头,以及响应信息和标头

**Request**

POST /EasyFlow/addons/webservices/CGWebservice.php HTTP/1.1
Host: 192.168.0.250:8081
User-Agent: NuSOAP/0.9.5 (1.123)
Connection: Keep-Alive
Content-Type: text/xml; charset=ISO-8859-1
SOAPAction: "http://localhost/EasyFlow/interfaces/webservices/crearSolicitud"
Content-Length: 892

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1595:crearSolicitud xmlns:ns1595="http://localhost/EasyFlow/interfaces/webservices/"><request_id xsi:type="xsd:string">106</request_id><request_name xsi:type="xsd:string">Solicitud de prueba WS</request_name><request_description xsi:type="xsd:string">Solicitud de prueba generada desde el WebService</request_description><request_createdby xsi:type="xsd:string">admin</request_createdby><tipo xsi:type="xsd:string">incop</tipo><monto xsi:type="xsd:string">1000</monto></ns1595:crearSolicitud></SOAP-ENV:Body></SOAP-ENV:Envelope>


**Response**

HTTP/1.1 200 OK
Date: Fri, 05 Jul 2013 16:15:02 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-Powered-By: PHP/5.4.15
Server: NuSOAP Server v0.9.5
X-SOAP-Server: NuSOAP/0.9.5 (1.123)
Content-Type: text/xml; charset=ISO-8859-1
Content-Length: 588

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:crearSolicitudResponse xmlns:ns1="http://localhost/EasyFlow/interfaces/webservices/"><respuesta xsi:type="xsd:string">EXITO: Solicitud 106 creada</respuesta></ns1:crearSolicitudResponse></SOAP-ENV:Body></SOAP-ENV:Envelo

如果有人可以帮助我,那就太棒了。一个多星期以来,我一直在努力解决这个问题。

谢谢

4

2 回答 2

1

终于找到问题所在了!

 字符在我的所有 php 文件服务器中生成,这是因为文件的编码设置为带有 BOM 的 UTF-8,这与 IIS 冲突。我将所有文件更改为没有 BOM 的 UTF-8,错误已修复

使用UTFCast来做,以防有人需要批量做

于 2013-07-09T16:55:20.987 回答
0

我有类似的问题,但没有 php 文件以 BOM 开头,并且没有 PHP 代码生成 BOM。也许IIS添加它?

因此,我为 NuSOAP 创建了丑陋但功能强大的 hack - 在 $payload 中添加一些空格:

文件 class.soap_server.php,send_response() 函数的底部

...
            }
        }
        //end code

        // IIS hack 
        $payload .= "          ";
        // IIS hack

        $this->outgoing_headers[] = "Content-Length: ".strlen($payload);
        reset($this->outgoing_headers);
        foreach($this->outgoing_headers as $hdr){
            header($hdr, false);
        }
        print $payload;
        $this->response = join("\r\n",$this->outgoing_headers)."\r\n\r\n".$payload;
    }
    // end of send_response() function
...
于 2017-06-01T10:05:21.160 回答