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