2009-05-27 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Wed, 27 May 2009 07:38:08 +0000 (07:38 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Wed, 27 May 2009 07:38:08 +0000 (07:38 -0000)
* BinaryMessageEncoder.cs : the serializer somehow leaves binary
  xml open, so close the writer as well as open elements.
* TcpDuplexSessionChannel.cs : clear write buffer on each operation.
  Do not output EndRecord and SizedMessage at a time.

svn path=/trunk/mcs/; revision=134820

mcs/class/System.ServiceModel/System.ServiceModel.Channels/BinaryMessageEncoder.cs
mcs/class/System.ServiceModel/System.ServiceModel.Channels/ChangeLog
mcs/class/System.ServiceModel/System.ServiceModel.Channels/TcpDuplexSessionChannel.cs

index a5bbc686a3c457ea4a810d864ff3117de678b1c5..ead00ce96b6d3048017f5518ee6d0e61f2755802 100644 (file)
@@ -254,7 +254,8 @@ namespace System.ServiceModel.Channels
                {
                        VerifyMessageVersion (message);
 
-                       message.WriteMessage (XmlDictionaryWriter.CreateBinaryWriter (stream, soap_dictionary, CurrentWriterSession));
+                       using (var xw = XmlDictionaryWriter.CreateBinaryWriter (stream, soap_dictionary, CurrentWriterSession))
+                               message.WriteMessage (xw);
                }
 
                [MonoTODO]
index 70d3578d89179a2d34d3332d1cd788bc1ef50713..d514018dbb112f49e4acfaf829c83724dca73f8f 100755 (executable)
@@ -1,3 +1,10 @@
+2009-05-27  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * BinaryMessageEncoder.cs : the serializer somehow leaves binary
+         xml open, so close the writer as well as open elements.
+       * TcpDuplexSessionChannel.cs : clear write buffer on each operation.
+         Do not output EndRecord and SizedMessage at a time.
+
 2009-05-26  Atsushi Enomoto  <atsushi@ximian.com>
 
        * TcpDuplexSessionChannel.cs : there was a miscalculation on the
index 45456912fb05bb9ee9ce2d1fec4d55abff428ad2..c8ca43ebe1114b63665cea5eb3f3889cc635f5e9 100644 (file)
@@ -334,9 +334,8 @@ namespace System.ServiceModel.Channels
                {
                        this.mode = mode;
                        this.s = s;
-                       this.buffer = new MemoryStream ();
                        reader = new MyBinaryReader (s);
-                       writer = new MyBinaryWriter (buffer);
+                       ResetWriteBuffer ();
 
                        EncodingRecord = 8; // FIXME: it should depend on mode.
                }
@@ -352,6 +351,12 @@ namespace System.ServiceModel.Channels
 
                public MessageEncoder Encoder { get; set; }
 
+               void ResetWriteBuffer ()
+               {
+                       this.buffer = new MemoryStream ();
+                       writer = new MyBinaryWriter (buffer);
+               }
+
                public byte [] ReadSizedChunk ()
                {
                        int length = reader.ReadVariableInt ();
@@ -373,7 +378,8 @@ namespace System.ServiceModel.Channels
 
                public void ProcessPreambleInitiator ()
                {
-                       buffer.Position = 0;
+                       ResetWriteBuffer ();
+
                        buffer.WriteByte (VersionRecord);
                        buffer.WriteByte (1);
                        buffer.WriteByte (0);
@@ -387,6 +393,7 @@ namespace System.ServiceModel.Channels
                        buffer.Flush ();
 
                        s.Write (buffer.GetBuffer (), 0, (int) buffer.Position);
+                       s.Flush ();
 
                        int b = s.ReadByte ();
                        switch (b) {
@@ -478,7 +485,7 @@ namespace System.ServiceModel.Channels
 
                public void WriteSizedMessage (Message message)
                {
-                       buffer.Position = 0;
+                       ResetWriteBuffer ();
 
                        // FIXME: implement full [MC-NMF] protocol.
 
@@ -515,10 +522,11 @@ namespace System.ServiceModel.Channels
                        var arr = ms.GetBuffer ();
                        writer.Write (arr, 0, (int) ms.Position);
 
-                       writer.Write (EndRecord);
                        writer.Flush ();
 
                        s.Write (buffer.GetBuffer (), 0, (int) buffer.Position);
+
+                       s.WriteByte (EndRecord);
                }
 
                public void ProcessEndRecordRecipient ()