我正在尝试将PHP soap服务器与用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库的情况下更改它?
答案 0 :(得分: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"
>
答案 1 :(得分:0)
由于您使用的是自动发现/魔法肥皂服务创建者,因此无法覆盖其按原样创建的名称。
如果你想这样做,你可以扩展Zend_Soap_AutoDiscover并实现你自己的setClass方法,该方法在生成wsdl时使用你自己的名字选择。
答案 2 :(得分:0)
您需要做的就是重命名您的服务类(由setClass()调用设置的服务类)并且您很好。