如何将内容从httpWebRequest从Web角色传输到Microsoft Azure中的辅助角色

时间:2014-05-03 22:11:05

标签: c# azure azure-web-roles endpoint azure-worker-roles

请帮助新手:

我想到的是:

  1. Web角色收到http请求。 (完成)
  2. 该url应该有助于确定worker角色的特定实例。 (完成)
  3. 请求的内容应该转到[处理的工作者角色(它可能非常大,可能是xml或json或blob或其他类型)
  4. 辅助角色接收数据
  5. worker角色解析/处理来自内容的数据并执行一些计算。 (完成)
  6. 辅助角色将响应发送回Web角色。 (可能是一个字符串或类似于请求中的数据:也可能非常大)。
  7. 项目#3和#4是我遇到大部分问题的地方:不知道这里做了什么 项目#6我相信我对如何做有一些想法,但很想听听你的建议

    我所知道的是:

    • 我不能使用队列:我相信有一个尺寸限制,这将是 阻止我使用它。
    • 我不认为我可以使用共享 存储因为Web角色现在如何 - 长篇大论
    • 这让我使用端点:除非有人告诉我这是 绝对不可能,那么我将不得不考虑使用共享 存储

    提前感谢您的所有输入。

1 个答案:

答案 0 :(得分:0)

您当然可以使用代码从Web角色实例中找到辅助角色实例的内部端点。有关详细信息,请参阅此主题:How to get web role input endpoint in worker role?

但是我发现你的方法存在一个问题。您提到Web角色将使用内部端点与worker角色进行通信,以发送数据,然后等待worker角色处理该数据并发回响应。虽然从技术上讲它可能会这样做,但它会导致一些可扩展性问题,因为您现在正在占用您的Web角色。此外,您必须在代码中决定哪个工作者角色实例应该处理数据(假设有多个实例)。

我的建议是获取请求并将请求数据保留在blob存储中。您将获得blob的URL。然后使用blob的URL在队列中写入消息。将消息写入队列后,您的Web角色可以通知用户该请求已提交。工作者角色实例将定期轮询此队列并处理该消息。他们将从消息内容中获取blob URL,获取内容并对其进行处理。处理完工作后,工作者角色可以写入队列/表,指示工作已完成。 Web角色可以不断轮询此表或队列,一旦任务完成,它就可以通知用户。