Laden...

SOAP - C# mit Framework 1.1 oder max 2.0

Erstellt von the_weird vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.926 Views
T
the_weird Themenstarter:in
64 Beiträge seit 2005
vor 10 Jahren
SOAP - C# mit Framework 1.1 oder max 2.0

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

16.861 Beiträge seit 2008
vor 10 Jahren

.NET Version is ja prinzipiell egal.
Musst halt bei 1.0 / 2.0 alles mit HttpWebRequest und XmlDocument selbst in die Hand nehmen.

T
the_weird Themenstarter:in
64 Beiträge seit 2005
vor 10 Jahren

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

16.861 Beiträge seit 2008
vor 10 Jahren

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

T
the_weird Themenstarter:in
64 Beiträge seit 2005
vor 10 Jahren

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

16.861 Beiträge seit 2008
vor 10 Jahren

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.

T
the_weird Themenstarter:in
64 Beiträge seit 2005
vor 10 Jahren

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>

16.861 Beiträge seit 2008
vor 10 Jahren

XML Grundlagen: Arbeiten mit XML-Namespaces

T
the_weird Themenstarter:in
64 Beiträge seit 2005
vor 10 Jahren

OK, das war auch schon der Fehler 😃. Jetzt bekomme ich auch einen 200 und den Inhalt!

Super!!! Danke dir, für die Hilfe

2.298 Beiträge seit 2010
vor 10 Jahren

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 |