2

我目前在 Azure 网站上使用 signalR 使用单个实例将数据推送到客户端。没问题。

我们将项目拆分为单独的 web/worker 和 wcf 角色,以便我们可以独立扩展它们。

该网站将像这样工作。

方案 A

用户向 Web 角色提交一些数据,并将其放入服务总线队列中,为工作人员 A 做好准备,向工作人员 A 发送一条消息,说明已添加新项目以防其空闲(以节省轮询)。当工作人员 A 处理完它后,将消息发送回 Web 角色,然后推送给特定的客户端。

场景 B

在 wcf 角色中接收数据并将其放入不同的服务总线队列中,为工人 B 做好准备,wcf 角色向工人 B 发送消息,说明已添加新项目,以防其空闲。当工作人员 B 处理完它后,向 Web 角色发送一条消息并将其推送给特定的客户端。

下图很糟糕: 图表

我将为用户的 Web 角色启用 signalR 服务总线背板。我不确定的是如何让我的角色相互交流。

我需要:

网络角色 => 工人 A

工人 A => 网络角色

wcf 角色 => 工人 B

工人 B => 网络角色

我是否在 web、worker A 和 worker B 上都创建了带有服务总线主题的集线器?然后以某种方式与 signalr .net 客户端连接?如何确保它适用于网络角色的所有实例而不公开?

出于某种原因,数百个客户端通过 JavaScript 连接到我的 Web 角色中心似乎很简单,但尝试连接一些内部的,我不太明白。

4

2 回答 2

5

如果有人感兴趣......我最终做的是:

我在 Web 和 Wcf 角色上都创建了集线器。Web 角色有一个连接,允许在 /signalr 处使用 javascript 代理,而 web 和 wcf 角色有一个在 /signalr-internal 处没有的连接。

我使用 Azure 服务总线作为背板,让它自动处理 web 和 wcf 集线器,无需额外修改。

在 signalR 身份验证中,我探查了连接来自何处(即内部端点或外部 ssl 端点,并基于此拒绝/允许访问特定集线器。这使我能够在我的工作人员上使用 .net signalr 客户端自动连接/重新连接等

这最终工作得很好,到目前为止没有任何问题,而且实现起来很简单。如果我遇到任何问题,我会更新。

编辑#1:

不要使用这种方法!一切都运行良好,直到您将其实际部署到实时环境中,然后您遇到了许多让我想扯掉头发的问题。

我实际上最终做的(在现场完美地工作)是使用服务总线主题并为听众创建对它们的订阅。这会创建 TCP 连接并允许您的通信保持 100% 内部通信,而不会出现任何疯狂的传输或边界问题。

编辑#2:

自从这篇文章发布以来,事件中心已经发布,我们切换并且从未回头。见最后评论

于 2014-05-01T10:16:46.030 回答
1

Peter,实际上要让这种方法发挥作用,您需要切换到托管在 IaaS VM 上的 Web 角色或 IIS。

目前网站不支持 Azure 虚拟网络,这是在 Azure 上的实例之间启用专用网络互连的唯一方法。

您可以将 VM、Web 和 Worker 角色添加到虚拟网络,该网络应该为您提供所需的访问权限,而无需通过公共端点公开所有内容。

于 2014-04-28T00:14:34.083 回答