【问题标题】:Share code between web and worker role in Azure在 Azure 中的 Web 角色和辅助角色之间共享代码
【发布时间】:2014-07-10 06:30:31
【问题描述】:

不确定这在 Azure 服务中是否可行,以及这是否是最好的方法。

我有一个从我的数据库中提取数据并构建 xml 输出的类。在正常情况下,由于它是以工作角色运行的,因此它会在必要时运行并将 XML 推送到外部 Web 服务。 但是,我还需要能够将该功能公开为服务,以便不同的外部 Web 服务可以对我的系统进行 Web 服务调用并获得相同的 XML 响应。 我可以在工作角色中设置一个 RESTful Web 服务并构建与我的工作角色中存在的相同的功能 - 问题是我现在有重复的代码。

如何进行设置,以便我的代码从数据库中获取额外数据、执行一些计算、生成 xml,所有这些都位于一个可从 webrole(由外部 Web 服务调用触发)和工作角色访问的位置(定期运行)。

我已经查看了有关 TCP 内部端点和工作人员 webrole 通信的所有问题,但似乎没有一个涉及允许 webrole 调用 workerrole 上的方法并将该数据传递给调用者的情况。

如果有人可以帮助我,将不胜感激。 谢谢

【问题讨论】:

  • 再想一想 - 我想这里的答案是创建一个包含任何共享代码的新通用项目,并从我的网络和工作角色中引用它。这可能是最有意义的。在 Azure 中这样做有什么问题吗?
  • 这基本上就是@sharptooth 的建议,只是假设项目将被单独编译。

标签: azure communication webrole


【解决方案1】:

嗯,从技术上讲,解决方案是创建一个包含所有共享代码的类库(.NET 程序集),并从两个角色项目中使用它。您必须在每个角色项目中对该程序集的引用上将“copy local”设置为“true”,以便将程序集打包到角色包中。

但是,在您的情况下,可能会有更好的解决方案。您可能只是将网络角色用于这两个目的。我的意思是一个网络角色就像一个工人角色,只是安装了一个额外的 IIS。除非您真的(真的)需要单独扩展和更新它们,否则您可以省去很多管理和部署的痛苦,并且只需使用网络角色来处理所有事情就可以节省一些钱。

【讨论】:

  • 谢谢。非常有帮助。我需要查看本地副本并考虑您的建议以仅使用网络角色 - 但我相信我们需要保留一个单独的网络和工作人员(无论如何现在)。这是我第一次部署到 Azure - 如果我使用共享代码创建的类库在两个项目中都被引用,那不会自动将其包含在部署中吗?即为什么这么麻烦?
  • @Gotts:没什么麻烦,无论如何你都会添加一个引用,唯一的额外步骤是设置“本地复制”。我会说需要这样做的原因是因为 Azure SDK 和“工具”的错误非常严重。
【解决方案2】:

如果我是你,我会将其设置为 Web 角色,然后会向 Worker Role 发送一条消息,并根据此消息触发 Worker 角色上的事件以启动所需的流程。

您可以使用队列存储或 WCF 服务来做到这一点。

【讨论】:

猜你喜欢
  • 2015-07-07
  • 2014-08-29
  • 1970-01-01
  • 2011-09-17
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
相关资源
最近更新 更多