1

当使用 Delphi XE2 创建新的 SOAP WebService 服务器项目时,向导允许设置更改端口和 HTTPS 属性。端口设置为 443,检查 HTTPS 标志,但是当尝试连接到创建的服务器时,它在 WSDL 中返回不正确的传输(HTTP 而不是 HTTPS)并在服务信息页面上生成 HTTP 链接。自动生成的页面不是那么重要,但是 WSDL 文件中的错误信息是一个问题。您可以在下面看到返回的 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 使用 HTTPS 协议返回 WSDL 中的链接。提前致谢!

4

1 回答 1

0

我遇到了同样的问题并像这样解决了它:

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

于 2013-01-30T11:16:01.413 回答