Пример #1
0
        public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack,
                                               IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream,
                                               out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
        {
            sinkStack.Push(this, null);
            ServerProcessing res;

            try
            {
                string url = (string)requestHeaders["__RequestUri"];
                string uri;
                receiver.Parse(url, out uri);
                if (uri == null)
                {
                    uri = url;
                }

                MethodCallHeaderHandler mhh = new MethodCallHeaderHandler(uri);
                requestMsg = (IMessage)_binaryCore.Deserializer.Deserialize(requestStream, new HeaderHandler(mhh.HandleHeaders));

                res = next_sink.ProcessMessage(sinkStack, requestMsg, requestHeaders, null, out responseMsg, out responseHeaders, out responseStream);
            }
            catch (Exception ex)
            {
                responseMsg     = new ReturnMessage(ex, (IMethodCallMessage)requestMsg);
                res             = ServerProcessing.Complete;
                responseHeaders = null;
                responseStream  = null;
            }

            if (res == ServerProcessing.Complete)
            {
                for (int n = 0; n < 3; n++)
                {
                    responseStream  = null;
                    responseHeaders = new TransportHeaders();

                    if (sinkStack != null)
                    {
                        responseStream = sinkStack.GetResponseStream(responseMsg, responseHeaders);
                    }
                    if (responseStream == null)
                    {
                        responseStream = new MemoryStream();
                    }

                    try {
                        _binaryCore.Serializer.Serialize(responseStream, responseMsg);
                        break;
                    } catch (Exception ex) {
                        if (n == 2)
                        {
                            throw ex;
                        }
                        else
                        {
                            responseMsg = new ReturnMessage(ex, (IMethodCallMessage)requestMsg);
                        }
                    }
                }

                if (responseStream is MemoryStream)
                {
                    responseStream.Position = 0;
                }


                sinkStack.Pop(this);
            }
            return(res);
        }
        public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
        {
            ServerProcessing serverProcessing;
            string           str;

            sinkStack.Push(this, null);
            try
            {
                string item = (string)requestHeaders["__RequestUri"];
                this.receiver.Parse(item, out str);
                if (str == null)
                {
                    str = item;
                }
                MethodCallHeaderHandler methodCallHeaderHandler = new MethodCallHeaderHandler(str);
                requestMsg       = (IMessage)this._binaryCore.Deserializer.Deserialize(requestStream, new HeaderHandler(methodCallHeaderHandler.HandleHeaders));
                serverProcessing = this.next_sink.ProcessMessage(sinkStack, requestMsg, requestHeaders, null, out responseMsg, out responseHeaders, out responseStream);
            }
            catch (Exception exception)
            {
                responseMsg      = new ReturnMessage(exception, (IMethodCallMessage)requestMsg);
                serverProcessing = ServerProcessing.Complete;
                responseHeaders  = null;
                responseStream   = null;
            }
            if (serverProcessing == ServerProcessing.Complete)
            {
                for (int i = 0; i < 3; i++)
                {
                    responseStream  = null;
                    responseHeaders = new TransportHeaders();
                    if (sinkStack != null)
                    {
                        responseStream = sinkStack.GetResponseStream(responseMsg, responseHeaders);
                    }
                    if (responseStream == null)
                    {
                        responseStream = new MemoryStream();
                    }
                    try
                    {
                        this._binaryCore.Serializer.Serialize(responseStream, responseMsg);
                        break;
                    }
                    catch (Exception exception2)
                    {
                        Exception exception1 = exception2;
                        if (i == 2)
                        {
                            throw exception1;
                        }
                        responseMsg = new ReturnMessage(exception1, (IMethodCallMessage)requestMsg);
                    }
                }
                if (responseStream is MemoryStream)
                {
                    responseStream.Position = (long)0;
                }
                sinkStack.Pop(this);
            }
            return(serverProcessing);
        }