protected override void OnWriteStartBody(XmlDictionaryWriter writer)
        {
            if (_startBodyFragment != null || _fullBodyFragment != null)
            {
                WriteStartInnerMessageWithId(writer);
                return;
            }

            switch (_state)
            {
            case BodyState.Created:
            case BodyState.Encrypted:
                InnerMessage.WriteStartBody(writer);
                return;

            case BodyState.Signed:
            case BodyState.EncryptedThenSigned:
                XmlDictionaryReader reader = _fullBodyBuffer.GetReader(0);
                writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
                writer.WriteAttributes(reader, false);
                reader.Close();
                return;

            case BodyState.SignedThenEncrypted:
                writer.WriteStartElement(_bodyPrefix, XD.MessageDictionary.Body, Version.Envelope.DictionaryNamespace);
                if (_bodyAttributes != null)
                {
                    XmlAttributeHolder.WriteAttributes(_bodyAttributes, writer);
                }
                return;

            default:
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateBadStateException(nameof(OnWriteStartBody)));
            }
        }
 private void WriteStartInnerMessageWithId(XmlDictionaryWriter writer)
 {
     InnerMessage.WriteStartBody(writer);
     if (_bodyIdInserted)
     {
         _securityHeader.StandardsManager.IdManager.WriteIdAttribute(writer, BodyId);
     }
 }
        protected override void OnWriteStartBody(XmlDictionaryWriter writer)
        {
            if (_state == BodyState.Created)
            {
                InnerMessage.WriteStartBody(writer);
                return;
            }

            XmlDictionaryReader reader = CreateFullBodyReader();

            reader.MoveToContent();
            writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
            writer.WriteAttributes(reader, false);
            reader.Close();
        }