Как избежать ошибки "505: версия HTTP не поддерживается"?
Я пытаюсь использовать 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 кстати...
2 ответа
Тем временем я получил свой ответ на форуме разработчиков Bing. Кажется, что Microsoft как бы использует семантику для кодов ответов HTTP, отличную от большинства, и 505 также может означать "Что-то не так с вашим SOAP-запросом". Оказывается, я не использовал правильные пространства имен. После их исправления запрос прошел нормально.
Вот ссылка на ветку на форуме Bing.
Вы пытались добавить следующее в app.config или web.config?
<configuration>
<system.net>
<settings>
<servicePointManager expect100Continue="false" />
</settings>
</system.net>
</configuration>
Очевидно отправка Expect: 100-continue
в заголовке запроса возникает ошибка "505: версия HTTP не поддерживается".