예제 #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);
        }
예제 #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);
        }
예제 #3
0
 /// <summary>
 /// Sets up the channel to spoil the messages (for fault tests)
 /// </summary>
 /// <param name="spoiler">Object to process the message.</param>
 protected void SetBreakingBehaviour(ISoapMessageMutator spoiler)
 {
     if (_client != null)
     {
         SetBreakingBehaviour(Client.Endpoint, spoiler);
     }
 }
예제 #4
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);
        }
예제 #5
0
        /// <summary>
        /// Sets up the channel to spoil the messages (for fault tests)
        /// </summary>
        /// <param name="spoiler">Object to process the message.</param>
        /// <param name="endpoint"></param>
        protected void SetBreakingBehaviour(ServiceEndpoint endpoint, ISoapMessageMutator spoiler)
        {
            Binding binding = endpoint.Binding;

            TestTool.HttpTransport.ControlledTextMessageBindingElement traceElement = (HttpTransport.ControlledTextMessageBindingElement)binding.CreateBindingElements()[0];

            if (spoiler != null)
            {
                traceElement.Controllers.Add(spoiler);
            }
            else
            {
                traceElement.Controllers.RemoveAll(c => c is ISoapMessageMutator);
            }
        }