Введение в расширяемость
Модель приложений Windows Communication Foundation (WCF) предусматривает удовлетворение большей части связанных с обменом данных потребностей любого распределенного приложения. Однако всегда существуют сценарии, которые модель приложений по умолчанию и предоставленные системой реализации не поддерживают. Модель расширяемости WCF предназначена для поддержки пользовательских сценариев и позволяет изменять поведение системы на всех уровнях, вплоть до замены модели приложений целиком. В этом разделе кратко рассматриваются различные области расширения и даются ссылки на дополнительные сведения о каждой из них.
Области расширения
Можно расширять следующее.
Среду выполнения приложения. При этом расширяются диспетчеризация и обработка сообщений для приложения. Сюда входит также расширение системы безопасности, системы метаданных, системы сериализации, а также привязок и элементов привязки, соединяющих приложение с системой базовых каналов.
Канал и среду выполнения канала. При этом расширяется система, функционирующая на уровне сообщения, и обеспечивается поддержка протоколов, транспорта и кодирования.
Среду выполнения узла. При этом расширяется связь домена приложения размещения с каналом и средой выполнения приложения.
Расширение среды выполнения приложения
В приложениях WCF существует различие между сообщениями, предназначенными для соответствующего канала, и сообщениями, предназначенными для самого приложения. Сообщения канала поддерживают некоторую связанную с каналами функциональность, такую как установление защищенного взаимодействия или установление безопасного сеанса. Эти сообщения недоступны среде выполнения приложения; они обрабатываются до задействования уровня приложения.
Сообщения приложения содержат данные, предназначенные для операции службы или клиента, созданной разработчиком или его заказчиком. Эти сообщения доступны системе расширения уровня приложения в виде сообщений или в виде объектов, в зависимости от конкретных потребностей.
Все сообщения проходят через систему каналов; только сообщения приложения передаются из системы каналов в приложение. Для создания новой функциональности уровня канала необходимо расширить систему каналов. Для создания новой функциональности уровня приложения необходимо расширить среду выполнения службы или клиента (диспетчеры и фабрики каналов соответственно). Дополнительные сведения расширении среды выполнения приложения см. в разделе Расширение ServiceHost и уровень модели службы.
Расширение системы безопасности
Для построения пользовательских механизмов безопасности, таких как маркеры и учетные данные, необходимо расширить систему безопасности. Дополнительные сведения см. в разделе Расширение системы безопасности.
Расширение системы метаданных
Чтобы предоставлять метаданные способом, отличным от предусмотренного по умолчанию, необходимо расширить систему метаданных. Дополнительные сведения см. в разделе Расширение системы метаданных.
Расширение системы сериализации
Для построения пользовательских кодировщиков, создания суррогатов данных или выполнения какой-либо иной обработки, подразумевающей настройку передаваемых данных, необходимо расширить систему сериализации. Дополнительные сведения см. в разделе Расширение кодировщиков и сериализаторов.
Расширение привязок
Для связывания каналов транспорта или протокола с уровнем приложения необходимо расширить систему привязок. Дополнительные сведения см. в разделе Расширение привязок.
Расширение системы каналов
О том, как создавать каналы с поддержкой пользовательского транспорта или пользовательской функциональности протокола, см. в разделе Расширение уровня каналов.
Расширение системы размещения службы
Для изменения модели приложений в масштабе всей службы необходимо расширить класс System.ServiceModel.ServiceHostBase. Дополнительные сведения см. в разделе Расширение ServiceHost и уровень модели службы.
Для изменения связи между доменом приложения размещения и узлом службы необходимо расширить класс System.ServiceModel.Activation.ServiceHostFactory. Дополнительные сведения см. в разделе Расширение размещения с использованием ServiceHostFactory.