Frage

Wie würde ich das tun, wenn ich in C# eine HTTP-Verbindung öffnen, XML herunterladen und einen Wert aus dem Ergebnis erhalten muss?

Stellen Sie sich aus Gründen der Konsistenz vor, dass sich der Webservice unter www.webservice.com befindet und dass er Ihnen etwas zurückgibt, wenn Sie ihm das POST-Argument fXML=1 übergeben

<xml><somekey>somevalue</somekey></xml>

Ich möchte, dass es „somevalue“ ausspuckt.

War es hilfreich?

Lösung

Ich verwende diesen Code und er funktioniert großartig:

System.Xml.XmlDocument xd = new System.Xml.XmlDocument;
xd.Load("http://www.webservice.com/webservice?fXML=1");
string xPath = "/xml/somekey";
// this node's inner text contains "somevalue"
return xd.SelectSingleNode(xPath).InnerText;

BEARBEITEN:Mir ist gerade aufgefallen, dass Sie von einem Webservice sprechen und nicht nur von einfachem XML.Klicken Sie in Ihrer Visual Studio-Lösung mit der rechten Maustaste auf „Referenzen“ im Projektmappen-Explorer und wählen Sie „Webverweis hinzufügen“.Es erscheint ein Dialog, in dem Sie nach einer URL gefragt werden. Sie können diese einfach einfügen:"http://www.webservice.com/webservice.asmx".VS generiert automatisch alle benötigten Helfer.Dann können Sie einfach anrufen:

com.webservice.www.WebService ws = new com.webservice.www.WebService();
// this assumes your web method takes in the fXML as an integer attribute
return ws.SomeWebMethod(1);

Andere Tipps

Ich denke, es wird nützlich sein, zuerst Folgendes zu lesen:

Erstellen und Nutzen eines Webdienstes (in .NET)

Dies ist eine Reihe von Tutorials zur Verwendung von Webdiensten in .NET, einschließlich der Verwendung von XML-Eingaben (Deserialisierung).

Sie können so etwas verwenden:

var client = new WebClient();
var response = client.UploadValues("www.webservice.com", "POST", new NameValueCollection {{"fXML", "1"}});
using (var reader = new StringReader(Encoding.UTF8.GetString(response)))
{
    var xml = XElement.Load(reader);
    var value = xml.Element("somekey").Value;
    Console.WriteLine("Some value: " + value);                
}

Hinweis: Ich hatte keine Gelegenheit, diesen Code zu testen, aber er sollte funktionieren :)

Es lohnt sich möglicherweise auch hinzuzufügen, dass Sie den Webdienst so konfigurieren können, dass er POST-Aufrufe empfängt, wenn Sie speziell POST anstelle von SOAP verwenden müssen:

Schauen Sie sich die Seite auf MSDN an:Konfigurationsoptionen für XML-Webdienste, die mit ASP.NET erstellt wurden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top