如何获取 SOAP 1.2 来调用服务与 return 登录页面

How to get a SOAP 1.2 to call the service vs. return the landing page

我的主要问题是如何 enable/set 服务到 allow/use SOAP 1.2 而不是重定向到服务登陆页面,其中 WSDL 引用和服务方法被列为链接。

我公司的一位同事有一个 Web 服务 (ASMX),它在开发环境中的 SOAP 1.1 和 1.2 下运行良好。同样提升为UAT时(IIS-Server 2016?),它只能在SOAP 1.1下工作。

Update 使用 Postman,我发现服务登录页面是服务器试图 return 给调用它的客户端而不是将请求传递给服务。

编辑 现在知道服务器正在尝试响应什么,之前包含的一些详细信息是同一潜在问题的不同症状。

使用 SOAP 1.2 从 SoapUI 和预期的客户端服务调用,两者都收到消息(SoapUI 版本):

The server cannot service the request because the media type is unsupported.

这是有道理的,因为 Web 服务需要 XML,但收到的却是 HTML 页面。

但是,针对 SOAP 1.1 的测试给出了不同的结果。从 SoapUI 调用,我收到来自服务的成功响应。使用 basicHttpBinding 从我的 .NET 服务调用,与调用服务相比,它仍然是 return 登录页面 (HTML)。

IIS 正在解释发出请求的详细信息(可能是 header 信息?),它应该 return browser-friendly HTML而不是将请求传递给服务。

我注意到 SoapUI 的另一个奇怪之处是我可以为开发服务添加 WSDL 而无需将 ?wsdl 附加到 URL 的末尾。在 UAT 中,它仅在我明确附加 ?wsdl 时才有效。不这样做会得到:

Error loading [http://uat.service.com/services/sendmessage.asmx]: org.apache.xmlbeans.XmlException: org.apache.xmlbeans.XmlException: error: does not close tag .

万一其他人偶然发现了这个问题,我们的问题是双重的:

首先,UAT web.config 中有些东西阻止了 SOAP1.2。不幸的是,我只知道我的同事通过 UAT 复制了他的开发配置,然后那部分开始工作了。

其次,服务器正在重定向到 HTTPS。事实证明,Dev 并未以这种方式配置,而且调用确实是在 HTTP 下进行的。这是通过检查 Fiddler 发现的,它显示了 302 重定向,而开发人员显示了 "happy path" 200。更新客户端绑定以使用 HTTPS 和端点 url 执行相同的操作修复了其余部分。

  <customBinding>
    <binding name="SendMessageSoap12">
      <textMessageEncoding messageVersion="Soap12"/>
      <httpsTransport/>
    </binding>
  </customBinding>

      <endpoint address="https://serverservice.com/services/sendmessage.asmx" 
            binding="customBinding" bindingConfiguration="SendMessageSoap12" 
            contract="StatService.SendWorkflowMessageSoap" name="SendMessageSoap12"/>