WCF, размещенный в службе Windows, получая исключения безопасности, даже если он работает в режиме полного доверия - PullRequest
3 голосов
/ 12 июля 2011

Мы размещаем службу WCF (.NET 4.0) в службе Windows. Он работает довольно хорошо на большинстве машин, но на некоторых машинах выдает следующее исключение: «Ошибка: произошла ошибка при создании обработчика раздела конфигурации для system.serviceModel / bindings: эта сборка не допускает частично доверенных вызывающих программ». (Полная трассировка стека находится внизу этого поста)

Похоже, что это исключение несколько ожидается в средах с частичным доверием, но, насколько нам известно, мы (или должны) работать с полным доверием:

  • Все установлено на локальном диске C: \ 1006 *
  • Служба Windows работает под учетной записью администратора
  • Не установлены политики ограничения программного обеспечения
  • Мы ничего не сделали для явного запуска при среднем доверии

И получается, что когда мы удаляем раздел связывания из app.config (и выполняем настройку в коде), тогда все работает нормально. Это просто чтение того раздела конфигурации, который вызывает проблему.

Вопросы:

  • Так что может быть причиной этого исключения безопасности?
  • Как мы можем узнать, действительно ли мы бежим под полным доверием?
  • Какие параметры компьютера или параметры конфигурации нам нужно изменить, чтобы избежать этого исключения безопасности?

Любая помощь приветствуется

Вот трассировка стека:

Connect.Host.Connect.InitializeServiceHost(:0) Connect.Host.Connect.InitializeServiceHost(:0) [(null)] - Error: An error occurred creating the configuration section handler for system.serviceModel/bindings: That assembly does not allow partially trusted callers. (C:\Connect\MyApp\Host\Connect.Host.exe.Config line 54), stacktrace:    at System.Configuration.BaseConfigurationRecord.EvaluateOne(String[] keys, SectionInput input, Boolean isTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult)
   at System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult, Boolean getLkg, Boolean getRuntimeObject, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSection(String configKey)
   at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName)
   at System.Configuration.ConfigurationManager.GetSection(String sectionName)
   at System.ServiceModel.Activation.AspNetEnvironment.UnsafeGetSectionFromConfigurationManager(String sectionPath)
   at System.ServiceModel.Activation.AspNetEnvironment.UnsafeGetConfigurationSection(String sectionPath)
   at System.ServiceModel.Configuration.ConfigurationHelpers.UnsafeGetAssociatedSection(ContextInformation evalContext, String sectionPath)
   at System.ServiceModel.Description.ConfigLoader.LookupChannel(ContextInformation configurationContext, String configurationName, ContractDescription contract, EndpointAddress address, Boolean wildcard, Boolean useChannelElementKind, ServiceEndpoint& serviceEndpoint)
   at System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address)
   at System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress)
   at System.ServiceModel.EndpointTrait`1.CreateSimplexFactory()
   at System.ServiceModel.ClientBase`1.CreateChannelFactoryRef(EndpointTrait`1 endpointTrait)
   at System.ServiceModel.ClientBase`1.InitializeChannelFactoryRef()
   at System.ServiceModel.ClientBase`1..ctor()
   at Connect.BL.EndpointManager.RegisterEndpoint(Int32 endpointId)
   at Connect.Host.Connect.InitializeServiceHost() for endpoint 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...