我有asmx web-service,它可以从其他客户端(.NET,Delphi)成功使用 .
我尝试来到wcf,并在WCF服务上编写相同的逻辑(basicHttpBinding用于互操作性) . (.net客户端消耗正常,但delphi 7无法调用此服务) .
我开始研究两个服务(asmx,wcf)之间的差异,并检测他们的wsdl是不同的:
WSDL asmx:
<s:element name="Test">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="a" type="s:int"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="TestResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="TestResult" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
wcf的wsdl非常不同:
<wsdl:operation name="Test"> <soap:operation soapAction="http://tempuri.org/ISyncer/Test" style="document"/>
<wsdl:input> <soap:body use="literal"/> </wsdl:input>
<wsdl:output> <soap:body use="literal"/> </wsdl:output>
<wsdl:fault name="ServiceFaultExceptionFault"> <soap:fault name="ServiceFaultExceptionFault" use="literal"/> </wsdl:fault> </wsdl:operation>
我认为delphi无法生成正确的代理是一个共鸣 .
我可以配置wcf来生成与asmx相同的wsdl .
谢谢 .
1 回答
您必须展平WSDL . 请查看http://geekswithblogs.net/EltonStoneman/archive/2008/07/30/flattening-wsdl-from-wcf-services.aspx和http://wcfextras.codeplex.com/以获取信息 .