Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
WCF: XML anstatt Objekt senden
chanderegg
myCSharp.de - Member



Dabei seit:
Beiträge: 101
Herkunft: Solothurn CH

Themenstarter:

WCF: XML anstatt Objekt senden

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
MartinZa
myCSharp.de - Member



Dabei seit:
Beiträge: 51
Herkunft: Bavaria

beantworten | zitieren | melden

Hallo chanderegg,
Zitat
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!!!!).
Zitat
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
private Nachricht | Beiträge des Benutzers
chanderegg
myCSharp.de - Member



Dabei seit:
Beiträge: 101
Herkunft: Solothurn CH

Themenstarter:

beantworten | zitieren | melden

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)?
private Nachricht | Beiträge des Benutzers
MartinZa
myCSharp.de - Member



Dabei seit:
Beiträge: 51
Herkunft: Bavaria

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MartinZa am .
private Nachricht | Beiträge des Benutzers
chanderegg
myCSharp.de - Member



Dabei seit:
Beiträge: 101
Herkunft: Solothurn CH

Themenstarter:

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
MartinZa
myCSharp.de - Member



Dabei seit:
Beiträge: 51
Herkunft: Bavaria

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Gwar
myCSharp.de - Member



Dabei seit:
Beiträge: 46

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers