public void WriteSizedMessage(Message message) { lock (write_lock) { ResetWriteBuffer(); buffer.WriteByte(SizedEnvelopeRecord); MemoryStream ms = new MemoryStream(); var session = writer_session ?? new MyXmlBinaryWriterSession(); writer_session = session; int writer_session_count = session.List.Count; var benc = Encoder as BinaryMessageEncoder; try { if (benc != null) { benc.CurrentWriterSession = session; } Encoder.WriteMessage(message, ms); } finally { if (benc != null) { benc.CurrentWriterSession = null; } } // dictionary if (EncodingRecord == Soap12EncodingBinaryWithDictionary) { MemoryStream msd = new MemoryStream(); BinaryWriter dw = new BinaryWriter(msd); for (int i = writer_session_count; i < session.List.Count; i++) { dw.Write(session.List [i].Value); } dw.Flush(); int length = (int)(msd.Position + ms.Position); var msda = msd.ToArray(); int sizeOfLength = writer.GetSizeOfLength(msda.Length); writer.WriteVariableInt(length + sizeOfLength); // dictionary array also involves the size of itself. WriteSizedChunk(msda, 0, msda.Length); } else { writer.WriteVariableInt((int)ms.Position); } // message body var arr = ms.GetBuffer(); writer.Write(arr, 0, (int)ms.Position); writer.Flush(); s.Write(buffer.GetBuffer(), 0, (int)buffer.Position); s.Flush(); } }
public void WriteSizedMessage(Message message) { ResetWriteBuffer(); if (EncodingRecord != 8) { throw new NotImplementedException(String.Format("Message encoding {0:X} is not implemented yet", EncodingRecord)); } buffer.WriteByte(SizedEnvelopeRecord); MemoryStream ms = new MemoryStream(); var session = writer_session ?? new MyXmlBinaryWriterSession(); writer_session = session; int writer_session_count = session.List.Count; var benc = Encoder as BinaryMessageEncoder; try { if (benc != null) { benc.CurrentWriterSession = session; } Encoder.WriteMessage(message, ms); } finally { benc.CurrentWriterSession = null; } // dictionary MemoryStream msd = new MemoryStream(); BinaryWriter dw = new BinaryWriter(msd); for (int i = writer_session_count; i < session.List.Count; i++) { dw.Write(session.List [i].Value); } dw.Flush(); int length = (int)(msd.Position + ms.Position); var msda = msd.ToArray(); int sizeOfLength = writer.GetSizeOfLength(msda.Length); writer.WriteVariableInt(length + sizeOfLength); // dictionary array also involves the size of itself. WriteSizedChunk(msda, 0, msda.Length); // message body var arr = ms.GetBuffer(); writer.Write(arr, 0, (int)ms.Position); writer.Flush(); s.Write(buffer.GetBuffer(), 0, (int)buffer.Position); s.Flush(); }
public void WriterAddsStringsToSession () { var ms = new MemoryStream (); var d = new MyXmlDictionary (); var s = new MyXmlBinaryWriterSession (); var w = XmlDictionaryWriter.CreateBinaryWriter (ms, d, s); w.WriteStartElement ("root1"); w.WriteEndElement (); Assert.AreEqual (0, d.List.Count, "#1"); Assert.AreEqual (0, s.List.Count, "#2"); w.WriteStartElement (d.Add ("root2"), XmlDictionaryString.Empty); w.WriteEndElement (); Assert.AreEqual (1, d.List.Count, "#3"); Assert.AreEqual (0, s.List.Count, "#4"); w.WriteStartElement (new XmlDictionary ().Add ("root3"), XmlDictionaryString.Empty); w.WriteEndElement (); Assert.AreEqual (1, d.List.Count, "#5"); Assert.AreEqual (1, s.List.Count, "#6"); }
public void WriterAddsStringsToSession() { var ms = new MemoryStream(); var d = new MyXmlDictionary(); var s = new MyXmlBinaryWriterSession(); var w = XmlDictionaryWriter.CreateBinaryWriter(ms, d, s); w.WriteStartElement("root1"); w.WriteEndElement(); Assert.AreEqual(0, d.List.Count, "#1"); Assert.AreEqual(0, s.List.Count, "#2"); w.WriteStartElement(d.Add("root2"), XmlDictionaryString.Empty); w.WriteEndElement(); Assert.AreEqual(1, d.List.Count, "#3"); Assert.AreEqual(0, s.List.Count, "#4"); w.WriteStartElement(new XmlDictionary().Add("root3"), XmlDictionaryString.Empty); w.WriteEndElement(); Assert.AreEqual(1, d.List.Count, "#5"); Assert.AreEqual(1, s.List.Count, "#6"); }
public void WriteSizedMessage (Message message) { lock (write_lock) { ResetWriteBuffer (); buffer.WriteByte (SizedEnvelopeRecord); MemoryStream ms = new MemoryStream (); var session = writer_session ?? new MyXmlBinaryWriterSession (); writer_session = session; int writer_session_count = session.List.Count; var benc = Encoder as BinaryMessageEncoder; try { if (benc != null) benc.CurrentWriterSession = session; Encoder.WriteMessage (message, ms); } finally { if (benc != null) benc.CurrentWriterSession = null; } // dictionary if (EncodingRecord == Soap12EncodingBinaryWithDictionary) { MemoryStream msd = new MemoryStream (); BinaryWriter dw = new BinaryWriter (msd); for (int i = writer_session_count; i < session.List.Count; i++) dw.Write (session.List [i].Value); dw.Flush (); int length = (int) (msd.Position + ms.Position); var msda = msd.ToArray (); int sizeOfLength = writer.GetSizeOfLength (msda.Length); writer.WriteVariableInt (length + sizeOfLength); // dictionary array also involves the size of itself. WriteSizedChunk (msda, 0, msda.Length); } else writer.WriteVariableInt ((int) ms.Position); // message body var arr = ms.GetBuffer (); writer.Write (arr, 0, (int) ms.Position); writer.Flush (); s.Write (buffer.GetBuffer (), 0, (int) buffer.Position); s.Flush (); } }