gpt4 book ai didi

soap - SOAP WS 如何知道请求的操作?

转载 作者:行者123 更新时间:2023-12-01 10:46:20 24 4
gpt4 key购买 nike

假设我的 WSDL 包含以下内容:

<message name="modifRequest">
<part name="siList" element="sn:siListElement"/>
</message>
<message name="modifResponse">
<part name="siList" element="sn:boolElement"/>
</message>

<portType name="siModificationPortType">
<operation name="delete">
<input message="tns:modifRequest" />
<output message="tns:modifResponse" />
</operation>
<operation name="update">
<input message="tns:modifRequest" />
<output message="tns:modifResponse" />
</operation>
</portType>

无论是在更新还是删除请求中,它都会在 SoapUI 中生成以下 SOAP 客户端消息:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"         xmlns:sim="simSchema">
<soapenv:Header/>
<soapenv:Body>
<sim:siListElement>
<!--1 or more repetitions:-->
<sim:si name="?" desc="?" workspace="workspace">
<!--Zero or more repetitions:-->
<sim:bp name="?" value="?" bps="?"/>
</sim:si>
</sim:siListElement>


因此,似乎唯一通过 HTTP 发送到 WS 的是 siListElement .但是 WS 怎么知道客户端想要达到的操作(这里是删除/更新)?特别是在两个操作的输入具有相同结构的情况下。

最佳答案

WS通过SOAPAction知道操作HTTP header 。当您在 SOAPUI 中创建新的 SOAP 测试请求时,您必须选择操作并选择它,然后 SOAPUI 会自动为您请求设置操作,并将此操作映射到必要的 SOAPAction当您运行测试请求时,它将作为 HTTP header 发送。

之所以会发生这种“魔术”,是因为在您的 WSDL 中肯定还有一个您在问题中缺少的信息,它绑定(bind)了 wsdl:operation。反对soap:operation .在您的 WSDL 中可能有类似的内容:

<binding name="bindingDelete" type="siModificationPortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="delete">
<soap:operation soapAction="delete"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>

<binding name="bindingAdd" type="siModificationPortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="add">
<soap:operation soapAction="add"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>

因此,当您向 SOAPUI 指定您的操作是 删除 然后 SOAPUI 正在发送 SOAPAction具有正确值的 http header ,例如 delete , 而不是您指定 添加然后操作 SOAPAction具有一些值的 http header ,例如 add是发送。

您可以查看我在运行您的请求时所说的内容,然后单击 Raw SOAPRequest 左侧的选项卡并检查不同的 SOAPAction您的操作类型的值:

enter image description here

希望这可以帮助,

关于soap - SOAP WS 如何知道请求的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25410905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com