private void SerializeMessage(IMessage msg, out Stream requestStream, out ITransportHeaders requestHeaders, out SoapMessageFormatter soapMsgFormatter)
        {
            SoapMessage soapMsg;

            soapMsgFormatter = new SoapMessageFormatter();
            soapMsg          = soapMsgFormatter.BuildSoapMessageFromMethodCall(
                (IMethodCallMessage)msg, out requestHeaders);

            // Get the stream where the message will be serialized
            requestStream = _nextChannelSink.GetRequestStream(msg,
                                                              requestHeaders);

            if (requestStream == null)
            {
                requestStream = new MemoryStream();
            }

            // Serialize the message into the stream
            _soapCore.Serializer.Serialize(requestStream, soapMsg, null);

            if (requestStream is MemoryStream)
            {
                requestStream.Position = 0;
            }
        }
        public void AsyncProcessResponse(IServerResponseChannelSinkStack sinkStack, object state,
                                         IMessage msg, ITransportHeaders headers, Stream stream)

        {
            ITransportHeaders responseHeaders = new TransportHeaders();

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

            SoapMessageFormatter soapMsgFormatter = (SoapMessageFormatter)state;

            SoapMessage soapMessage = (SoapMessage)soapMsgFormatter.BuildSoapMessageFromMethodResponse((IMethodReturnMessage)msg, out responseHeaders);

            _soapCore.Serializer.Serialize(stream, soapMessage, null);

            if (stream is MemoryStream)
            {
                stream.Position = 0;
            }
            sinkStack.AsyncProcessResponse(msg, responseHeaders, stream);
        }
        public void AsyncProcessResponse(IClientResponseChannelSinkStack sinkStack,
                                         object state,
                                         ITransportHeaders headers,
                                         Stream stream)
        {
            CallData             data             = (CallData)state;
            SoapMessageFormatter soapMsgFormatter = data.Formatter;
            IMessage             replyMessage     = (IMessage)DeserializeMessage(
                stream, headers, (IMethodCallMessage)data.Msg,
                soapMsgFormatter);

            sinkStack.DispatchReplyMessage(replyMessage);
        }
		public ServerProcessing ProcessMessage (IServerChannelSinkStack sinkStack,
							IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream,
							out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
		{
			responseMsg = null;
			responseHeaders = null;
			responseStream = null;

			ServerProcessing sp;
			SoapMessageFormatter soapMsgFormatter = new SoapMessageFormatter();
			sinkStack.Push(this, soapMsgFormatter);

			try {
				string url = (string)requestHeaders[CommonTransportKeys.RequestUri];
				string uri;
				_receiver.Parse(url, out uri);
				if(uri == null)	uri = url;
				Type serverType = RemotingServices.GetServerTypeForUri(uri);
				if (serverType == null) throw new RemotingException ("No receiver for uri " + uri);
			
				SoapFormatter fm = _soapCore.GetSafeDeserializer ();
				SoapMessage soapMessage = soapMsgFormatter.CreateSoapMessage (true);
				fm.TopObject = soapMessage;
				requestStream.Position = 0;
				fm.Deserialize(requestStream);

				requestMsg = soapMsgFormatter.BuildMethodCallFromSoapMessage(soapMessage, uri);
				
				sp = next_sink.ProcessMessage(sinkStack, requestMsg, requestHeaders, null, out responseMsg, out responseHeaders, out responseStream);
				
				if(sp == ServerProcessing.Complete) {
					if(responseMsg != null && responseStream == null) {

						object rtnMessageObject = soapMsgFormatter.BuildSoapMessageFromMethodResponse((IMethodReturnMessage) responseMsg, out responseHeaders);
						responseStream = new MemoryStream();
						_soapCore.Serializer.Serialize(responseStream, rtnMessageObject);
					}
				}
			}
			catch(Exception e)
			{
				responseMsg = (IMethodReturnMessage)new ReturnMessage(e, (IMethodCallMessage)requestMsg);
				object rtnMessageObject = soapMsgFormatter.BuildSoapMessageFromMethodResponse((IMethodReturnMessage) responseMsg, out responseHeaders);
				responseStream = new MemoryStream();
				_soapCore.Serializer.Serialize(responseStream, rtnMessageObject);
				sp = ServerProcessing.Complete;
			}

			if (sp == ServerProcessing.Complete)
				sinkStack.Pop(this);

			return sp;
			
		}
 public CallData(IMessage msg, SoapMessageFormatter formatter)
 {
     Msg       = msg;
     Formatter = formatter;
 }
        private IMessage DeserializeMessage(Stream responseStream, ITransportHeaders responseHeaders, IMethodCallMessage mcm, SoapMessageFormatter soapMsgFormatter)
        {
            SoapFormatter fm         = _soapCore.GetSafeDeserializer();
            SoapMessage   rtnMessage = soapMsgFormatter.CreateSoapMessage(false);

            fm.TopObject = rtnMessage;
            object objReturn = fm.Deserialize(responseStream);

            if (objReturn is SoapFault)
            {
                return(soapMsgFormatter.FormatFault((SoapFault)objReturn, mcm));
            }
            else
            {
                return(soapMsgFormatter.FormatResponse((ISoapMessage)objReturn, mcm));
            }
        }
        public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack,
                                               IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream,
                                               out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
        {
            // Check whether the request was already processed by another
            // formatter sink and pass the request to the next sink if so.
            if (requestMsg != null)
            {
                return(next_sink.ProcessMessage(sinkStack,
                                                requestMsg,
                                                requestHeaders,
                                                requestStream,
                                                out responseMsg,
                                                out responseHeaders,
                                                out responseStream));
            }

            // Check whether the request is suitable for this formatter
            // and pass the request to the next sink if not.
            // Note that a null content-type is handled as suitable,
            // otherwise no other sink will be able to handle the request.
            string contentType = requestHeaders["Content-Type"] as string;

            if (contentType == null || !contentType.StartsWith("text/xml") || requestHeaders["SOAPAction"] == null)
            {
                return(next_sink.ProcessMessage(sinkStack,
                                                requestMsg,
                                                requestHeaders,
                                                requestStream,
                                                out responseMsg,
                                                out responseHeaders,
                                                out responseStream));
            }

            responseMsg     = null;
            responseHeaders = null;
            responseStream  = null;

            ServerProcessing     sp;
            SoapMessageFormatter soapMsgFormatter = new SoapMessageFormatter();

            sinkStack.Push(this, soapMsgFormatter);

            try {
                string url = (string)requestHeaders[CommonTransportKeys.RequestUri];
                string uri;
                _receiver.Parse(url, out uri);
                if (uri == null)
                {
                    uri = url;
                }
                Type serverType = RemotingServices.GetServerTypeForUri(uri);
                if (serverType == null)
                {
                    throw new RemotingException("No receiver for uri " + uri);
                }

                SoapFormatter fm          = _soapCore.GetSafeDeserializer();
                SoapMessage   soapMessage = soapMsgFormatter.CreateSoapMessage(true);
                fm.TopObject = soapMessage;
                fm.Deserialize(requestStream);

                requestMsg = soapMsgFormatter.BuildMethodCallFromSoapMessage(soapMessage, uri);

                sp = next_sink.ProcessMessage(sinkStack, requestMsg, requestHeaders, null, out responseMsg, out responseHeaders, out responseStream);

                if (sp == ServerProcessing.Complete)
                {
                    if (responseMsg != null && responseStream == null)
                    {
                        object rtnMessageObject = soapMsgFormatter.BuildSoapMessageFromMethodResponse((IMethodReturnMessage)responseMsg, out responseHeaders);
                        responseStream = new MemoryStream();
                        _soapCore.Serializer.Serialize(responseStream, rtnMessageObject);
                        responseStream.Position = 0;
                    }
                }
            }
            catch (Exception e)
            {
                responseMsg = (IMethodReturnMessage) new ReturnMessage(e, (IMethodCallMessage)requestMsg);
                object rtnMessageObject = soapMsgFormatter.BuildSoapMessageFromMethodResponse((IMethodReturnMessage)responseMsg, out responseHeaders);
                responseStream = new MemoryStream();
                _soapCore.Serializer.Serialize(responseStream, rtnMessageObject);
                responseStream.Position = 0;
                sp = ServerProcessing.Complete;
            }

            if (sp == ServerProcessing.Complete)
            {
                sinkStack.Pop(this);
            }

            return(sp);
        }
Exemplo n.º 8
0
		public ServerProcessing ProcessMessage (IServerChannelSinkStack sinkStack,
							IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream,
							out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
		{
			// Check whether the request was already processed by another
			// formatter sink and pass the request to the next sink if so.
			if (requestMsg != null)
				return next_sink.ProcessMessage (sinkStack,
								 requestMsg,
								 requestHeaders,
								 requestStream,
								 out responseMsg,
								 out responseHeaders,
								 out responseStream);

			// Check whether the request is suitable for this formatter
			// and pass the request to the next sink if not.
			// Note that a null content-type is handled as suitable,
			// otherwise no other sink will be able to handle the request.
			string contentType = requestHeaders["Content-Type"] as string;
			if (contentType == null || !contentType.StartsWith ("text/xml") || requestHeaders["SOAPAction"] == null) {
				return next_sink.ProcessMessage (sinkStack,
					requestMsg,
					requestHeaders,
					requestStream,
					out responseMsg,
					out responseHeaders,
					out responseStream);
			}

			responseMsg = null;
			responseHeaders = null;
			responseStream = null;

			ServerProcessing sp;
			SoapMessageFormatter soapMsgFormatter = new SoapMessageFormatter();
			sinkStack.Push(this, soapMsgFormatter);

			try {
				string url = (string)requestHeaders[CommonTransportKeys.RequestUri];
				string uri;
				_receiver.Parse(url, out uri);
				if(uri == null)	uri = url;
				Type serverType = RemotingServices.GetServerTypeForUri(uri);
				if (serverType == null) throw new RemotingException ("No receiver for uri " + uri);
			
				SoapFormatter fm = _soapCore.GetSafeDeserializer ();
				SoapMessage soapMessage = soapMsgFormatter.CreateSoapMessage (true);
				fm.TopObject = soapMessage;
				fm.Deserialize(requestStream);

				requestMsg = soapMsgFormatter.BuildMethodCallFromSoapMessage(soapMessage, uri);
				
				sp = next_sink.ProcessMessage(sinkStack, requestMsg, requestHeaders, null, out responseMsg, out responseHeaders, out responseStream);
				
				if(sp == ServerProcessing.Complete) {
					if(responseMsg != null && responseStream == null) {

						object rtnMessageObject = soapMsgFormatter.BuildSoapMessageFromMethodResponse((IMethodReturnMessage) responseMsg, out responseHeaders);
						responseStream = new MemoryStream();
						_soapCore.Serializer.Serialize(responseStream, rtnMessageObject);
						responseStream.Position = 0;
					}
				}
			}
			catch(Exception e)
			{
				responseMsg = (IMethodReturnMessage)new ReturnMessage(e, (IMethodCallMessage)requestMsg);
				object rtnMessageObject = soapMsgFormatter.BuildSoapMessageFromMethodResponse((IMethodReturnMessage) responseMsg, out responseHeaders);
				responseStream = new MemoryStream();
				_soapCore.Serializer.Serialize(responseStream, rtnMessageObject);
				responseStream.Position = 0;
				sp = ServerProcessing.Complete;
			}

			if (sp == ServerProcessing.Complete)
				sinkStack.Pop(this);

			return sp;
			
		}
Exemplo n.º 9
0
			public CallData (IMessage msg, SoapMessageFormatter formatter)
			{
				Msg = msg;
				Formatter = formatter;
			}
Exemplo n.º 10
0
		private IMessage DeserializeMessage(Stream responseStream, ITransportHeaders responseHeaders,IMethodCallMessage mcm, SoapMessageFormatter soapMsgFormatter) 
		{
			SoapFormatter fm = _soapCore.GetSafeDeserializer ();
			SoapMessage rtnMessage = soapMsgFormatter.CreateSoapMessage (false);
			fm.TopObject = rtnMessage;
			object objReturn = fm.Deserialize(responseStream);

			if (objReturn is SoapFault)
				return soapMsgFormatter.FormatFault ((SoapFault) objReturn, mcm);
			else
				return soapMsgFormatter.FormatResponse ((ISoapMessage) objReturn, mcm);
		}
Exemplo n.º 11
0
		private void SerializeMessage(IMessage msg, out Stream requestStream, out ITransportHeaders requestHeaders, out SoapMessageFormatter soapMsgFormatter) {
			SoapMessage soapMsg;
			soapMsgFormatter = new SoapMessageFormatter();
			soapMsg = soapMsgFormatter.BuildSoapMessageFromMethodCall (
				(IMethodCallMessage) msg, out requestHeaders);

			// Get the stream where the message will be serialized
			requestStream = _nextChannelSink.GetRequestStream (msg,
				requestHeaders);

			if (requestStream == null)
				requestStream = new MemoryStream();

			// Serialize the message into the stream
			_soapCore.Serializer.Serialize(requestStream, soapMsg, null);

			if (requestStream is MemoryStream)
				requestStream.Position = 0;
		}