public SecurityVerifiedMessage(Message messageToProcess, ReceiveSecurityHeader securityHeader) : base(messageToProcess) { ReceivedSecurityHeader = securityHeader; if (securityHeader.RequireMessageProtection) { XmlDictionaryReader messageReader; BufferedMessage bufferedMessage = InnerMessage as BufferedMessage; if (bufferedMessage != null && Headers.ContainsOnlyBufferedMessageHeaders) { messageReader = bufferedMessage.GetMessageReader(); } else { _messageBuffer = new XmlBuffer(int.MaxValue); XmlDictionaryWriter writer = _messageBuffer.OpenSection(ReceivedSecurityHeader.ReaderQuotas); InnerMessage.WriteMessage(writer); _messageBuffer.CloseSection(); _messageBuffer.Close(); messageReader = _messageBuffer.GetReader(0); } MoveToSecurityHeader(messageReader, securityHeader.HeaderIndex, true); _cachedReaderAtSecurityHeader = messageReader; _state = BodyState.Buffered; } else { _envelopeAttributes = XmlAttributeHolder.emptyArray; _headerAttributes = XmlAttributeHolder.emptyArray; _bodyAttributes = XmlAttributeHolder.emptyArray; _canDelegateCreateBufferedCopyToInnerMessage = true; } }
public SecurityVerifiedMessage(Message messageToProcess, ReceiveSecurityHeader securityHeader) : base(messageToProcess) { ReceivedSecurityHeader = securityHeader; if (securityHeader.RequireMessageProtection) { XmlDictionaryReader messageReader; if (InnerMessage is BufferedMessage bufferedMessage && Headers.ContainsOnlyBufferedMessageHeaders) { messageReader = bufferedMessage.GetMessageReader(); } else { _messageBuffer = new XmlBuffer(int.MaxValue); XmlDictionaryWriter writer = _messageBuffer.OpenSection(ReceivedSecurityHeader.ReaderQuotas); InnerMessage.WriteMessage(writer); _messageBuffer.CloseSection(); _messageBuffer.Close(); messageReader = _messageBuffer.GetReader(0); } MoveToSecurityHeader(messageReader, securityHeader.HeaderIndex, true); _cachedReaderAtSecurityHeader = messageReader; _state = BodyState.Buffered; }