2010-03-12 15 views
11

ho un'istanza dell'oggetto HttpWebRequest:Uso della classe HttpWebRequest

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

Quando I "post" i dati a questo servizio, come fa il servizio di sapere quale metodo Web per inviare i dati a?

Non ho il codice per questo servizio Web, tutto quello che so è che è stato scritto in Java.

risposta

13

Questo diventa un po 'complicato ma è perfettamente fattibile.

È necessario conoscere la funzione SOAP che si desidera eseguire. Se non lo fai non puoi fare la richiesta. Se non si desidera impostarlo manualmente, è possibile aggiungere un riferimento al servizio in Visual Studio, ma è necessario conoscere l'endpoint dei servizi.

Il seguente codice è per una richiesta SOAP manuale.

// 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

Viene visualizzato un errore quando si tenta di ottenere la risposta con ciò che è stato scritto per questo 'using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())', su quella riga.C'è un altro modo per ottenere la risposta? Dice non noto, 'GetResponse()'. –

1

Diversi motori di servizi Web indirizzano le richieste in arrivo a particolari implementazioni di servizi Web in modo diverso.

Hai detto "servizi web", ma non hai specificato l'uso di SOAP. Ho intenzione di assumere SOAP.

Il SOAP 1.1 specification dice ...

Il SOAPAction HTTP campo di richiesta di intestazione può essere utilizzato per indicare l'intento della richiesta HTTP SOAP. Il valore è un URI che identifica l'intento. SOAP non pone restrizioni sul formato o specificità dell'URI o che sia risolvibile. Un client HTTP DEVE utilizzare questo campo di intestazione quando si invia una richiesta HTTP SOAP.

maggior parte dei motori di servizi web sono conformi alle specifiche, e quindi utilizzare l'intestazione SOAPAction:. Questo ovviamente funziona solo con le trasmissioni SOAP-over-HTTP.

Quando HTTP non viene utilizzato (ad esempio, TCP o altri), il motore dei servizi Web deve ricorrere a qualcosa. Molti usano il payload del messaggio, in particolare il nome dell'elemento di livello superiore nel frammento XML all'interno dello soap:envelope. Ad esempio, il motore potrebbe guardare a questo messaggio in arrivo:

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

... trovare l'elemento GetAccountStatus, e quindi indirizzare la richiesta in base a questo.

0

Se si sta tentando di parlare con un servizio Web Java, non utilizzare HttpWebRequest. È necessario utilizzare "Aggiungi riferimento servizio" e indirizzarlo al servizio Java.

+0

L'aggiunta di un riferimento al servizio è quello che stavo facendo, ma le intestazioni di sicurezza WSE non erano come per il gradimento del servizio Java, iam dover costruire le intestazioni manualmente, e così sto trasmettendo i dati utilizzando HttpWebRequest . Ho provato a utilizzare "Asserzioni" ma non ha funzionato per me (i problemi si sono verificati durante la creazione di determinati tag necessari nell'intestazione di sicurezza) – Developer

+0

@Nick: WSE non ha nulla a che fare con "Aggiungi riferimento servizio". Come è coinvolto WSE? È obsoleto e non dovrebbe essere usato a meno che tu non abbia altre scelte. –