Imports Microsoft.VisualBasic Imports System Imports System.Messaging Imports System.Xml Imports System.Xml.Linq Imports System.IO Public Class XLinqMessageFormatter Implements IMessageFormatter #Region "Konstruktoren" Sub New() End Sub #End Region #Region "Interface-Methoden" ''' ''' Kann das Objekt gelesen werden ''' ''' ''' ''' Public Function CanRead(ByVal message As Message) As Boolean Implements IMessageFormatter.CanRead If message Is Nothing Then Throw New System.ArgumentNullException("message") End If If TypeOf message.Body Is XElement OrElse TypeOf message.Body Is XDocument Then Return True End If End Function ''' ''' Erstellt eine Kopie der aktuellen Formatter-Instanz ''' ''' ''' Eigentlich unnötig, da keine Properties vorhanden Public Function Clone() As Object Implements ICloneable.Clone Return New XLinqMessageFormatter End Function ''' ''' Liest den MessageQueue-Stream und erstellt daraus ein XDocument ''' ''' ''' ''' Public Function Read(ByVal message As Message) As Object Implements IMessageFormatter.Read If message Is Nothing Then Throw New System.ArgumentNullException("message") End If Dim sr As New StreamReader(message.BodyStream) Dim xr As XmlReader = XmlReader.Create(sr) Dim xd As XDocument = XDocument.Load(xr) Return xd End Function ''' ''' Erstellt aus dem XDocument den MessageQueue-Stream ''' ''' ''' ''' Public Sub Write(ByVal message As Message, ByVal obj As Object) Implements IMessageFormatter.Write If message Is Nothing Then Throw New System.ArgumentNullException("message") End If Dim xd As New XDocument If TypeOf message.Body Is XDocument Then xd = message.Body ElseIf TypeOf message.Body Is XElement Then xd = New XDocument(message.Body) End If Dim ms As New MemoryStream Dim sw As New StreamWriter(ms) xd.Save(sw) sw.Flush() message.BodyStream = ms message.BodyType = 0 End Sub #End Region End Class