Example #1
0
        /// <summary>
        /// Processes message
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        private byte[] ProcessMessage(Message message)
        {
            MemoryStream originalStream = new MemoryStream();

            // todo: why text encoder?
            _textEncoder.WriteMessage(message, originalStream);

            byte[] messageBytes = new byte[originalStream.Length];
            Array.Copy(originalStream.GetBuffer(), messageBytes, originalStream.Length);

            ISoapMessageMutator messageController = null;

            foreach (IChannelController controller in _bindingElement.Controllers)
            {
                if (controller is ISoapMessageMutator)
                {
                    messageController = (ISoapMessageMutator)controller;
                    break;
                }
            }

            if (messageController != null)
            {
                messageBytes = messageController.ProcessMessage(messageBytes);
            }

            return(messageBytes);
        }
Example #2
0
        byte[] CreateRequest(Message message)
        {
            ArraySegment <byte> messageBuffer = EncodeMessage(message);

            byte[] messageBytes = messageBuffer.Array;

            ISoapMessageMutator messageController = null;

            foreach (IChannelController controller in _bindingElement.Contollers)
            {
                if (controller is ISoapMessageMutator)
                {
                    messageController = (ISoapMessageMutator)controller;
                    break;
                }
            }

            if (messageController != null)
            {
                messageBytes = messageController.ProcessMessage(messageBytes);
            }

            byte[] httpHeaders = HttpHelper.CreateHttpHeaders(messageBytes.Length,
                                                              _to.Uri.AbsolutePath,
                                                              _to.Uri.Host);
            byte[] bytes = new byte[httpHeaders.Length + messageBytes.Length];

            Array.Copy(httpHeaders, bytes, httpHeaders.Length);

            Array.Copy(messageBytes, 0, bytes, httpHeaders.Length, messageBytes.Length);

            return(bytes);
        }
Example #3
0
        byte[] CreateRequest(Message message, out int bodyOffset)
        {
            // Encode message using _encoder
            ArraySegment <byte> messageBuffer = EncodeMessage(message);

            // Copy byte in order not to use Buffer
            byte[] messageBytes;
            messageBytes = new byte[messageBuffer.Count];
            Array.Copy(messageBuffer.Array, messageBytes, messageBuffer.Count);

            // Modify message if necessary
            ISoapMessageMutator messageController = null;

            foreach (IChannelController controller in _bindingElement.Contollers)
            {
                if (controller is ISoapMessageMutator)
                {
                    messageController = (ISoapMessageMutator)controller;
                    break;
                }
            }

            if (messageController != null)
            {
                messageBytes = messageController.ProcessMessage(messageBytes);
            }

            // xml directive to add
            string xmlDirective = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";

            // create headers
            byte[] httpHeaders = HttpHelper.CreateHttpHeaders(messageBytes.Length + xmlDirective.Length,
                                                              _to.Uri.PathAndQuery,
                                                              _to.Uri.Host);

            //whole message with headers
            byte[] bytes = new byte[httpHeaders.Length + messageBytes.Length + xmlDirective.Length];

            Array.Copy(httpHeaders, bytes, httpHeaders.Length);

            Array.Copy(Encoding.UTF8.GetBytes(xmlDirective), 0, bytes, httpHeaders.Length, xmlDirective.Length);

            Array.Copy(messageBytes, 0, bytes, httpHeaders.Length + xmlDirective.Length, messageBytes.Length);

            // body offset - for logger
            bodyOffset = httpHeaders.Length;

            return(bytes);
        }