예제 #1
0
        public IMessage SyncProcessMessage(IMessage msg)
        {
            IMethodCallMessage mcall = msg as IMethodCallMessage;

            Trace.WriteLine("IceClientFormatterSink: ProcessMessage: " + mcall.MethodBase);

            try {
                Stream msgStream;

                FormatMessage(msg, out msgStream);

                // send downstream for processing
                TransportHeaders  reqHeaders = new TransportHeaders();
                ITransportHeaders respHeaders;
                Stream            respStream;
                _next.ProcessMessage(msg, reqHeaders, msgStream, out respHeaders, out respStream);

                // convert back into a response message
                IMessage result = (IMessage)IceChannelUtils.ProtocolReplyToMessage(respStream, msg);
                respStream.Close();

                return(result);
            } catch (Exception e) {
                return(new ReturnMessage(e, mcall));
            }
        }
예제 #2
0
        public void AsyncProcessResponse(IClientResponseChannelSinkStack sinkStack,
                                         object state,
                                         ITransportHeaders headers,
                                         Stream stream)
        {
            IMessage reqMessage   = (IMessage)state;
            IMessage replyMessage = (IMessage)IceChannelUtils.ProtocolReplyToMessage(stream, reqMessage);

            stream.Close();

            sinkStack.DispatchReplyMessage(replyMessage);
        }