我正在尝试为预先存在的Web服务创建WSDL。我有一个现有的客户端和现有的服务器,我已经捕获了使用Wireshark的格式。我正在尝试编写一个使用相同格式的新客户端。因此,我试图尽可能地匹配格式,无论是否正确。我正在使用XmlSPY编写一个WSDL文件,我希望它能够转到C#并生成接口代码。
到目前为止,这是我的WSDL:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.ecerami.com/wsdl/HelloService.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ecerami.com/wsdl/HelloService.wsdl" name="HelloService">
<message name="api:create"/>
<message name="oanda:create">
<part name="parameter"/>
<part name="parameter"/>
</message>
<portType name="Oanda_PortType">
<operation name="create">
<input message="tns:oanda:create"/>
<output message="tns:api:create"/>
</operation>
</portType>
<binding name="Oanda_binding" type="tns:Oanda_PortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="create">
<soap:operation soapAction="sayHello"/>
<input>
<soap:body use="encoded" namespace="oanda.fxtrade.api"/>
</input>
<output>
<soap:body use="encoded" namespace="oanda.fxtrade.api"/>
</output>
</operation>
</binding>
<service name="Oanda_service">
<documentation>WSDL File for Oanda FX Trade API (local SOAP server)</documentation>
<port name="Oanda_port" binding="tns:Oanda_binding">
<soap:address location="http://10.0.0.3:18081"/>
</port>
</service>
</definitions>
以下是我要复制的示例邮件。这就是原始客户端发出的内容:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<oanda:create xmlns:oanda="oanda.fxtrade.api">
<parameter>FXGAME</parameter>
<parameter></parameter>
</oanda:create>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
以下是我的WSDL将为同一消息发出的XmlSPY:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<m:create xmlns:m="oanda.fxtrade.api">
<parameter/>
<parameter/>
</m:create>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我现在的问题是 - 如何匹配原始客户端生成的“oanda:”前缀?这是什么叫做命名空间前缀?我生成的代码中的“m:”来自哪里?我可以在本网站的其他示例中找到这方面的内容,但没有一个使用WSDL,至少据我所知。
感谢您提供任何帮助。
当我尝试通过svcutil.exe运行上面的WSDL时,我遇到两个问题。
1)XML格式不正确,因为您不能有多个具有相同名称的参数。 XMLSpy也抱怨这个,所以我现在通过将它们重命名为Parameter1和Parameter2来对它进行处罚。
具体错误是:“指定了多个名为'parameter'的消息部分。每个消息部分必须具有唯一的名称。”
2)一旦过了这个,我就会收到这个错误:
“名称空间前缀'tns:oanda'未定义。”
那么,再次:如何在WSDL文件中更改/添加命名空间定义?
答案 0 :(得分:4)
名称空间前缀无关紧要。这两个例子在XML规则上是相同的。
答案 1 :(得分:1)
命名空间前缀与变量名称完全相同。您可以使用您希望的任何名称命名命名空间。
这类似于以下java代码:
在第一个XML中:api.fxtrade.onada onada;
在第二个XML中:api.fxtrade.onada m;
换句话说,第一个XML可以理解为:
指的是&#34; oanda.fxtrade.api
&#34;变量onada
的命名空间,create
命名空间中的onada
标记,其参数值为FXGAME 。
第二个XML可以理解为:
指的是&#34; oanda.fxtrade.api
&#34;变量m
的命名空间,create
命名空间中的m
标记,将有一个参数...