我正在尝试使用ServiceStack来替换自托管服务的WCF,该服务使用从WSDL上形成其消息的PHP客户端进行访问。
ServiceStack生成的WSDL具有称为"par"的"部件名称",例如:
<wsdl:message name="GetServiceDetailsIn">
<wsdl:part name="par" element="tns:GetServiceDetails" />
</wsdl:message>
那么 PHP 生成的 SOAP 请求如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body><par/></SOAP-ENV:Body>
</SOAP-ENV:Envelope>
而不是内置帮助中的这个:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetServiceDetails xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:Shout" />
</soap:Body>
</soap:Envelope>
PHP 客户端使用了 par
标记而不是 GetServiceDetails
,并且得到一个空白响应。是否可以在 ServiceStack 中重命名或删除"部件名称"定义?
似乎你不能在ServiceStack中对此做任何事情,而且它无论如何都不是为与PHP一起使用而设计的。但是,如果您让 PHP 在发送之前使用查找和替换或 XSLT 调整 XML 标记,则可以使其工作。