Поделиться через


BodyWriter Класс

Определение

Представляет модуль записи текста сообщения.

public ref class BodyWriter abstract
public abstract class BodyWriter
type BodyWriter = class
Public MustInherit Class BodyWriter
Наследование
BodyWriter
Производный

Примеры

В следующем примере показано, как создать класс, производный от класса BodyWriter. Данное переопределение принимает массив строк и записывает их в объект XmlDictionaryWriter.

using System;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Xml;

namespace UEBodyWriter
{
    class MyBodyWriter : BodyWriter
    {
        const string textTag = "text";
        string[] bodySegment;

        public MyBodyWriter(string[] strData) : base(true)
        {
            int length = strData.Length;

            this.bodySegment = new string[length];
            for (int i = 0; i < length; i++)
            {
                this.bodySegment[i] = strData[i];
            }
        }

        protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
        {
           writer.WriteStartElement(textTag);

           foreach (string str in bodySegment)
           {
               writer.WriteString(str);
           }

            writer.WriteEndElement();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            string[] strings = {"Hello", "world"};
            MyBodyWriter bw = new MyBodyWriter(strings);

            StringBuilder strBuilder = new StringBuilder(10);
            XmlWriter writer = XmlWriter.Create(strBuilder);
            XmlDictionaryWriter dictionaryWriter = XmlDictionaryWriter.CreateDictionaryWriter(writer);

            bw.WriteBodyContents(dictionaryWriter);
            dictionaryWriter.Flush();
        }
    }
}


Imports System.Text
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports System.Xml

Namespace UEBodyWriter
    Friend Class MyBodyWriter
        Inherits BodyWriter
        Private Const textTag As String = "text"
        Private bodySegment() As String

        Public Sub New(ByVal strData() As String)
            MyBase.New(True)
            Dim length = strData.Length

            Me.bodySegment = New String(length - 1){}
            For i = 0 To length - 1
                Me.bodySegment(i) = strData(i)
            Next i
        End Sub

        Protected Overrides Sub OnWriteBodyContents(ByVal writer As XmlDictionaryWriter)
           writer.WriteStartElement(textTag)

            For Each str As String In bodySegment
                writer.WriteString(str)
            Next str

            writer.WriteEndElement()
        End Sub
    End Class

    Module Module1
        Sub Main(ByVal args() As String)
            Dim strings() As String = {"Hello", "world"}
            Dim bw As New MyBodyWriter(strings)

            Dim strBuilder As New StringBuilder(10)
            Dim writer = XmlWriter.Create(strBuilder)
            Dim dictionaryWriter = XmlDictionaryWriter.CreateDictionaryWriter(writer)

            bw.WriteBodyContents(dictionaryWriter)
            dictionaryWriter.Flush()
        End Sub
    End Module
End Namespace

Комментарии

Сообщение состоит из заголовков и текста сообщения. Заголовки буферизуются, а текст сообщения является потоковым. Поскольку текст является потоковым, пользователь не может передать фактическое содержимое текста в сообщение. Вместо этого, пользователь должен передать класс, который может записать текст по запросу. Для этого можно передать класс, производный от класса BodyWriter, классу Message. Сообщение вызывает класс, производный от класса BodyWriter, когда требуется выполнить запись текста сообщения с использованием класса XmlWriter.

Конструкторы

BodyWriter(Boolean)

Инициализирует новый экземпляр класса BodyWriter, который явно указывает, следует ли использовать буферизацию.

Свойства

IsBuffered

Возвращает значение, указывающее на возможность вызова метода записи несколько раз.

Методы

BeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object)

Запускает запись содержимого текста сообщения для модуля записи с указанным модулем записи, обратным вызовом и состоянием.

CreateBufferedCopy(Int32)

Создает буферизованную копию текста сообщения.

EndWriteBodyContents(IAsyncResult)

Завершает запись содержимого текста сообщения.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
OnBeginWriteBodyContents(XmlDictionaryWriter, AsyncCallback, Object)

Создает событие, когда средство записи тела начинает запись содержимого тела с указанным модулем записи, обратным вызовом и состоянием.

OnCreateBufferedCopy(Int32)

Предоставляет точку расширения при записи содержимого текста сообщения.

OnEndWriteBodyContents(IAsyncResult)

Вызывает событие, когда средство записи тела завершает запись содержимого тела.

OnWriteBodyContents(XmlDictionaryWriter)

При реализации предоставляет точку расширения при записи содержимого тела сообщения.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
WriteBodyContents(XmlDictionaryWriter)

Записывает содержимое тела сообщения.

Применяется к