public IncomingMessage SendRequest(OutgoingMessage requestMessage) { var httpRequest = (HttpWebRequest)WebRequest.Create(_serverUrl); httpRequest.Method = "POST"; httpRequest.MediaType = "application/soap+xml; charset=utf-8"; requestMessage.AddHeader(new ToHeader(_serverUrl), true); if (requestMessage.GetHeader <MessageIdHeader>() == null) { requestMessage.AddHeader(MessageIdHeader.CreateRandom(), false); } SerializeRequestBody(httpRequest, requestMessage); var response = (HttpWebResponse)httpRequest.GetResponse(); if (response.StatusCode == HttpStatusCode.OK) { var responseStream = response.GetResponseStream(); if (responseStream != null) { return(new IncomingMessage(XmlReader.Create(responseStream))); } throw new SOAPException("Missing response body."); } var exceptionMessage = GetExceptionMessage(response.StatusCode); throw new SOAPException(exceptionMessage); }
public OutgoingMessage Handle(IncomingMessage request) { var actionHeader = request.GetHeader <ActionHeader>(); var messageIdHeader = request.GetHeader <MessageIdHeader>(); var outgoingMessage = ProcessMessage(request, actionHeader); if (outgoingMessage == null) { return(null); } outgoingMessage.AddHeader(MessageIdHeader.CreateRandom(), false); if (messageIdHeader != null) { outgoingMessage.AddHeader(new RelatesToHeader(messageIdHeader.MessageId), false); } outgoingMessage.AddHeader(ToHeader.Anonymous, false); return(outgoingMessage); }
public void BeforeSerialize(SoapMessage message) //ObjectOut { if(onClientOrServer == OnClientOrServer.Unknown) onClientOrServer = OnClientOrServer.Client; if(System.Environment.OSVersion.Platform != PlatformID.WinCE) { //NOTE this only works if you handle StreamOut/In too //NOTE this only works on .NETfx //TimestampHeader timestampHeader = new TimestampHeader(300); //message.Headers.Add(timestampHeader); if(onClientOrServer == OnClientOrServer.Server) { ActionHeader actionHeader = new ActionHeader(message.Action + "Response"); //else check what the inAction is RelatesToHeader relatesToHeader = null; if(inMessageId != null) relatesToHeader = new RelatesToHeader(inMessageId); ToHeader toHeader = null; if(inReplyTo != null) toHeader = new ToHeader(inReplyTo); //TODO ReferenceProperties message.Headers.Add(actionHeader); if(relatesToHeader != null) message.Headers.Add(relatesToHeader); if(toHeader != null) message.Headers.Add(toHeader); } else { //if(EndPoint == EndPointType.Addressing) ActionHeader actionHeader = new ActionHeader(message.Action); FromHeader fromHeader = new FromHeader(null); MessageIdHeader messageIdHeader = new MessageIdHeader(null); ToHeader toHeader = new ToHeader(message.Url); //TODO Subscription would need a ReplyTo header for asynch web services //ReplyToHeader replyToHeader = new ReplyToHeader("http://tempuri.org/RespondToClientCall/"); ReplyToHeader replyToHeader = new ReplyToHeader(message.Url); //just respond normally? message.Headers.Add(replyToHeader); message.Headers.Add(actionHeader); message.Headers.Add(fromHeader); message.Headers.Add(messageIdHeader); message.Headers.Add(toHeader); } //else //routing //pathHeader pHeader = new pathHeader(message.Action, message.Url, null); //message.Headers.Add(pHeader); } return; }
public void BeforeSerialize(SoapMessage message) //ObjectOut { if(System.Environment.OSVersion.Platform != PlatformID.WinCE) { //NOTE this only works if you handle StreamOut/In too //NOTE this only works on .NETfx TimestampHeader timestampHeader = new TimestampHeader(300); message.Headers.Add(timestampHeader); //if(EndPoint == EndPointType.Addressing) ActionHeader actionHeader = new ActionHeader(message.Action); //FromHeader fromHeader = new FromHeader(null); ReplyToHeader replyToHeader = new ReplyToHeader(null); MessageIdHeader messageIdHeader = new MessageIdHeader(null); ToHeader toHeader = new ToHeader(message.Url); message.Headers.Add(actionHeader); //message.Headers.Add(fromHeader); message.Headers.Add(replyToHeader); message.Headers.Add(messageIdHeader); message.Headers.Add(toHeader); //else //routing //pathHeader pHeader = new pathHeader(message.Action, message.Url, null); //message.Headers.Add(pHeader); } return; }