Example #1
0
        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;
		}