Мы размещаем службу 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