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) |
Освобождает поток для вывода. |