2010-12-10 40 views
0

我正在尝试连接PHP soap服务器和用C#编写的客户端。 WSDL以如下方式创建:如何在Zend_Soap_AutoDiscover生成的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" 
> 

这个 'NAME = “Soap_Services1”' 在C#中解析属性长相丑陋(Services.Soap_Services1Service)。当然名字与ServiceBinding和PortType连接。有没有办法改变它,而无需手动攻击zend库?

回答

0

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

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

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" 
> 
0

所有你需要做的是重新命名您的服务类(一个由setClass(套)调用),你是好。

相关问题