2010-03-12 11 views
11

que una instancia del objeto HttpWebRequest:Utilización de la clase HttpWebRequest

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

Cuando I "post" los datos a este servicio, ¿cómo el servicio de saber qué método web para enviar los datos a?

No tengo el código para este servicio web, lo único que sé es que está escrito en Java.

Respuesta

13

Esto se vuelve un poco complicado pero es perfectamente factible.

Debe conocer la SOAPAcción que desea realizar. Si no lo haces, no puedes hacer la solicitud. Si no desea configurarlo de forma manual, puede agregar una referencia de servicio a Visual Studio, pero deberá conocer el punto final de los servicios.

El código siguiente es para una solicitud manual de 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 
+0

Recibo un error al intentar recuperar la respuesta con lo que escribió para este 'using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())', en esa línea.¿Hay alguna otra forma de obtener la respuesta? Dice no saber, 'GetResponse()'. –

1

Los diferentes motores de servicios web enrutan las solicitudes entrantes a implementaciones de servicios web particulares de manera diferente.

Usted dijo "servicios web", pero no especificó el uso de SOAP. Voy a asumir SOAP.

El SOAP 1.1 specification dice ...

El campo de encabezado de solicitud HTTP SOAPAction puede usarse para indicar la intención de la solicitud HTTP SOAP. El valor es un URI que identifica la intención. SOAP no impone restricciones sobre el formato o la especificidad del URI o que se puede resolver. Un cliente HTTP DEBE usar este campo de encabezado al emitir una solicitud HTTP SOAP.

mayoría de los motores de servicios web cumplen con la especificación, y por lo tanto utilizan la cabecera SOAPAction:. Obviamente, esto solo funciona con las transmisiones SOAP-over-HTTP.

Cuando no se utiliza HTTP (por ejemplo, TCP u otro), el motor de servicios web necesita recurrir a algo. Muchos usan la carga útil del mensaje, específicamente el nombre del elemento de nivel superior en el fragmento XML dentro del soap:envelope. Por ejemplo, el motor podría mirar este mensaje entrante:

<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 encontrar el elemento, y luego enrutar la solicitud en base a eso.

0

Si está intentando hablar con un servicio web Java, no debe utilizar HttpWebRequest. Debería usar "Agregar referencia de servicio" y señalarlo al servicio Java.

+0

Adición de una referencia de servicio es lo que estaba haciendo, pero las cabeceras de seguridad WSE no estaban de acuerdo con el gusto del servicio de Java, iam tener que construir las cabeceras de forma manual, por lo que estoy presentando los datos utilizando HttpWebRequest . He intentado usar "Afirmaciones" pero eso no funcionó para mí (surgieron problemas al crear ciertas etiquetas que se necesitan en el encabezado de seguridad) – Developer

+0

@Nick: WSE no tiene nada que ver con "Agregar referencia de servicio". ¿Cómo está involucrado WSE? Es obsoleto y no debe usarse a menos que no tenga otras opciones. –

Cuestiones relacionadas