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