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(); }