0

我正在尝试将 PHP 肥皂服务器与用 C# 编写的客户端连接起来。WSDL 就是这样创建的:

$autodiscover = new Zend_Soap_AutoDiscover('Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex');
$autodiscover->setClass('Soap_Service1');
$autodiscover->handle();

然后我收到:

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:tns="http://www.xx.de/soap/version/1" 
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    targetNamespace="http://www.xx.de/soap/version/1"
    name="Soap_Services1" 
>

在 C# 中解析的这个 'name="Soap_Services1"' 属性看起来很难看(Services.Soap_Services1Service)。当然 name 与 ServiceBinding 和 PortType 相关。有没有办法在不手动破解 zend 库的情况下更改它?

4

3 回答 3

1

是的。只需重命名您的服务类;)

$autodiscover->setClass('CoolServiceName');

会给你

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:tns="http://www.xx.de/soap/version/1" 
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    targetNamespace="http://www.xx.de/soap/version/1"
    name="CoolServiceName" 
>
于 2010-12-10T15:30:31.137 回答
0

您需要做的就是重命名您的服务类(由 setClass() 调用设置的那个),您就可以了。

于 2011-05-06T11:18:36.347 回答
0

由于您使用的是自动发现/魔法肥皂服务创建者,因此您不能按原样覆盖它创建的名称。

如果您想这样做,您可以扩展 Zend_Soap_AutoDiscover 并实现您自己的 setClass 方法,该方法在生成 wsdl 时使用您自己的名称选择。

于 2010-12-10T15:30:11.293 回答