我正在尝试使用Bing SOAP API进行简单的搜索请求。但是现在我终于想出了如何使用JAX-WS发送请求,我再次陷入困境。我收到了答复
我发送请求时com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 505: HTTP Version not supported
。任何人都可以帮助我吗?
我正在使用JAX-WS 2.0进行动态调用,如果这有任何区别的话。
Dispatch<SOAPMessage> dispatch = service.createDispatch(
portName, SOAPMessage.class, Service.Mode.MESSAGE);
MessageFactory messageFactory = ((SOAPBinding) dispatch.getBinding())
.getMessageFactory();
SOAPMessage request = messageFactory.createMessage();
// Add content to the request
SOAPMessage response = dispatch.invoke(request);
Wireshark告诉我,请求标头包含POST /soap.asmx HTTP/1.1
,并且回复也会返回HTTP / 1.1版本。这不是意思吗,没关系?
谢谢,moxn
更新: 这不是JAX-WS特定的错误。我通过Commons HTTPClient实现了通信,仍然得到了相同的505。
遵循HTTPClient请求的标头:
Content-Length: 435
Content-Type: text/xml
Host: api.bing.net:80
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.0.1 (java 1.5)
Expect: 100-Continue
更新: 它也不适用于HTTP / 1.0 btw ...
答案 0 :(得分:2)
您是否尝试将以下内容添加到app.config或web.config?
<configuration>
<system.net>
<settings>
<servicePointManager expect100Continue="false" />
</settings>
</system.net>
</configuration>
显然,在请求标头中发送Expect: 100-continue
会导致抛出“505:HTTP Version not supported”错误。
答案 1 :(得分:1)
与此同时,我在Bing开发者论坛中得到了答案。似乎微软对HTTP响应代码使用的语义与大多数不同,而505也可能意味着“SOAP请求有问题”。事实证明我没有使用正确的命名空间。修好后,请求就完成了。
以下是Bing论坛中的link to the thread。