首页 文章

同一应用程序中的工作者和Web角色

提问于
浏览
2

我们有一个WebRole来处理来自WCF服务的请求,然后验证然后将消息放入 Cloud 存储中的Azure队列 . 在同一个应用程序中,我们有一个WorkerRole,它从队列中读取信息并调用我们的持久层来处理请求并返回结果 . 我们想知道为什么工作者角色没有接受我们的任何配置设置,因此没有提供我们正在寻找的跟踪信息 . 我们意识到worker角色可能正在寻找app.config而无法找到它 .

有没有办法将工作者角色指向Web配置,或者能够将我们的企业库设置加载到ServiceConfiguration.cscfg文件中,这两种情况都意味着两者都可以从一个公共位置读取?

非常感谢Kindo

2 回答

  • 3

    据我所知,您的工作者角色无法开箱即可访问Web角色的Web配置 .

    如果将配置项移动到ServiceConfiguration.csfg文件,并且worker和Web角色都在同一个 Cloud 项目中,则设置将位于同一文件中 . 但由于Web角色和辅助角色是该 Cloud 项目中的不同项目,因此它们的设置位于该.csfg文件的不同部分 . 如果您希望两者的设置相同,则必须复制设置 .

    将您的设置放在此文件中可以获得以下优势:您可以在角色运行时更改设置,并让角色响应您喜欢的内容,例如:您可能希望某些设置重新启动角色,对于其他您可能只想更新静态变量 . 要更新web.config或app.config,您需要重新部署该角色 .

    您确实需要注意ServiceConfiguration文件不是webconfig的替代品 . 如果您正在使用在Web或应用程序配置中查找其设置的工具,除非他们特别聪明且了解Azure环境,否则他们不会在ServiceConfiguration文件中查找设置 .

    我知道你没有问过这个问题,但如果你期望你的工作者角色通过使用请求队列和响应队列对你的web角色提供几乎同步的响应,你可能会发现这不会规模很好 . 如果要对Azure中的辅助角色进行同步调用,则最好使用WCF(这不会在指南中的任何位置突出显示) . 正如你所说的那样,所有这些只是一个WCF服务,你的问题的答案可能就是取消 Worker 角色 .

  • 1

    您无法在Azure中的角色之间共享web.config的OR .cscfg,因为无法保证角色与另一个角色位于同一主机,群集甚至数据中心 .

    如果您只是尝试共享连接字符串,特定于应用程序的变量等项目,我只需创建您自己的“配置管理器”类,该类将获取一些XML并将其解析为一组设置 . 这样,您可以将该配置存储在Azure Blob存储上,并且更改将像更新该blob一样简单,并指示您的应用重新加载 . (使用Service Management API非常简单) .

相关问题