Hallo,
ich hoffe ihr könnt mir helfen. In den letzten Jahren und Monaten hat sich die Anbindung von Schnittstellen immer weiter in Richtung SOAP geändert und dies war bis jetzt, in Framework 3.5. und 4 gar kein Problem, da Visual Studio ein hier doch extrem unterstützt hat.
Jetzt habe ich aber das Problem, dass eine alte Applikation ebenfalls eine SOAP Anbindung bekommen soll, aber alle Workplaces maximal über Framework 2.0 verfügen und hier auch kein Upgrade mehr bekommen können ... ich habe leider überhaupt keine Ahnung, wie ich einen SOAP aufruf, mit 3 Parametern (ID, Datum, Status) durchführen kann ... leider konnte ich auch bei Google nichts passendes mit einem Beispiel finden ...
Könnt Ihr mir hier vielleicht weiterhelfen, wie ich hier einen Aufurf durchführen und anschließend den Response auswerten kann?
Ich danke euch sehr im Voraus
.NET Version is ja prinzipiell egal.
Musst halt bei 1.0 / 2.0 alles mit HttpWebRequest und XmlDocument selbst in die Hand nehmen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
habe ich fast befürchtet ...
Bei 3.5 und 4.0 kann ich die Werte einfach so an den WebService übergeben. Muss ich bei 1.1 / 2.0 dann einen kompletten envelope bauen?
Hast du vielleicht ein einfach Beispiel wo man / ich mir dies einmal grob anschauen kann?
Danke dir
Naja, HttpWebRequest Beispiele findest Du auf der MSDN und wie man ein XmlDocument erstellt sollte bekannt sein. Das musst eben kombinieren.
Auch .NET 3.5 hat keinen SOAP-Parser (falls Du sowas suchst).
Es gibt das Projekt PocketSOAP für C# aber ich glaub das ist tot und auch nur SOAP 1.2. Hatte das vor ewiger Zeiten mal genutzt und war ned so das Wahre.
Ab 3.5 gibts ja dann ServiceContract und mit dem geht ja fast alles viel einfacher. Und da .NET 2.0, 3.0 und 3.5 die gleiche CLR verwendet: nimm einfach die .NET 3.5 DLLs des ServiceContract und für sie Deiner 2.0 Anwendung hinzu; müsste klappen (wie das Lizenz-technisch erlaubt ist: keine Ahnung).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Irgendwo hängt es, ich kann aber nicht sagen wo, wie, ...
Ich bekomme aber vom Webservice nur einen 500 Internal Error zurück ... leider kann ich hier ändern was ich will, es ändert nichts 🙁
Wäre super, wenn mir vielleicht jemand von euch helfen könnte ... X(
XmlDocument xmlDoc = new XmlDocument();
XmlNode rootNode = xmlDoc.CreateElement("soapenv:Envelope");
xmlDoc.AppendChild(rootNode);
XmlNode userNode = xmlDoc.CreateElement("soapenv:Header");
rootNode.AppendChild(userNode);
userNode = xmlDoc.CreateElement("soapenv:Body");
XmlNode userNode2 = xmlDoc.CreateElement("ab:StatusReturn");
XmlNode userNode3 = xmlDoc.CreateElement("StatusInfo110");
XmlNode userNode4 = xmlDoc.CreateElement("ID");
userNode4.InnerText = "3905";
userNode3.AppendChild(userNode4);
userNode4 = xmlDoc.CreateElement("STATUS");
userNode4.InnerText = "110";
userNode3.AppendChild(userNode4);
userNode4 = xmlDoc.CreateElement("UnixDateTime");
userNode4.InnerText = "1388876400";
userNode3.AppendChild(userNode4);
userNode2.AppendChild(userNode3);
userNode.AppendChild(userNode2);
rootNode.AppendChild(userNode);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://WEBSERVICEURL");
request.ContentType = "text/xml;charset=\"utf-8\"";
request.Accept = "text/xml";
request.Method = "POST";
Stream stream = request.GetRequestStream();
xmlDoc.Save( stream );
stream.Close();
using( HttpWebResponse response = (HttpWebResponse)request.GetResponse() )
{
//auswerten ...
}
Wie in HTTP-Statuscode nachzulesen ist der 500er ein Fehler des Servers, nicht von Dir. Kann aber von Dir verursacht werden.
Woran das liegt kann man entweder dem Fehlerfenster entnehmen, sofern die Details aktiv sind, oder man muss raten, sofern man keinen Zugriff auf die Server-Logs hat.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
ich habe leider keinen zugriff auf den Server und muss somit leider auf das Raten zurückgreifen ...
Ich habe nur festgestellt, dass in der Dokumentation das XML so aussehen sollte:
<soapenv:Envelope xmlns:Soapenv=http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<ab:StatusReturn>
<StatusInfo110>
<ID>39050</ID>
<STATUS></STATUS>
<UnixDateTime>1388876400</UnixDateTime>
</StatusInfo110>
</ab:StatusReturn>
</soapenv:Body>
</soapenv:Envelope>
Wenn ich aber mein XML in eine Datei schreiben lasse, sieht es so aus
<Envelope>
<Header />
<Body>
<StatusReturn>
<StatusInfo110>
<ID>3905</ID>
<STATUS>110</STATUS>
<UnixDateTime>1388876400</UnixDateTime>
</StatusInfo110>
</StatusReturn>
</Body>
</Envelope>
XML Grundlagen: Arbeiten mit XML-Namespaces
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
OK, das war auch schon der Fehler 😃. Jetzt bekomme ich auch einen 200 und den Inhalt!
Super!!! Danke dir, für die Hilfe
Hab ich jetzt ein Denkproblem? In .NET 2.0 kann man doch auch schon mittels Proxies auf Soap Webservices zugreifen.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |