public void ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, out ITransportHeaders responseHeaders, out Stream responseStream) { UnixConnection connection = null; try { if (requestHeaders == null) { requestHeaders = new TransportHeaders(); } requestHeaders["__RequestUri"] = ((IMethodMessage)msg).Uri; connection = UnixConnectionPool.GetConnection(this._path); UnixMessageIO.SendMessageStream(connection.Stream, requestStream, requestHeaders, connection.Buffer); connection.Stream.Flush(); if (UnixMessageIO.ReceiveMessageStatus(connection.Stream, connection.Buffer) != MessageStatus.MethodMessage) { throw new RemotingException("Unknown response message from server"); } responseStream = UnixMessageIO.ReceiveMessageStream(connection.Stream, out responseHeaders, connection.Buffer); } finally { if (connection != null) { connection.Release(); } } }
public void AsyncProcessRequest(IClientChannelSinkStack sinkStack, IMessage msg, ITransportHeaders headers, Stream requestStream) { UnixConnection connection = null; bool isOneWay = RemotingServices.IsOneWay(((IMethodMessage)msg).MethodBase); try { if (headers == null) { headers = new TransportHeaders(); } headers ["__RequestUri"] = ((IMethodMessage)msg).Uri; // Sends the stream using a connection from the pool // and creates a WorkItem that will wait for the // response of the server connection = UnixConnectionPool.GetConnection(_path); UnixMessageIO.SendMessageStream(connection.Stream, requestStream, headers, connection.Buffer); connection.Stream.Flush(); if (!isOneWay) { sinkStack.Push(this, connection); ThreadPool.QueueUserWorkItem(new WaitCallback(data => { try { ReadAsyncUnixMessage(data); } catch {} }), sinkStack); } else { connection.Release(); } } catch { if (connection != null) { connection.Release(); } if (!isOneWay) { throw; } } }
public void AsyncProcessRequest(IClientChannelSinkStack sinkStack, IMessage msg, ITransportHeaders headers, Stream requestStream) { UnixConnection connection = null; bool flag = RemotingServices.IsOneWay(((IMethodMessage)msg).MethodBase); try { if (headers == null) { headers = new TransportHeaders(); } headers["__RequestUri"] = ((IMethodMessage)msg).Uri; connection = UnixConnectionPool.GetConnection(this._path); UnixMessageIO.SendMessageStream(connection.Stream, requestStream, headers, connection.Buffer); connection.Stream.Flush(); if (flag) { connection.Release(); } else { sinkStack.Push(this, connection); ThreadPool.QueueUserWorkItem(new WaitCallback(this.ReadAsyncUnixMessage), sinkStack); } } catch { if (connection != null) { connection.Release(); } if (!flag) { throw; } } }