2009-07-01 9 views
1

Ich möchte eine XML-Datei an meinen WCF-Dienst senden, wie kann ich es senden? Gibt es eine Möglichkeit mit Datenverträgen oder Nachrichtenverträgen? Bitte helfen.Wie sende ich eine XML-Datei über WCF DataContracts/MessageContracts?

+0

@Praveen: Wie sind Sie auf dieses Problem zu tun? Wenn Sie immer noch ein Problem haben, können Sie etwas über die Art von XML-Datei sagen, die Sie senden möchten? –

Antwort

3

Sie können etwas tun:

var doc = new XmlDocument(); 
doc.LoadXml(xmlContent); 
var message = Message.CreateMessage(MessageVersion.Soap11, "urn:someRequest", new XmlNodeReader(doc)); 

var factory = new ChannelFactory<IRequestChannel>("serviceHttpSoap11Endpoint"); 
var channel = factory.CreateChannel(); 

var response = channel.Request(message); 

channel.Close(); 

Also, zuerst die XML-Datei im XmlDocument-Objekt laden, dann passen Sie die obige Probe um sie zu senden.

Ich schrieb einen Beitrag über das vor einer Weile: http://www.pvle.be/2009/02/send-xmldocument-using-windows-communication-foundation/

2

Der DataContract definiert Ihre C# -Darstellung der XML, die über die Leitung geht. Sie wollen nicht auf das rohe XML schauen - vertrauen Sie mir ..... :-)

Also im Grunde benötigen Sie eine C# -Klasse, die Ihr DataContract ist, um zu beschreiben, wie Ihr XML aussieht. Auf dem Client und dem Server arbeiten Sie mit den C# -Klassen - nicht mit dem Roh-XML. Wenn Ihr DataContract auf das XML-Format ausgerichtet ist, können Sie das Roh-XML in eine Klasseninstanz Ihrer DataContract-Klasse deserialisieren.

Alternativ können Sie auch einfach ein Zeichenfolgenfeld zu Ihrem DataContract hinzufügen und Ihre Roh-XML-Datei dort einpacken und senden.

Die letzte Alternative, die Sie haben, ist die grundlegende, untypisierte Message Art für den WCF Vertrag - in diesem Fall müssen Sie mit Roh-XML sowohl auf der Client-und der Server-Seite beschäftigen - überhaupt nicht schön, aber wenn Sie wirklich wollen - es liegt an dir.

Sehen Sie die MSDN documentation on raw messages und überprüfen Sie Kurt Claeys blog post darauf.

Marc

2

Während es am besten marc_s' Beratung und hielt mit High-Level-Datenverträgen zu folgen, ist es gelegentlich notwendig beliebige XML zu senden. Um dies zu tun, können Sie einen XmlElement-Parameter zu Ihrem OperationContract hinzufügen.

Um dies zu tun, müssen Sie den XmlSerializer anstelle des Data Contract Serializers verwenden. Sie müssen das [XmlSerializerFormat] -Attribut für Ihren Dienstvertrag verwenden.

Verwandte Themen