我目前正在 IIS 中为我的 AppFabric 工作流服务和 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"];
这总是返回 null。我也尝试了 WebConfigurationManager.AppSettings["TestSetting"],但这也返回 null。似乎 web.config 层次结构不适用于 appSettings。
只是为了测试,我添加了一个包含以下内容的 Default.aspx,以查看这个 appSetting 是否可以从 ASP.NET 网页访问,并且可以正常工作!
<html>
<body>
<h2>
TestWebApp
</h2>
<%= ConfigurationManager.AppSettings["TestSetting"] %>
</body>
</html>
似乎根本没有处理子文件夹中的 web.config 。为什么配置范围不适用于 AppFabric 工作流/WCF 服务?我该怎么做才能让它发挥作用?
如果我将工作流/WCF 服务放在 IIS 中我的 Web 应用程序的根目录中,则 appSettings 部分可以按预期访问。只有当我将工作流服务放在子目录中时,配置部分才不可访问。
更新:
我已修改问题以将其概括为 WCF 和工作流服务,因为它会影响这两种情况。我尝试这样做的原因是减少 IIS 应用程序和应用程序池的数量。
根据Windows Server AppFabric 架构指南:
与应用程序池规划类似,我们建议您将多个服务逻辑分组到一个有意义的 Web 应用程序中。AppFabric 旨在处理数百个 Web 应用程序。但是,为了获得最佳性能和可管理性,目标应该是尽可能减少 Web 应用程序的数量。
从这篇文章中,我相信在 Web 应用程序的子文件夹中拥有多个 WCF/Workflow 服务应该可以工作。