| 

.NET C# Java Javascript Exception

1
Hallo,

ich habe mit Visual Studio einen Webservice eingebunden. Der Funktioniert super nur will ich jetzt auch die Antwort des Webservice in die Datenbank schreiben. Wie bekomme ich die XML Antwort?

WebService sc = new Webservice();
AntwortObjekt ant = sc.getAntwort();


Ich dachte da gibt es eine Funktion wie "getXML" oder sowas.

Vielen Dank schon mal
05.07.2011
mario_kaempfer 273 1 8
2 Antworten
1
Wenn Du, wie ich vermute, den Service eingebunden hast, in dem Du "Add Service Reference" (oder "Add Web Reference") angeklickt und die WSDL angegeben hast, dann hat Dir VS Code generiert, der das XML der Antwort parst und daraus ein .NET-Objekt erzeugt - in Deinem Beispiel wäre das das "AntwortObjekt ant". Da steht alles drin. Die XML-Darstellung der Antwort solltest Du also eigentlich gar nicht benötigen, es sei denn, Du hast irgendwas besonderes vor.

Update: Ok, Du hast etwas besonderes vor ;-) (Wobei ich Dir empfehlen würde, die Sinnhaftigkeit der Anforderung möglichst nochmal zu hinterfragen.) Du verwendest die "alte" (.NET 2.0) Unterstützung für Webservices, oft auch als ASP.NET Webservices bezeichnet. Bei dieser hat sich Microsoft viel Mühe gegeben, das ganze XML-/SOAP-Geraffel wegzukapseln und den Entwickler damit nicht zu belasten. Was ihnen so gut gelungen ist, dass Deine Anforderung nicht so einfach zu erfüllen ist. Ich hab das selbst auch noch nie gemacht, aber möglicherweise helfen Dir diese Links weiter:

How to capture SOAP envelopes when consuming a web service in ASP.NET
Capture XML Response

Es könnte sich auch lohnen, über einen anderen Lösungsansatz nachzudenken.

  • Wenn Dir .NET 3.0 oder neuer zur Verfügung steht, könntest Du versuchen, den Webservice mit WCF anzusprechen ("Servicereferenz hinzufügen" wäre dann der Menüpunkt im deutschen VS 2008, glaube ich). WCF kapselt das SOAP-Handling zwar auch komplett weg, bietet aber tendenziell mehr und handlichere Eingriffspunkte, um sich in die Verarbeitungskette einzuklinken.
  • Wenn es sich nur um einen und noch dazu recht einfachen Service handelt, dann ist es am Ende möglicherweise einfacher, die Kommunikation "zu Fuß" über die WebClient-Klasse zu erledigen. Dann hast Du das XML direkt in der Hand, mußt Dich aber dafür auch darum kümmern, es selbst zu erzeugen und zu verarbeiten - was aber im Einzelfall einfacher sein kann, als einen ASP.NET-Webserviceclient aufzubohren.
05.07.2011
Matthias Hlawatsch 13,2k 4 9
Naja ich benötige diese nicht, leider ist das eine Anforderung die XML Antwort anzuzeigen.
mario_kaempfer 05.07.2011
Wirklich im Programm anzeigen, oder einfach nur irgendwohin loggen? Letzteres läßt sich konfigurieren.
Falls Du tatsächlich im Programm-Code den XML-Text in die Hände bekommen mußt, wäre es wichtig zu wissen, ob Du den Service per WCF ("Add Service Reference") oder ASP.NET ("Add Web Reference") aufrufst.
Matthias Hlawatsch 05.07.2011
ich brauche den im Quellcode, ich glaube ich rufe das über "Add Web Reference" auf. Bei mir heißt das ding "Webverweis hinzufügen"
mario_kaempfer 05.07.2011
Ok - siehe das Update in meiner Antwort.
Matthias Hlawatsch 05.07.2011
0
Danke für die Antwort, ich habe aber leider keine Web.Config. Wie sage ich denn dem Webservice das er die SOAP Extensions benutzen soll????
05.07.2011
mario_kaempfer 273 1 8
SOAP-Extensions kann man server- und clientseitig benutzen. Am Server hat man eine web.config. Das Gegenstück am Client heißt app.config, ist aber prinzipiell genauso aufgebaut. Wenn Du noch keine app.config hast, dann leg Dir eine Datei mit diesem Namen im Wurzelverzeichnis Deines Executable-Projekts an und trag die SOAP-Extensions dort ein.
Matthias Hlawatsch 05.07.2011
Wo muss die denn da rein?


<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings"... >
<section name="App.Properties.Settings"... />
</sectionGroup>
</configSections>
<applicationSettings>
<App.Properties.Settings>
<setting name="NameWebservice" serializeAs="String">
<value>URL WebService</value>
</setting>
</App.Properties.Settings>
</applicationSettings>
<startup>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>
mario_kaempfer 05.07.2011
OK ich habe die jetzt iregendwie darein bekommen. Er ignoriert das nur. Kann es sein das das Trace in die App.Config vom Aufrufer eingetragen werden muss. Ich habe das alles in einer DLL gekapselt.
mario_kaempfer 05.07.2011
Wie ich geschrieben habe: die app.config muss ins Exe-Projekt. In einem DLL-Projekt wird sie ignoriert.
Matthias Hlawatsch 05.07.2011
gibt es da keine andere möglichkeit?
Er findet jetzt den Namespace aus meinem Assembly nicht. Muss die Trace Klasse auch in das Exe Projekt? Das wäre ja total doof....
mario_kaempfer 05.07.2011
Geht es um diese Stelle:
<soapExtensionTypes>
<add type="DeinNamespace.TraceExtension, DeineAssembly" />
</soapExtensionTypes>
? Es müßte eigentlich reichen, die Assembly mit der TraceExtension aus dem Exe-Projekt zu referenzieren und in der app.config den Typnamen und Assemblynamen korrekt anzugeben.
Matthias Hlawatsch 05.07.2011
Habe hier eine gute Möglichkeit gefunden das aus dem Programm zu erzeugen.

http://www.netframeworkdev.com/net-framework-networking-communication/programmatically-registering-a-soap-extension-45276.shtml
mario_kaempfer 05.07.2011

Stelle deine .net-Frage jetzt!