IStreamProvider Интерфейс

Определение

Представляет интерфейс, который может реализовываться классами, предоставляющими потоки.

public interface class IStreamProvider
public interface IStreamProvider
type IStreamProvider = interface
Public Interface IStreamProvider

Комментарии

При записи исходящего сообщения, содержащего текст, представляющий поток, направленный в модуль записи XML, Message использует в реализации OnWriteBodyContents(XmlDictionaryWriter) последовательность вызовов, подобную следующей:

  • Запись необходимых данных, предшествующих потоку (например, открывающий тег XML).

  • запись потока;

  • Запись данных, следующих за потоком (например, закрывающий тег XML).

Этот подход хорошо работает с кодировками, подобными текстовой кодировке XML. Однако, существуют кодировки, которые не размещают наборы сведений (например, открывающие и закрывающие теги элементов XML) вместе с данными, содержащимися внутри элементов. Например, при кодировании MTOM сообщение разделяется на несколько частей. Одна часть содержит набор сведений XML, который может содержать ссылки на другие части для действительного содержимого элемента. Поскольку набор сведений XML, как правило, небольшой в сравнении с потоковым содержимым, имеет смысл его буферизировать, сохранять, а затем записывать содержимое в виде потока. Это означает, что к моменту записи закрывающего тега элемента поток еще не должен быть сохранен.

Для этого используется интерфейс IStreamProvider . Этот интерфейс содержит метод GetStream() , который возвращает поток, подлежащий записи. Ниже описан правильный способ сохранения потокового тела сообщения в OnWriteBodyContents(XmlDictionaryWriter) .

  • Запись всех необходимых данных, предшествующих потоку (например, открывающий тег XML).

  • Вызов перегрузки WriteValue для XmlDictionaryWriter , принимающего IStreamProvider, с реализацией IStreamProvider , возвращающей подлежащий записи поток.

  • Запись данных, следующих за потоком (например, закрывающий тег XML).

Используя этот подход, средство записи XML может выбирать, когда вызывать GetStream() и сохранять потоковые данные. Например, модули записи текстовых и двоичных данных XML вызывают его немедленно и сохраняют потоковое содержимое между открывающим и закрывающим тегами. Средство записи MTOM может вызвать GetStream() позже, когда будет готово к записи соответствующей части сообщения.

Методы

GetStream()

Получает поток.

ReleaseStream(Stream)

Освобождает поток для вывода.

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