2010-06-08 1 views
2

Я могу успешно получить wsdl с сервера с помощью кода ниже.Как вызвать веб-сервис с помощью HttpWebRequest

Как мне теперь вызвать метод (GetVersion) из этой же службы?

Попытка http://www.servername.com/DataService.asmx/GetVersion возвращает ошибку, указав, что страница не найдена. У меня нет проблем с вызовом метода из справки .NET WebService, но я бы хотел использовать 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

Почему? Что случилось с ссылкой на веб-службу? – SLaks

+0

Вы, как правило, этого не делаете, то есть, если вы не хотите «говорить» на веб-сервисе (он же SOAP). HttpWebRequest - это всего лишь один транспортный механизм (и обычно один), используемый веб-сервисами - возможно, самый легкий (хотя и с их собственными причудами), добавленный через ссылку на веб-службу. Вы * можете * изменить объект запроса и используемые параметры. – 2010-06-08 02:41:21

+0

Служба будет вызвана средой, отличной от dotNet. Я хочу знать, как это делается без использования прокси-сервера веб-службы. – Bill

ответ

0

Я считаю, что единственной проблемой является конфигурация веб-сервера. Конфигурация каждого веб-сервиса (файл web.config в моем случае, так как я использую IIS) должна позволять управлению протоколами разрешать доступ к нему: Get, Post и/или Soap.

Я только что проверил мой собственный веб-сервис, и он отвечает на запросы GET из моего браузера ... Он также отвечает, как ожидается, POST запросы (я приспособил код из http://www.4guysfromrolla.com/articles/022410-1.aspx в следующем фрагменте кода:)

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()) 

Удачи.