Laden...

WCF: XML anstatt Objekt senden

Erstellt von chanderegg vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.325 Views
C
chanderegg Themenstarter:in
101 Beiträge seit 2008
vor 13 Jahren
WCF: XML anstatt Objekt senden

Hallo zusammen

Ich muss eine bestehende Schnittstelle für einen Kunden um einen WCF Service erweitern.
Die Schnittstelle liest Daten aus und sendet diese als xml via http oder filewriter (je nach config) an einen biztalk server. nun möchte der Kunde, dass dies auch via wcf geht.

Ich habe vom Kunden seinen generierten Service erhalten. Dieser enthällt jedoch Klassen, von welchen ich dann Objekte senden kann (Objekt-orientiert halt). Da ich aber bereits ein xml Dokument habe und mich vor dem Aufwand scheue, dies zu entschlüsseln, in die Objekte einzufüllen und so zu senden, möchte ich direkt dem wcf Service mein xml senden. (wird ja zum Senden sowieso ein xml)

Nun meine Frage an euch: Wie kann ich einem WCF Service direkt ein xml schicken, welches die Struktur der Objekte enthält?

Falls dies nicht möglich ist, möchte ich euch fragen, ob es besser ist das xml aufzuschlüsseln oder ob ich besser dem Kunden sage, er soll den Service anpassen, so dass ich das xml als String senden kann?

Vielen Dank für eure Hilfe
chanderegg

M
51 Beiträge seit 2010
vor 13 Jahren

Hallo chanderegg,

Nun meine Frage an euch: Wie kann ich einem WCF Service direkt ein xml schicken, welches die Struktur der Objekte enthält?

Wenn du dein XML genau so formatierst wie es der WCF-Dienst erwartet, dann kannst du auch das XML direkt hinsenden. Dazu musst du dir die Dienstbeschreibung des WCF-Dienstes ansehen.

Ich denke jedoch, dass diese Variante aufwendiger sein wird, da du deine gesamte XML-Struktur an den Dienst anpassen musst (Fehleranfälligkeit!!!!).

Falls dies nicht möglich ist, möchte ich euch fragen, ob es besser ist das xml aufzuschlüsseln oder ob ich besser dem Kunden sage, er soll den Service anpassen, so dass ich das xml als String senden kann?

Warum kannst du die generierten Proxy-Objekte nicht benutzen? Ich denke dieser Weg ist der einfachste, schnellste und am wenigsten Fehleranfälligste... Arbeitest du mit .NET?

Gruß

Martin

C
chanderegg Themenstarter:in
101 Beiträge seit 2008
vor 13 Jahren

Hallo Martin

Ja ich arbeite mit .Net.
Der Kunde konnte bis jetzt in der Schnittstelle definieren, welche Daten ausgelesen werden sollen (mittles xml File) und wie das zu sendende xml auszusehen hat (mittels xslt File).
Ich dachte mir, wenn ich wieder ein xml senden kann, so kann ich diese Konfigurationsmöglichkeit erhalten.
Meinst du mit Dienstbeschreibung das .wsdl File (wird auch im xml Format angezeigt)?

M
51 Beiträge seit 2010
vor 13 Jahren

ja genau, das meine ich.

du kannst damit dein XML formatieren (Daten + SOAP Envelope + HTTP Header). Dann kannst das ganze direkt an einen WCF Dienst senden, wenn dieser dafür konfiguriert ist.

Nachtrag:
Wenn dein Kunde bereits die Logiken zum Auslesen deines XML - Files hat, ist es evtl. auch sinnvol ihm das ganze XML direkt zu senden (wie du richtig angemerkt hast als string) und ihm das Parsen überlassen - wäre denk ich auch ok.

Gruß Martin

C
chanderegg Themenstarter:in
101 Beiträge seit 2008
vor 13 Jahren

Ok

Nun stellt sich aber wieder die Frage, wie ich das xml an den Service sende.

ich habe versucht es dem Channel mit zu geben oder einer Request Klasse. Beides geht nicht. Soll ich den Service mit einem Http Target ansteuern oder wie geht das?

M
51 Beiträge seit 2010
vor 13 Jahren

Rudimentär gesehen müsste das mit einem HTTP - Request funktionieren! Hab ich zumindest schon öfter verwendet, um Schnittstellen zu testen.

Schau dir den Link mal an: http://msdn.microsoft.com/en-us/magazine/cc301587.aspx

G
46 Beiträge seit 2010
vor 13 Jahren

Hallo,

nun kenne ich natürlich die Schnittstelle nicht. Davon ausgehend, dass Du eine objektorientierte, xml-unabhängige Schnittstelle hast, solltest Du mMn das XML aufschlüsseln. Der andere Ansatz verletzt Kapselungsprinzipien (Du möchtest XML direkt bearbeiten, weil Du "weißt", dass WCF so arbeitet - aber was, wenn sich in Zukunft etwas ändert? Und sei es nur die Dokumentenstruktur...). Außerdem erzwingt der andere Ansatz eine unnötige Schnittstellenänderung, die dann auch vom FileWriter und dem HTTP-Handler unterstützt werden müsste. Abgesehen davon würde die Schnittstelle dann ja auch wissen, wie eine ihrer Implementierungen arbeitet und nur deswegen eine Methode anbieten. Auch das ist unsauber.

Daher würde ich - unter genannten Voraussetzungen - das Parsen des XML Dokuments bevorzugen - auch, wenn es mehr Arbeit ist.

Grüße