Использование класса HttpWebRequest - PullRequest
14 голосов
/ 12 марта 2010

Я создаю экземпляр объекта HttpWebRequest:

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

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

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

Ответы [ 3 ]

18 голосов
/ 12 марта 2010

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

Вы должны знать действие SOAP, которое вы хотите совершить. Если вы этого не сделаете, вы не можете сделать запрос. Если вы не хотите устанавливать это вручную, вы можете добавить ссылку на службу в 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
1 голос
/ 12 марта 2010

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

Вы сказали "веб-сервисы", но не указали использование SOAP. Я собираюсь предположить, что мыло.

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

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

Большинство механизмов веб-служб соответствуют спецификации и поэтому используют заголовок 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, а затем направьте запрос на основе этого.

0 голосов
/ 12 марта 2010

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

...