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); }