1
使用Delphi XE2创建新的SOAP WebService服务器项目时,该向导允许设置更改端口和HTTPS属性。端口设置为443,HTTPS标志被选中,但是当尝试连接到创建的服务器时,它将在WSDL中返回不正确的传输(HTTP而不是HTTPS),并在服务信息页面上生成HTTP链接。自动生成的页面并不重要,但WSDL文件中的错误信息是一个问题。下面你可以看到返回的WSDL - 没有HTTPS:INDY通过SSL的WebService包含与HTTP协议的链接,而不是WSDL中的HTTPS
<?xml version="1.0"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="Itest123service" targetNamespace="http://tempuri.org/" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:ns1="urn:test123Intf">
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:test123Intf">
<simpleType name="TEnumTest">
<restriction base="string">
<enumeration value="etNone"/>
<enumeration value="etAFew"/>
<enumeration value="etSome"/>
<enumeration value="etAlot"/>
</restriction>
</simpleType>
<complexType name="TDoubleArray">
<complexContent>
<restriction base="soapenc:Array">
<sequence/>
<attribute ref="soapenc:arrayType" n1:arrayType="xs:double[]" xmlns:n1="http://schemas.xmlsoap.org/wsdl/"/>
</restriction>
</complexContent>
</complexType>
<complexType name="TMyEmployee">
<sequence>
<element name="LastName" type="xs:string"/>
<element name="FirstName" type="xs:string"/>
<element name="Salary" type="xs:double"/>
</sequence>
</complexType>
</schema>
</types>
<message name="echoEnum0Request">
<part name="Value" type="ns1:TEnumTest"/>
</message>
<message name="echoEnum0Response">
<part name="return" type="ns1:TEnumTest"/>
</message>
<message name="echoDoubleArray1Request">
<part name="Value" type="ns1:TDoubleArray"/>
</message>
<message name="echoDoubleArray1Response">
<part name="return" type="ns1:TDoubleArray"/>
</message>
<message name="echoMyEmployee2Request">
<part name="Value" type="ns1:TMyEmployee"/>
</message>
<message name="echoMyEmployee2Response">
<part name="return" type="ns1:TMyEmployee"/>
</message>
<message name="echoDouble3Request">
<part name="Value" type="xs:double"/>
</message>
<message name="echoDouble3Response">
<part name="return" type="xs:double"/>
</message>
<portType name="Itest123">
<operation name="echoEnum">
<input message="tns:echoEnum0Request"/>
<output message="tns:echoEnum0Response"/>
</operation>
<operation name="echoDoubleArray">
<input message="tns:echoDoubleArray1Request"/>
<output message="tns:echoDoubleArray1Response"/>
</operation>
<operation name="echoMyEmployee">
<input message="tns:echoMyEmployee2Request"/>
<output message="tns:echoMyEmployee2Response"/>
</operation>
<operation name="echoDouble">
<input message="tns:echoDouble3Request"/>
<output message="tns:echoDouble3Response"/>
</operation>
</portType>
<binding name="Itest123binding" type="tns:Itest123">
<binding xmlns="http://schemas.xmlsoap.org/wsdl/soap/" style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="echoEnum">
<operation xmlns="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="urn:test123Intf-Itest123#echoEnum" style="rpc"/>
<input>
<body xmlns="http://schemas.xmlsoap.org/wsdl/soap/" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:test123Intf-Itest123"/>
</input>
<output>
<body xmlns="http://schemas.xmlsoap.org/wsdl/soap/" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:test123Intf-Itest123"/>
</output>
</operation>
<operation name="echoDoubleArray">
<operation xmlns="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="urn:test123Intf-Itest123#echoDoubleArray" style="rpc"/>
<input>
<body xmlns="http://schemas.xmlsoap.org/wsdl/soap/" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:test123Intf-Itest123"/>
</input>
<output>
<body xmlns="http://schemas.xmlsoap.org/wsdl/soap/" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:test123Intf-Itest123"/>
</output>
</operation>
<operation name="echoMyEmployee">
<operation xmlns="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="urn:test123Intf-Itest123#echoMyEmployee" style="rpc"/>
<input>
<body xmlns="http://schemas.xmlsoap.org/wsdl/soap/" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:test123Intf-Itest123"/>
</input>
<output>
<body xmlns="http://schemas.xmlsoap.org/wsdl/soap/" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:test123Intf-Itest123"/>
</output>
</operation>
<operation name="echoDouble">
<operation xmlns="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="urn:test123Intf-Itest123#echoDouble" style="rpc"/>
<input>
<body xmlns="http://schemas.xmlsoap.org/wsdl/soap/" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:test123Intf-Itest123"/>
</input>
<output>
<body xmlns="http://schemas.xmlsoap.org/wsdl/soap/" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:test123Intf-Itest123"/>
</output>
</operation>
</binding>
<service name="Itest123service">
<port name="Itest123Port" binding="tns:Itest123binding">
<address xmlns="http://schemas.xmlsoap.org/wsdl/soap/" location="http://localhost:443/soap/Itest123"/>
</port>
</service>
</definitions>
当我试图导入WSDL来的soapUI工具来检查WebService的工作,我需要手动更改绑定到“https://开头”和只有RPC才能工作。
我将非常感谢任何想法如何强制INDY返回WSDL中的链接与HTTPS协议。提前致谢!