我目前正在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,其中包含以下内容,以查看是否可以从ASP.NET网页访问此appSetting,并且它可以正常工作!
<html>
<body>
<h2>
TestWebApp
</h2>
<%= ConfigurationManager.AppSettings["TestSetting"] %>
</body>
</html>
似乎根本没有处理子文件夹中的web.config。为什么配置范围不适用于AppFabric工作流/ WCF服务?我能做些什么才能让它发挥作用?
如果我将工作流/ WCF服务放在IIS中的Web应用程序的根目录中,则可以按预期访问appSettings部分。只有当我将工作流服务放在子目录中时,才能访问配置节。
更新
我已将问题修改为将其推广到WCF和Workflow服务,因为它会影响这两种情况。我正在尝试这个的原因是减少IIS应用程序和应用程序池的数量。
根据Windows Server AppFabric Architecture Guide:
与应用程序池规划类似,我们建议您将多个服务逻辑分组到有意义的Web应用程序中。 AppFabric旨在处理数百个Web应用程序。但是,为了获得最佳性能和可管理性,目标应该是尽可能减少Web应用程序的数量。
从这篇文章中,它让我相信在网络应用程序的子文件夹中有多个WCF /工作流服务应该可以工作。
答案 0 :(得分:2)
我认为问题在于您的工作流程没有在ASP.NET线程上运行,而是在线程池中自己的线程上运行。因此,它并不真正关心ASP.NET作用域规则,而是使用标准的AppDomain配置文件。