为什么 SOAP 在 Eclipse WSE 中正确请求 returns RESPONSE 而在使用 Postman 时却不正确?

Why SOAP request returns RESPONSE correctly in Eclipse WSE but not when using Postman?

我有一个 WSDL 应用程序生成的骨架,我使用 Web 服务资源管理器来测试一个调用,它在 Eclipse WSE 中运行良好,但是当我使用 POSTMAN 时,我收到一个响应错误:

<faultcode xmlns:ns1="http://xml.apache.org/axis/">ns1:Client.NoSOAPAction</faultcode>
            <faultstring>no SOAPAction header!</faultstring>

这是请求代码:

SOAP 请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://biller.com/onlinebilling" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <q0:sendPmtNotification>
      <PmtNotificationRequest>
        <RequestId>3454</RequestId>
        <InqDate>2018-11-08T20:35:44.626Z</InqDate>
        <PaidInvoices>
          <InvoiceId>123</InvoiceId>
          <PaidValue>2333</PaidValue>
          <BankSrc>wqewqe</BankSrc>
          <BankAuthCŪode>123</BankAuthCode>
          <ValuesDetail>
            <Description>wqeweqweqwe</Description>
            <Value>123</Value>
          </ValuesDetail>
        </PaidInvoices>
      </PmtNotificationRequest>
    </q0:sendPmtNotification>
  </soapenv:Body>
</soapenv:Envelope>

肥皂反应

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <sendPmtNotificationResponse xmlns="http://biller.com/onlinebilling">
      <PmtNotificationResponse xmlns="">
        <Status>OK</Status>
        <RequestId>1002</RequestId>
        <Message>MESSAGE_RESPONSE</Message>
        <PartnerAuthCode>partnerAUTH_CODE</PartnerAuthCode>
      </PmtNotificationResponse>
    </sendPmtNotificationResponse>
  </soapenv:Body>
</soapenv:Envelope>

POSTMAN 中的 SOAP 响应

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <soapenv:Fault>
            <faultcode xmlns:ns1="http://xml.apache.org/axis/">ns1:Client.NoSOAPAction</faultcode>
            <faultstring>no SOAPAction header!</faultstring>
            <detail>
                <ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">BATTLES_WINNER</ns2:hostname>
            </detail>
        </soapenv:Fault>
    </soapenv:Body>
</soapenv:Envelope>

邮递员截图

在 Soap 1.1 中,客户端需要发送 SOAPAction HTTP Header。这允许防火墙和服务器识别 SOAP 请求,而不必询问完整的 body 请求。它可用于智能路由,或者通常用于更好地管理 Web 服务请求。

取值可以是任意的,如果需要具体取值,WSDL中会有;通常,它是一个 URI。 Section 6.1 of the SOAP 1.1 spec 轻描淡写地描述了行为。

在 Postman 中,您可以通过点击请求部分的 Header 来添加 header。如果操作需要特定值,请检查 WSDL。根据评论,您的情况可以接受空白 header。

由于 WSE 是一个专用的 Web 服务测试工具,我猜它是友好的并且会自动添加价值。 Postman 是一种更通用的 HTTP 测试工具,因此它可能不太友好,这可能解释了行为差异。