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