Используя класс HttpWebRequest

Я инстанцирую объекта HttpWebRequest:

HttpWebRequest httpWebRequest = 
    WebRequest.Create("http://game.stop.com/webservice/services/gameup")
    as HttpWebRequest;

Когда я "отправляю" данные на этот сервис, как сервис знает который веб-метод отправить данные?

У меня нет кода к этому веб-сервису, все, что я знаю, то, что он был записан в Java.

14
задан Cheeso 12 March 2010 в 18:11
поделиться

3 ответа

Это становится немного сложнее, но вполне выполнимо.

Вы должны знать SOAPAction, которое вы хотите выполнить. Если вы этого не знаете, вы не сможете сделать запрос. Если вы не хотите настраивать это вручную, вы можете добавить ссылку на службу в Visual Studio, но вам нужно будет знать конечную точку службы.

Ниже приведен код для ручного SOAP-запроса.

// load that XML that you want to post
// it doesn't have to load from an XML doc, this is just
// how we do it
XmlDocument doc = new XmlDocument();
doc.Load( Server.MapPath( "some_file.xml" ) );

// create the request to your URL
HttpWebRequest request = (HttpWebRequest)WebRequest.Create( Your URL );

// add the headers
// the SOAPACtion determines what action the web service should use
// YOU MUST KNOW THIS and SET IT HERE
request.Headers.Add( "SOAPAction", YOUR SOAP ACTION );

// set the request type
// we user utf-8 but set the content type here
request.ContentType = "text/xml;charset=\"utf-8\"";
request.Accept = "text/xml";
request.Method = "POST";

// add our body to the request
Stream stream = request.GetRequestStream();
doc.Save( stream );
stream.Close();

// get the response back
using( HttpWebResponse response = (HttpWebResponse)request.GetResponse() )
{
     // do something with the response here
}//end using
18
ответ дан 1 December 2019 в 13:21
поделиться

Если вы пытаетесь связаться с веб-службой Java, вам не следует использовать HttpWebRequest. Вы должны использовать «Добавить ссылку на службу» и указать ее на службу Java.

0
ответ дан 1 December 2019 в 13:21
поделиться

Различные механизмы веб-служб по-разному маршрутизируют входящие запросы к конкретным реализациям веб-служб.

Вы сказали «веб-службы», но не указали использование SOAP. Я возьму на себя SOAP.

В спецификации SOAP 1.1 говорится ...

Поле заголовка HTTP-запроса SOAPAction может использоваться для указания цели HTTP-запроса SOAP. Значение - это URI, определяющий намерение. SOAP не накладывает ограничений на формат или специфику URI или на то, что он разрешим. HTTP-клиент ДОЛЖЕН использовать это поле заголовка при выдаче HTTP-запроса SOAP.

Большинство механизмов веб-сервисов соответствуют спецификации и поэтому используют заголовок SOAPAction: . Очевидно, это работает только с передачами SOAP-over-HTTP .

Когда HTTP не используется (скажем, TCP или какой-то другой), механизму веб-сервисов нужно что-то делать. Многие используют полезную нагрузку сообщения, в частности имя элемента верхнего уровня во фрагменте XML в пределах soap: envelope . Например, механизм может просмотреть это входящее сообщение:

<soap:Envelope
  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
  soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
   <soap:Body>
       <m:GetAccountStatus xmlns:m="Some-URI">
           <acctnum>178263</acctnum>
       </m:GetAccountStatus>
   </soap:Body>
</soap:Envelope>

... найти элемент GetAccountStatus , а затем направить запрос на его основе.

1
ответ дан 1 December 2019 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: