+2006-01-09 Robert Jordan <robertj@gmx.net>
+
+ * TcpServerChannel.cs (ProcessMessages): Flush the stream only when
+ necessary (TcpServerTransportSink.InternalProcessMessage does it anyway),
+ otherwise pending OneWay & async messages are lost.
+ * TcpMessageIO.cs (SendMessageStream): Mark OneWay messages as such.
+ Fixes MS.NET interoperability.
+ * TcpClientTransportSink.cs (AsyncProcessRequest):
+ Use the new TcpMessageIO.SendMessageStream overload to mark OneWay
+ requests. Fixes bug #80406.
+
2007-01-08 Lluis Sanchez Gual <lluis@novell.com>
* TcpChannel.cs, TcpServerChannel.cs: Moved StartListening call to
// response of the server
connection = TcpConnectionPool.GetConnection (_host, _port);
- TcpMessageIO.SendMessageStream (connection.Stream, requestStream, headers, connection.Buffer);
+ TcpMessageIO.SendMessageStream (connection.Stream, requestStream, headers, connection.Buffer, isOneWay);
connection.Stream.Flush ();
if (!isOneWay)
}
public static void SendMessageStream (Stream networkStream, Stream data, ITransportHeaders requestHeaders, byte[] buffer)
+ {
+ SendMessageStream (networkStream, data, requestHeaders, buffer, false);
+ }
+
+ public static void SendMessageStream (Stream networkStream, Stream data, ITransportHeaders requestHeaders, byte[] buffer, bool isOneWay)
{
if (buffer == null) buffer = new byte[DefaultStreamBufferSize];
byte[] dotnetHeader = _msgHeaders[(int) MessageStatus.MethodMessage];
networkStream.Write(dotnetHeader, 0, dotnetHeader.Length);
- // Writes header tag (0x0000 if request stream, 0x0002 if response stream)
- if(requestHeaders[CommonTransportKeys.RequestUri]!=null) buffer [0] = (byte) 0;
- else buffer[0] = (byte) 2;
+ // Writes the header tag
+ // 0x0000 - request stream
+ // 0x0001 - OneWay request stream
+ // 0x0002 - response stream
+ if(requestHeaders[CommonTransportKeys.RequestUri]!=null) {
+ buffer [0] = isOneWay ? (byte) 1 : (byte) 0;
+ }
+ else {
+ buffer[0] = (byte) 2;
+ }
buffer [1] = (byte) 0 ;
// Writes ID