using System.Diagnostics; using System.ServiceModel; using System.ServiceModel.Channels; using System.Text; using System.Xml; using System.Xml.Xsl; namespace Foo.Bar { public class SerializationTest : ISerializationTest { static SerializationTest() { #if DEBUG bool enableDebugging = true; #else bool enableDebugging = false; #endif xslt = new XslCompiledTransform(enableDebugging); settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; xslt.Load("foobar.xslt"); } public Message Transform(Message transformRequest) { using (XmlReader reader = transformRequest.GetReaderAtBodyContents()) { StringBuilder buf = new StringBuilder(); using (XmlWriter writer = XmlWriter.Create(buf, settings)) { MessageVersion version = OperationContext.Current.IncomingMessageVersion; xslt.Transform(reader, writer); Debug.WriteLine(buf); return Message.CreateMessage(version, "TransformResponse", new BodyWriter(buf)); } } } private sealed class BodyWriter : System.ServiceModel.Channels.BodyWriter { string body; public BodyWriter(StringBuilder body) : base(true) { this.body = body.ToString(); } protected override void OnWriteBodyContents(XmlDictionaryWriter writer) { writer.WriteRaw(body); } } private static XmlWriterSettings settings; private static XslCompiledTransform xslt; } }