web.config наследование / слияние / определение объема приложений, которые не работают в IIS. Служба WCF / Workflow в подпапке - PullRequest
1 голос
/ 19 января 2012

В настоящее время я тестирую следующую структуру в IIS для своих служб AppFabric Workflow и WCF:

/WebApp/ <-- IIS Application here
/WebApp/bin/ <-- binaries here
/WebApp/web.config <-- empty.
/WebApp/WorkflowApp/V1.0/web.config  <-- Settings are stored here
/WebApp/WorkflowApp/V1.0/MyWorkflow.xamlx
/WebApp/WorkflowApp/V1.0/Default.aspx <-- just for testing
/WebApp/WcfService/V1.0/web.config  <-- Settings are stored here
/WebApp/WcfService/V1.0/MyService.svc
/WebApp/WcfService/V1.0/Default.aspx <-- just for testing

Мой web.config содержит следующий раздел:

<appSettings>
  <add key="TestSetting" value="Test Setting Value" />
</appSettings>

Из одного из моих действий кода в моей службе рабочего процесса и из моей службы WCF я хочу прочитать элемент из "appSettings", используя следующий код:

var config = ConfigurationManager.AppSettings["TestSetting"];

Это всегда возвращает ноль. Я также попробовал WebConfigurationManager.AppSettings ["TestSetting"], но это также возвращает ноль. Похоже, что иерархия web.config не работает для appSettings.

Просто для тестирования я добавил Default.aspx со следующим содержимым, чтобы проверить, доступен ли этот appSetting с веб-страницы ASP.NET и работает ли он!

<html>
    <body>
        <h2>
            TestWebApp
        </h2>
        <%= ConfigurationManager.AppSettings["TestSetting"] %>
    </body>
</html>

Кажется, что web.config в подпапке вообще не обрабатывается. Почему определение конфигурации не работает для рабочих процессов AppFabric / WCF? И что я могу сделать, чтобы это работало?

Если я помещу службу рабочего процесса / WCF в корень моего веб-приложения в IIS, раздел appSettings будет доступен, как и ожидалось. Только когда я помещаю свою службу документооборота в подкаталог, разделы конфигурации недоступны.

Обновление:

Я изменил вопрос, чтобы обобщить его для служб WCF и Workflow, поскольку он затрагивает оба случая. Причина, по которой я пытаюсь это сделать, заключается в уменьшении количества приложений IIS и пулов приложений.

В соответствии с Руководством по архитектуре Windows Server AppFabric :

Аналогично планированию пула приложений, мы рекомендуем логически группировать несколько служб в веб-приложение, где это имеет смысл. AppFabric предназначен для обработки сотен веб-приложений. Однако для обеспечения оптимальной производительности и управляемости цель должна состоять в том, чтобы количество веб-приложений было как можно меньше.

Исходя из этого текста, я полагаю, что наличие нескольких служб WCF / Workflow в подпапках веб-приложений должно работать.

1 Ответ

2 голосов
/ 19 января 2012

Я считаю, что проблема в том, что ваш рабочий процесс выполняется не в потоке ASP.NET, а в его собственном потоке в пуле потоков. В результате он не заботится о правилах определения области ASP.NET, а использует стандартный конфигурационный файл AppDomain.

...