使用字符串从Java构建SOAP信封

使用字符串从Java构建SOAP信封,java,wcf,soap,Java,Wcf,Soap,我正在努力理解SOAP服务是如何工作的,我的客户机是Java的,服务使用的是WCF(虽然理论上这并不重要)。如果给我一个SOAP信封示例,请执行以下操作: -Build a SOAP envelope that exactly follows the example -Use an HttpPost object to post the data to www.service.com/service.svc 这是呼叫服务的正确(尽管不正确)方式吗?因为当我这样做时,我会收到一个400响应,即使

我正在努力理解SOAP服务是如何工作的,我的客户机是Java的,服务使用的是WCF(虽然理论上这并不重要)。如果给我一个SOAP信封示例,请执行以下操作:

-Build a SOAP envelope that exactly follows the example
-Use an HttpPost object to post the data to www.service.com/service.svc

这是呼叫服务的正确(尽管不正确)方式吗?因为当我这样做时,我会收到一个400响应,即使我的SOAP信封与示例完全相同。

它应该可以工作。您可能缺少一些必需的标题。我建议使用TCP监视器,拦截工作请求并分析其内容。

我认为您收到HTTP 400(错误请求)的原因是您的服务使用的是
BasicHttpBinding
,即SOAP 1.1,并且您最有可能发送SOAP 1.2消息(正如您在评论中指出的,您正在使用SOAP 1.2)。两者的消息格式不同

最简单的解决方案是使用SOAP1.1,但如果您必须(或想要)使用SOAP1.2,以下内容可能会有所帮助

在配置文件中,您没有定义任何端点或绑定,这是可以的,因为WCF将在4.0及更高版本中使用默认值

但是,HTTP的默认绑定是
BasicHttpBinding
。您需要使用支持SOAP1.2的绑定(或将消息更改为SOAP1.1)。您可以使用支持SOAP1.2的
WSHttpBinding
,但您必须更改安全设置(默认情况下是Windows)

另一个选项是使用实现SOAP1.1的自定义绑定

我将给出几个例子(我从未为WCF服务编写过非.NET客户端,所以我不能肯定它是否会工作,但至少应该让您朝着正确的方向前进)

WSHttpBinding

通过覆盖配置文件中的协议映射,将HTTP请求的默认协议映射从
BasicHttpBinding
更改为
WsHttpBinding

<protocolMapping>
  <addBinding protocol="wsHttpBinding" scheme="http" />
</protocolMapping>
您需要显式地将其设置为端点(使用端点的
bindingConfiguration
属性),这意味着您需要在配置文件中创建端点定义

定制绑定的想法来自


希望这会给你一些想法,让你重新开始。

什么是WCF服务绑定,你使用的是哪个版本的SOAP?WCF使用
basicHttpBinding
用于SOAP 1.1-所有其他(我相信)是1.2。我们正在使用SOAP 1.2,但我不确定我们正在使用的绑定。BasicHttpBinding是我在这个场景中想要的似乎很合理。快速检查后,配置文件确实指定我们使用BasicHttpBinding
,或者这不是指定绑定的正确方法?这是用于clie的配置文件吗nt还是服务?顺便说一句,
basicHttp**s**binding
basicHttpBinding
不同-第一个是为TLS设计的。而且,上面的段只是默认绑定。你能发布整个配置文件吗?这是服务的绑定。我只是在编写一个非WCF客户端应用程序来使用它服务。这里有完整的配置文件:它是HTTP头还是SOAP头?在文章中,我只将内容类型指定为“text/xml”。我对使用web服务比较陌生,所以我想我不知道还需要什么。
<bindings>
  <wsHttpBinding>
    <binding>
        <security mode="None" />
    </binding>
  </wsHttpBinding>
</bindings>
<bindings>
  <customBinding>
    <binding name="Custom">
      <textMessageEncoding messageVersion="Soap12" />
      <httTransport />
    </binding>
  </customBinding>
</bindings>