2010-06-04 14 views
5

Ich versuche eine Funktion zu schreiben, die eine Webmethode von einem Webseriv mit dem Namen und der URL des Webservice aufrufen kann. Ich habe Code in einem Blog gefunden, der das bis auf ein Detail gut macht. Es erfordert, dass das Anforderungs-XML ebenfalls bereitgestellt wird. Das Ziel besteht darin, die XML-Anforderungsvorlage vom Webdienst selbst abzurufen. Ich bin mir sicher, dass dies irgendwie möglich ist, da ich sowohl die Anfrage- als auch die Antwort-XML-Vorlage sehen kann, wenn ich in meinem Browser auf die URL eines Webservice zugreife.Programmgesteuertes aufrufen von Webmethoden in C#

Dies ist der Code, der programmatisch die Webmethod ruft:

XmlDocument doc = new XmlDocument(); 
//this is the problem. I need to get this automatically 
doc.Load("../../request.xml"); 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost/dummyws/dummyws.asmx?op=HelloWorld"); 
req.ContentType = "text/xml;charset=\"utf-8\""; 
req.Accept = "text/xml"; 
req.Method = "POST"; 
Stream stm = req.GetRequestStream(); 
doc.Save(stm); 
stm.Close(); 
WebResponse resp = req.GetResponse(); 
stm = resp.GetResponseStream(); 
StreamReader r = new StreamReader(stm); 
Console.WriteLine(r.ReadToEnd()); 
+0

Wie können Sie eine Methode aufrufen (Web-Service oder anders), wenn Sie nicht im Voraus wissen, welche Parameter es erfordert? –

+0

Nehmen wir an, dass diese Webmethoden keine Parameter benötigen. – hancock

+0

Zeigt der Webdienst eine WSDL-Beschreibung an? – dariom

Antwort

2

oben aus den Kommentaren Im Anschluss an. Wenn Sie eine WSDL-Datei haben, die Ihren Dienst beschreibt, verwenden Sie diese als die Informationen, die für die Kommunikation mit Ihrem Webdienst erforderlich sind.

eine Proxy-Klasse Gebrauch mit einem Service-Proxy zu kommunizieren, ist eine einfache Möglichkeit, abstrakten, um dich aus den zugrunde liegenden Rohrleitungen von HTTP und XML.

Es gibt Möglichkeiten, dies zu Laufzeit zu tun - im Wesentlichen den Code zu erzeugen, dass Visual Studio generiert, wenn Sie eine Web-Service-Referenz zu Ihrem Projekt hinzufügen.

Ich habe eine Lösung verwendet, die auf basiert: this newsgroup question, aber es gibt auch other examples out there.

+0

Ja, das scheint ein guter Ansatz zu sein. Danke für die Antwort. – hancock

0

FYI, Ihr Code fehlt using Blöcke. Es sollte mehr wie folgt aussehen:

XmlDocument doc = new XmlDocument(); 
//this is the problem. I need to get this automatically 
doc.Load("../../request.xml"); 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost/dummyws/dummyws.asmx?op=HelloWorld"); 
req.ContentType = "text/xml;charset=\"utf-8\""; 
req.Accept = "text/xml"; 
req.Method = "POST"; 

using (Stream reqstm = req.GetRequestStream()) 
{ 
    doc.Save(reqstm); 
} 

using (WebResponse resp = req.GetResponse()) 
{ 
    using (Stream respstm = resp.GetResponseStream()) 
    { 
     using (StreamReader r = new StreamReader(respstm)) 
     { 
      Console.WriteLine(r.ReadToEnd()); 
     }  
    } 
} 
+0

Sie haben recht, aber ich habe die Lösung von dariom verwendet, die diesen Code nicht verwendet. – hancock

Verwandte Themen