2012-06-06 73 views
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协议。提前致谢!

回答

0

我有同样的问题,解决它像这样:

查看生成的WSDLHTMLPublish1的属性。 更改属性PublishOptions - > poPublishLocationAsSecure为true