示例#1
0
        public void ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, out ITransportHeaders responseHeaders, out Stream responseStream)
        {
            if (requestStream.Length > int.MaxValue)
            {
                throw new NotImplementedException("TcpEx Channel can only accept messages up to int.MaxValue in size.");                 // TODO: FixMe
            }
            Connection connection = PrepareRequest(msg, ref requestHeaders);

            Guid         msgGuid = Guid.NewGuid();
            IAsyncResult ar      = Manager.BeginReadMessage(msgGuid, connection, null, null);

            Message.Send(connection, msgGuid, requestHeaders, requestStream);

            ar.AsyncWaitHandle.WaitOne();
            Connection replyConnection;
            Message    reply = Manager.EndReadMessage(out replyConnection, ar);

            Debug.Assert(connection == replyConnection);
            responseHeaders = reply.Headers;
            responseStream  = reply.MessageBody;
        }
示例#2
0
        public void ReceiveMessage(IAsyncResult ar)
        {
            // Request next message...
            Manager.BeginReadMessage(ar.AsyncState, null, new AsyncCallback(ReceiveMessage), ar.AsyncState);

            Connection connection;
            Message    request = Manager.EndReadMessage(out connection, ar);

            request.Headers["__CustomErrorsEnabled"] = RemotingConfiguration.CustomErrorsEnabled(connection.IsLocalHost);

            IMessage          responseMsg;
            ITransportHeaders responseHeaders;
            Stream            responseStream;

            var serverProcessing = ProcessMessage(new ServerChannelSinkStack(), null, request.Headers, request.MessageBody, out responseMsg, out responseHeaders, out responseStream);

            if (serverProcessing != ServerProcessing.OneWay)
            {
                Message.Send(connection, request.Guid, responseHeaders, responseStream);
                responseStream.Close();
            }
        }