Совместимость возможностей частичного доверия

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

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

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] должны быть открытыми и доступными для чтения и записи. Сериализация и десериализация readonly полей не поддерживается при запуске WCF в частично доверенном приложении.

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

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

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

Дополнительные сведения о безопасности при использовании Partial Trust Best Practices в частично доверенном приложении см. в разделе "Сериализация" статьи DataContractSerializer .

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

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

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

NetDataContractSerializer

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

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

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

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

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

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

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

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

Настройка

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

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

Внимание

Расширения конфигурации поддерживаются только при запуске с полным уровнем доверия.

Диагностика

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

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

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

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

Трассировка

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

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

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

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

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

Примечание.

Чтобы избежать наводнения файлов трассировки с повторяющимися ошибками, 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 отключает трассировку ресурса или действия после первого сбоя безопасности. Существует одна трассировка исключения для каждой неудачной попытки доступа к ресурсам, которая создается при первой попытке доступа к ресурсам или при первой попытке выполнения действия.

См. также