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


Совместимость функций частичного уровня доверия

Windows Communication Foundation (WCF) поддерживает ограниченный набор функциональности при выполнении в частично доверенной среде. Дополнительные сведения о различных функциях, поддерживаемых при работе с частичным доверием, которые разработаны на базе определенного набора сценариев, см. в разделе Поддерживаемые сценарии развертывания.

Минимальные требования к разрешениям

WCF поддерживает подмножество функций в приложениях, выполняемых в рамках одного из следующих наборов разрешений со стандартными именами:

  • Разрешения среднего уровня доверия;

  • Набор разрешений зоны Интернета.

Попытка использовать WCF в частично доверенных приложениях с более строгими разрешениями может привести к возникновению исключений безопасности во время выполнения.

Контракты

При выполнении в частичном доверии контракты зависят от следующих ограничений:

  • Класс службы, реализующий интерфейс [ServiceContract], должен иметь тип public и содержать конструктор типа public. Если он определяет методы [OperationContract], они должны иметь тип public. Если вместо этого он реализует интерфейс [ServiceContract], эти методы реализации могут быть явно заданы или иметь тип private при условии, что интерфейс [ServiceContract] имеет тип public;

  • При использовании атрибута [ServiceKnownType] указанный метод должен иметь тип public;

  • Классы [MessageContract] и их члены могут иметь тип public. Если класс [MessageContract] определен в сборке приложения, он может иметь тип internal и его члены будут также internal.

Привязки, предоставляемые системой

Типы BasicHttpBinding и WebHttpBinding полностью поддерживаются в среде с частичным доверием. Тип WSHttpBinding поддерживается только для режима безопасности транспорта.

Привязки, использующие транспорты, отличные от HTTP, такие как NetTcpBinding, NetNamedPipeBinding и NetMsmqBinding, не поддерживаются при выполнении в среде с частичным доверием.

Пользовательские привязки

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

Транспорты

Допускается использование только элементов привязок транспортов HttpTransportBindingElement и HttpsTransportBindingElement.

Кодировщики

Допускается использование следующих кодировщиков:

Кодировщики механизма оптимизации передачи сообщений (MTOM) не поддерживаются.

Безопасность

Частично доверенные приложения для обеспечения безопасности своего взаимодействия могут использовать функции безопасности транспортного уровня WCF. Безопасность уровня сообщений не поддерживается. Настройка привязки на использование безопасности уровня сообщений вызовет исключение в среде выполнения.

Неподдерживаемые привязки

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

Сериализация

Оба типа DataContractSerializer и XmlSerializer поддерживаются в среде с частичным доверием. При этом использование DataContractSerializer зависит от следующих условий.

  • Все сериализуемые типы [DataContract] должны иметь тип public.

  • Все сериализуемые поля и свойства [DataMember] в типе [DataContract] должны быть открытыми и доступными для чтения и записи. Сериализация и десериализация полей только для чтения не поддерживается при выполнении WCF в частично доверенном приложении.

  • Модель программирования [Serializable]/ISerializable не поддерживается в среде с частичным доверием.

  • Известные типы должны быть заданы в коде или конфигурации уровня компьютера (файл machine.config). По соображениям безопасности известные типы нельзя задавать в конфигурации уровня приложения.

  • Типы, которые реализуют IObjectReference, в среде с частичным доверием вызывают исключение.

Дополнительные сведения о безопасности при использовании DataContractSerializer в частично доверенном приложении см. в разделе «Сериализация» статьи Рекомендации по частичному уровню доверию.

Типы коллекций

Некоторые типы коллекций реализуют и IEnumerable, и IEnumerable. Примеры содержат типы, которые реализуют ICollection. Такие типы позволяют создать открытую (public) реализацию метода GetEnumerator() и явную реализацию метода GetEnumerator(). В данном случае DataContractSerializer вызывает открытую (public) реализацию метода GetEnumerator(), а не явную реализацию метода GetEnumerator(). Если все реализации метода GetEnumerator() являются явными и нет ни одной открытой (public), сериализатор DataContractSerializer вызовет метод IEnumerable.GetEnumerator().

Для типов коллекций при выполнении WCF в среде с частичным доверием, если ни одна из реализаций метода GetEnumerator() не является открытой (public) или явной реализацией интерфейса, возникает исключение безопасности.

NetDataContractSerializer

При работе с частичным доверием многие типы коллекций .NET Framework не поддерживаются NetDataContractSerializer, например List, ArrayList, Dictionary и Hashtable. У этих типов задан атрибут [Serializable], который не поддерживается при работе с частичным доверием, о чем написано выше в разделе «Сериализация». Сериализатор DataContractSerializer обрабатывает коллекции определенным образом, тем самым существует возможность обхода данного ограничения, а у сериализатора NetDataContractSerializer такого механизма обхода нет.

Тип DateTimeOffset не поддерживается сериализатором NetDataContractSerializer при работе с частичным доверием.

Суррогат не может использоваться в NetDataContractSerializer (с помощью механизма SurrogateSelector) при работе с частичным доверием. Обратите внимание, что данное ограничение относится к использованию суррогата, а не к его сериализации.

Включение выполнения общих поведений

Поведения служб и конечных точек, не помеченные атрибутом AllowPartiallyTrustedCallersAttribute (APTCA), которые добавлены в раздел <commonBehaviors> файла конфигурации, не выполняются, когда приложение выполняется в среде с частичным доверием, и исключение в этом случае не возникает. Чтобы принудительно запустить общие поведения, необходимо выполнить одно из следующих условий:

  • Пометить общее поведение атрибутом AllowPartiallyTrustedCallersAttribute, чтобы оно могло выполняться при развертывании в приложении с частичным доверием. Обратите внимание, что на компьютере может быть установлен соответствующий раздел реестра, чтобы на нем не могли выполняться сборки, помеченные атрибутом APTCA. .

  • Проверить, что при развертывании приложения в качестве приложения с полным доверием, которое не может изменяться пользователям, параметры управления доступом для кода разрешают выполнение приложения в среде с частичным доверием. Если это так, поведение не выполняется и исключение не создается. Это можно проверить, обратившись к параметру levelfinal с помощью средства Code Access Security Policy Tool (Caspol.exe).

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

Конфигурация

За одним исключением, частично доверенный код может загружать разделы конфигурации WCF только из локального файла app.config. Для загрузки разделов конфигурации WCF, которые ссылаются на разделы WCF в файле machine.config или корневом файле web.config, требуется разрешение ConfigurationPermission(Unrestricted). Без данного разрешения ссылки на разделы конфигурации WCF (поведения, привязки), которые находятся не в локальном файле конфигурации, приводят к возникновению исключения при загрузке конфигурации.

Одно из известных исключений — конфигурация типа для сериализации, как описано в разделе «Сериализация» данной статьи.

Bb412186.Important(ru-ru,VS.100).gif Примечание
Расширения конфигурации поддерживаются только при запуске с полным уровнем доверия.

Диагностика

Ведение журнала событий

При выполнении в частичном уровне доверии поддерживается ограниченное ведение журнала событий. Только сбои активации служб, а также ошибки трассировки и ведения журналов записываются в журнал событий. Максимальное число событий, которые записываются процессом, равно 5, что позволяет предотвратить запись чрезмерного количества сообщений в журнал событий.

Ведение журнала сообщений

Ведение журнала сообщений не работает при выполнении WCF в среде с частичным доверием. Если для частичного доверия включено ведение журнала сообщений, сбой активации службы не произойдет, однако сообщения записываться не будут.

Трассировка

При выполнении в среде с частичным доверием доступна ограниченная функциональность трассировки. В элементе <listeners> файла конфигурации можно добавлять только тип TextWriterTraceListener и новый тип EventSchemaTraceListener. Использование обычного типа XmlWriterTraceListener может привести к неполным или неверным записям.

Поддерживаются следующие источники трассировки:

Следующие источники трассировки не поддерживаются:

Не должны быть заданы следующие члены перечисления TraceOptions:

При использовании трассировки в среде с частичным доверием, убедитесь, что приложение обладает достаточными правами для хранения выходных данных прослушивателя трассировки. Например, при использовании TextWriterTraceListener для записи выходных данных трассировки в текстовый файл, убедитесь, что приложение имеет необходимое разрешение FileIOPermission, которое требуется для добавления записей в файл трассировки.

Bb412186.note(ru-ru,VS.100).gifПримечание
Во избежание переполнения файлов трассировки дублирующимися ошибками, WCF отключает трассировку ресурсов и действий после первого сбоя безопасности. Существует одна трассировка исключения для каждой неудачной попытки доступа к ресурсам, которая создается при первой попытке доступа к ресурсам или при первой попытке выполнения действия.

Узел службы WCF

Узел службы WCF не поддерживает частичное доверие. Если требуется использовать службу WCF в частичном доверии, шаблон проекта библиотеки служб WCF в Visual Studio не используется для построения службы. Вместо этого создайте новый веб-сайт в Visual Studio путем выбора шаблона веб-сайта службы WCF, который может разместить службу на веб-сервере с поддержкой частичного доверия WCF.

Другие ограничения

WCF обычно ограничивается вопросами безопасности, установленными ведущим приложением. Например, если WCF размещается в приложении обозревателя XAML (XBAP), к нему применяются ограничения XBAP, как описано в разделе Безопасность частичного доверия Windows Presentation Foundation.

При выполнении indifo2 в среде с частичным доверием не включаются следующие дополнительные функции:

  • Инструментарий управления Windows (WMI);

  • Ведение журнала событий не в полном объеме (см. обсуждение в разделе Диагностика);

  • Счетчики производительности.

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

Отсутствующие функции

Лучший способ обнаружить недоступный фрагмент информации или действия при выполнении в среде с частичным доверием — попытка обращения к ресурсу или выполнение действия внутри блока try с последующим перехватом (catch) сбоя. Во избежание переполнения файлов трассировки дублирующимися ошибками, WCF отключает трассировку ресурсов и действий после первого сбоя безопасности. Существует одна трассировка исключения для каждой неудачной попытки доступа к ресурсам, которая создается при первой попытке доступа к ресурсам или при первой попытке выполнения действия.

См. также

Справочник

HttpTransportBindingElement
HttpsTransportBindingElement
TextMessageEncodingBindingElement
WebMessageEncodingBindingElement

Основные понятия

Поддерживаемые сценарии развертывания
Рекомендации по частичному уровню доверию