0

我正在努力为 WSDL 创建一个基本定义来处理简单的登录。

我正在创建一个我正在调用的服务uQuizService

目前它真的处于起步阶段,我希望创建一个操作。我有一个名为的端口uQuizMembership和一个DoLogin由 PHP 脚本处理的操作。

所需的输入和输出DoLogin

  • loginRequest:我希望这将 USERNAME 和 PASSWORD 作为字符串。
  • loginResponse:我希望将生成的 SESSION_ID 作为字符串返回。

目前,输入被指定为单个字符串(我认为:/)。

我不确定如何为操作的loginRequest输入指定 USERNAME 和 PASSWORD DoLogin

到目前为止,这是我的 WSDL 文件:

<?xml version="1.0"?>

<wsdl:definitions name="uQuizSOAP"
targetNamespace="urn:uQuizSoap"
xmlns:tns="urn:uQuizSoap"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/">

<wsdl:service name="uQuizService">
    <port name="uQuizPort" binding="uQuizBinding">
        <soap:address location="http://uquiz/soap_server.php" />
    </port>
</wsdl:service>

<wsdl:portType name="uQuizMembership">
    <wsdl:operation name="DoLogin">
        <wsdl:input message="tns:loginRequest" />
        <wsdl:output message="tns:loginResponse" />
    </wsdl:operation>
</wsdl:portType>

<wsdl:message name="loginRequest">
    <part name="username" type="xsd:string"/>
</wsdl:message>

<wsdl:message name="loginResponse">
    <part name="login_session_id" type="xsd:string" />
</wsdl:message>

<wsdl:binding name="uQuizBinding" type="tns:uQuizPortType">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="DoLogin">
        <soap:operation soapAction="urn:xmethods-delayed-quotes#DoLogin" />
        <wsdl:input>
            <soap:body use="encoded" namespace="urn:xmethods-delayed-quotes"
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/'" />
        </wsdl:input>
        <wsdl:output>
            <soap:body use="encoded" namespace="urn:xmethods-delayed-quotes"
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>

</wsdl:definitions>

我的问题:

我不确定输入和输出定义在binding当前情况下是否正确。

我不确定如何将其更改为接受用户名和密码字符串,而不仅仅是一个字符串。

谢谢你的帮助

4

1 回答 1

2

首先,您发布的 WSDL 无效。在服务部分,端口绑定设置为何uQuizBinding时应该tns:uQuizBinding

<port name="uQuizPort" binding="tns:uQuizBinding">

而在绑定部分,类型属性设置为tns:uQuizBinding我认为应该设置的时间tns:uQuizMembership

<wsdl:binding name="uQuizBinding" type="tns:uQuizMembership">

并且请求确实被指定为单个字符串(只是username),因为您只为消息定义了一个部分:

<wsdl:message name="loginRequest">
    <part name="username" type="xsd:string"/>
    <!-- this is missing -->
    <part name="password" type="xsd:string"/>
</wsdl:message>

修复这些项目,您应该会收到如下所示的请求和响应:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:xmethods-delayed-quotes">
   <soapenv:Body>
      <urn:DoLogin>
         <username>...</username>
         <password>...</password>
      </urn:DoLogin>
   </soapenv:Body>
</soapenv:Envelope>

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:xmethods-delayed-quotes">
   <soapenv:Body>
      <urn:DoLoginResponse>
         <login_session_id>...</login_session_id>
      </urn:DoLoginResponse>
   </soapenv:Body>
</soapenv:Envelope>

另请注意,您使用的是 RPC/编码样式,这不是互操作性推荐的样式。请参阅这篇文章以获取一些指导:我应该使用哪种风格的 WSDL?也许看看一个使用文档/文字样式的工作示例:http: //www.html2xml.nl/Services/Calculator/Version1/Calculator.asmx

由于您正在执行登录操作,您可能还希望确保此操作安全:)

于 2012-11-10T21:58:21.417 回答