2010-06-08 4 views
2

Je suis en mesure de récupérer le wsdl à partir d'un serveur avec le code ci-dessous. Comment puis-je maintenant appeler une méthode (GetVersion) à partir de ce même service?Comment appeler un service Web en utilisant HttpWebRequest

Essayer http://www.servername.com/DataService.asmx/GetVersion renvoie une erreur indiquant que la page ne peut pas être trouvée. Je n'ai aucun problème à appeler la méthode à partir d'une référence .NET WebService, mais j'aimerais pouvoir utiliser un HttpWebRequest.

Dim req As HttpWebRequest 
Dim resp As HttpWebResponse 
Dim sr As IO.StreamReader 

req = WebRequest.Create("http://www.servername.com/DataService.asmx?wsdl") 
resp = req.GetResponse 

sr = New IO.StreamReader(resp.GetResponseStream) 
txt.Text = sr.ReadToEnd 
sr.Close() 
+0

Pourquoi? Quel est le problème avec la référence du service Web? – SLaks

+0

Vous ne le faites généralement pas, c'est-à-dire, à moins que vous ne soyez prêt à "parler" un service Web (aka SOAP). Le HttpWebRequest est juste un mécanisme de transport (et normalement le seul) utilisé par les services Web - sans doute le plus facile (bien qu'avec leurs propres caprices) ajouté par une référence de service Web. Vous pouvez * changer * l'objet de requête et les options utilisées. –

+0

Le service sera appelé par un environnement non-pointNet. Je veux savoir comment cela se fait sans utiliser le proxy de service Web. – Bill

Répondre

0

Je crois que votre seul problème est la configuration du serveur Web. La configuration de chaque web-service (fichier web.config dans mon cas, puisque j'utilise IIS) devrait permettre la gestion des protocoles autorisés à y accéder: Get, Post, et/ou Soap.

Je viens de tester mon propre service Web et il répond aux demandes GET de mon navigateur ... Il répond également prévu requêtes POST (un code je me suis adapté de http://www.4guysfromrolla.com/articles/022410-1.aspx dans l'extrait suivant:)

Dim payload As Byte() 
    payload = Text.Encoding.ASCII.GetBytes("paramName=firstValue&p2=secondValue") 

    Dim webRequest As System.Net.HttpWebRequest 
    webRequest = System.Net.HttpWebRequest.Create("http://www.servername.com/DataService.asmx/GetVersion") 
    webRequest.Method = "POST" 
    webRequest.KeepAlive = False 
    webRequest.ContentType = "application/x-www-form-urlencoded" 
    webRequest.ContentLength = payload.Length 

    Dim reqStream As System.IO.Stream 
    reqStream = webRequest.GetRequestStream() 
    reqStream.Write(payload, 0, payload.Length) 
    reqStream.Close() 

    Dim webResponse As System.Net.HttpWebResponse 
    webResponse = webRequest.GetResponse() 

    Dim reader As System.IO.StreamReader 
    reader = New System.IO.StreamReader(webResponse.GetResponseStream()) 
    Dim xmlDoc As System.Xml.XmlDocument 
    xmlDoc = New System.Xml.XmlDocument() 
    xmlDoc.LoadXml(reader.ReadToEnd()) 

Bonne chance.

Questions connexes