M.Kamran Asim Ответов: 3

WCF: exePath должен быть указан, если он не работает внутри автономного exe-файла


Дорогие все, у меня есть проблема с сервисом WCF.

Администрирование проекта WPF (exe) пытается прочитать конфигурационный файл одного из сервисов WCF (Read AppSettings).
Приложение работает правильно, успешно читает и записывает файл App.config в режиме отладки (как VS host Services автоматически (Service host environment)), но когда я развертываю службы на IIS, я сталкиваюсь с нижеприведенным исключением.

Вот подробное описание исключения


exePath должен быть указан, если он не работает внутри автономного exe-файла.
система типов.ArgumentException:
Источник:
Система.Конфигурация
Данные:
Трассировка стека: в системе.Конфигурация.Конфигурационный менеджер.OpenExeConfigurationImpl(ConfigurationFileMap fileMap, Boolean isMachine, ConfigurationUserLevel userLevel, String exePath, Boolean preLoad)
в Business.XXXService.Админсервис.ReadEmailConfiguration(GenericRequest`1 запрос) в E:\Source\MB сервисы\исходный код\исходный код\бизнес\NFS.Бизнес.COSService\ServicesImpl\AdminService.cs:строка 388


Как я понимаю, в режиме разработки существует файл aap.config для служб (проект библиотеки служб WCF), но при развертывании на IIS конфигурация считывается из Web.config
Поэтому я реализовал оба варианта.
Вот реализация чтения конфигурационного файла, но все еще сталкиваюсь с проблемой на развернутом сервисе.

Configuration configuration = null;

               if (HttpContext.Current != null)
                   configuration = WebConfigurationManager.OpenWebConfiguration("~");
               else
                   configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

               if (configuration == null)
               {
                   response.Status.Code = ReturnCode.DataNotFound.GetStringValue();
                   response.Status.Message = "Unable to read configuration";
                   return response;

               }


Я думаю, что нет необходимости исследовать в app/web.config, поэтому я не прикрепляю конфигурационный файл



заранее спасибо
Камрань

3 Ответов

Рейтинг:
9

M.Kamran Asim

Дорогие Все,

Вопрос Решен.

Вам нужно включить совместимость asp ниже шаги могут решить такую проблему.

набор AspnetCompatibilityEnabled правда в интернете.узел конфигурации средство servicemodel (если вы используете библиотеки службы WCF затем добавить AspnetCompatibilityEnabled в узел, средство servicemodel в АПУ.конфиг)

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
.
.
.
</system.serviceModel


Во вторых вам нужно добавить атрибут AspNetCompatibilityRequirements к совместимому сервису с asp.net

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class AdminService : IAdminService
    {
.
.


Рейтинг:
1

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

WCF и система.Пространство имен конфигурации[^- это может тебе помочь.


M.Kamran Asim

Спасибо, чувак!
Если вы видите вопрос, я уже реализую этот подход, но все равно выдаю, так как HttpContext.Current всегда равен нулю, если вы не включили AspnetCompatibality.
Так вот в какой момент сервис пытался прочитать второй вариант и потерпел неудачу.
У меня есть опубликованное решение, пожалуйста, пройдите,

Спасибо за Вашу поддержку.

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Я тоже видел это решение во время поиска, но подумал, что это может помочь вам лучше.

В любом случае, хорошая работа, хорошо сделано.

Рейтинг:
0

Patrik Rosquist

Привет,

Если вы не можете или не хотите включить совместимость asp, просто проверьте WebOperationContext.Current != null вместо HttpContext.Current.

Он находится в системе.Средство servicemodel.Веб.

С уважением,
Патрик