2010-08-08 3 views
4

J'essaie d'utiliser l'API Bing SOAP pour une requête de recherche simple. Mais maintenant que j'ai finalement compris comment envoyer la requête en utilisant JAX-WS, je suis de nouveau coincé. Je reçois la réponse com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 505: HTTP Version not supported lorsque j'envoie la demande. Quelqu'un peut m'aider? J'utilise l'invocation dynamique avec JAX-WS 2.0, si cela fait une différence.Comment éviter l'erreur "505: Version HTTP non supportée"?

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 me dit que l'en-tête de requête contient POST /soap.asmx HTTP/1.1 et la réponse revient également avec un HTTP/1.1 versioning. Cela ne signifie-t-il pas que tout va bien?

Merci, moxn

MISE À JOUR: Ce n'est pas une erreur spécifique JAX-WS. Je mis en œuvre la communication via Commons HttpClient et encore obtenir le même 505.

Après les en-têtes de la demande de 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 

MISE À JOUR: Il ne fonctionne pas avec HTTP/1.0 btw.

+1

Pouvez-vous montrer la demande complète que vous essayez d'envoyer (URL et le poste complet de votre capture Wireshark)? Parfois, l'espace dans une URL ou un article peut provoquer ce problème. c'est-à-dire que l'erreur pourrait pointer un problème différent de ce que vous pensez que c'est .. – gbvb

+0

@gbvb Hé, merci de vous renseigner. J'ai complètement oublié cette question. Je l'ai déjà compris (voir réponse ci-dessous). – moxn

Répondre

1

En attendant, j'ai trouvé ma réponse dans le forum des développeurs de Bing. Il semble que Microsoft utilise des sémantiques différentes pour les codes de réponse HTTP et qu'un 505 peut aussi signifier "Quelque chose ne va pas avec votre requête SOAP". Il s'avère que je n'ai pas utilisé les espaces de noms corrects. Après les avoir réparés, la demande s'est très bien passée.

Voici le link to the thread dans le forum Bing.

+0

Beau travail en trouvant celui-là. –

2

Avez-vous essayé d'ajouter ce qui suit à app.config ou web.config?

<configuration> 
    <system.net> 
    <settings> 
     <servicePointManager expect100Continue="false" /> 
    </settings> 
    </system.net> 
</configuration> 

Il est évident que l'envoi de la Expect: 100-continue en-tête de requête provoque la « 505: HTTP Version non prise en charge » erreur d'être jeté.

Expect 100-continue

Questions connexes