我们有一个WebRole处理来自WCF服务的请求,然后验证然后将消息放入云存储中的Azure队列。在同一个应用程序中,我们有一个WorkerRole,它从队列中读取信息并调用我们的持久层来处理请求并返回结果。我们想知道为什么工作者角色没有接受我们的任何配置设置,因此没有提供我们正在寻找的跟踪信息。我们意识到worker角色可能正在寻找app.config而无法找到它。
有没有办法将工作者角色指向Web配置,或者能够将我们的企业库设置加载到ServiceConfiguration.cscfg文件中,在任何一种情况下都意味着两者都可以从一个公共位置读取?
非常感谢提前 Kindo
答案 0 :(得分:3)
据我所知,您的工作人员角色无法开箱即可访问Web角色的Web配置。
如果将配置项移动到ServiceConfiguration.csfg文件,并且worker和Web角色都在同一个云项目中,则设置将位于同一文件中。但由于Web角色和辅助角色是该云项目中的不同项目,因此它们的设置位于该.csfg文件的不同部分。如果您希望两者的设置相同,则必须复制设置。
将您的设置放在此文件中可以获得以下优势:您可以在角色运行时更改设置,并让角色响应您喜欢的内容,例如:您可能希望某些设置重新启动角色,对于其他您可能只想更新静态变量。要更新web.config或app.config,您需要重新部署该角色。
您确实需要注意ServiceConfiguration文件不是webconfig的替代品。如果您正在使用在Web或应用程序配置中查找其设置的工具,除非他们特别聪明且了解Azure环境,否则他们不会在ServiceConfiguration文件中查找设置。
我知道你没有问过这个问题,但是如果你希望你的工作者角色通过使用请求队列和响应队列为你的web角色提供几乎同步的响应,你可能会发现这个不会很好地扩展。如果要对Azure中的辅助角色进行同步调用,则最好使用WCF(这不会在指南中的任何位置突出显示)。正如你所说的那样,所有这些只是一个WCF服务,你的问题的答案可能就是取消工人角色。
答案 1 :(得分:1)
您无法在Azure中的角色中共享web.config的OR .cscfg,因为无法保证角色与其他角色位于同一主机,群集甚至数据中心。
如果您只是尝试共享连接字符串,特定于应用程序的变量等项目,我只需创建您自己的“配置管理器”类,该类将获取一些XML并将其解析为一组设置。这样,您可以将该配置存储在Azure Blob存储上,并且更改将像更新该blob一样简单,并指示您的应用重新加载。 (使用Service Management API非常简单)。