【问题标题】:Choosing the right project type and Windows Azure Services for SignalR ASP.NET project为 SignalR ASP.NET 项目选择正确的项目类型和 Windows Azure 服务
【发布时间】:2013-08-18 23:00:42
【问题描述】:

我正在开发将托管在 Windows Azure 上的 ASP.NET 4.5 C# + SingnalR Web 应用程序。

我刚刚开始接触 Windows Azure 并且是全新的。我注册了 30 天免费试用。我正在 Visual Studio 2012 中开发我的应用程序。

我的问题是关于我需要选择的可用服务,以便在 Windows Azure 上开发和发布我的特定应用程序。如果我打算使用 SignalR 和 Windows Azure 服务总线构建实时应用程序,我需要使用哪种基础架构?

我知道我需要在负载平衡器后面扩展应用程序 + 信号器机器。我也知道我需要将 SignalR 与 Windows Azure 服务总线连接。

我应该在 Visual Studio 中创建什么类型的项目以及我应该从 Windows Azure 中选择什么类型的服务。我知道有“网站”、“虚拟机”和“云服务”——但我不知道哪一个适用于我的特定应用程序。 谢谢。

【问题讨论】:

    标签: azure visual-studio-2012 signalr azure-storage azureservicebus


    【解决方案1】:

    关于项目类型:

    网站基本上是一种精简的云服务,可以让您免去大量工作——基本上,作为开发人员,您的选择更少,但可以从更简单的编程模型中获益。您无法使用云服务完成所有可以做的事情,但如果您的应用不需要网站无法提供的任何内容,那么选择此服务可能会更好。

    云服务是经典/默认项目类型。您拥有 Azure API 的所有功能,但除了网站之外,还必须在较低级别上工作。 我会推荐这种类型,除非您的应用“简单”到足以应付网站 - 无论是否如此,只有您可以通过仔细查看功能和限制来回答每种项目类型。

    虚拟机就是这样:云中的虚拟机驱动器。您可以选择云服务使用以外的操作系统 - 例如Windows XP 或某些 Linux 发行版。 - 然后安装您需要的任何服务,例如阿帕奇。我认为,只有在需要特定操作系统或服务时才应选择此选项。虚拟机的缺点是您负责更新和维护它们——而云服务会为您自动更新(Windows 更新等)。


    编辑:有关云服务项目类型的更多信息,以防您决定这样做:

    云服务支持两种角色:Worker 角色和 Web 角色。您可以通过增加某个角色的数量来扩展您的应用程序——例如,您可以创建一个角色来托管您的 SignalR 服务,然后如果您监控不断增加的负载,则增加 角色实例的数量。 Azure 负载均衡器会自动将所有传入请求分发到您为每个角色定义的 公共端点,因此您不必自己进行负载均衡(您必须不过使用无状态会话)。

    从编程的角度来看,Worker Role 基本上是一个具有 OnStart、OnStop 和 Run 方法的类,该类需要一直运行到角色实例停止为止。这个角色的作用完全取决于你——例如。您可以在 OnStart 方法中启动 SignalR 服务,并在 Run 方法中检查请求。

    Web Role 与 Worker Role 类似,但随 ASP.Net 提供。 OnStart、OnStop 和 Run 方法仍然存在,但您不需要使用它们,而是可以使用 ASP.Net 事件(如应用程序启动)。

    如果您想为您的应用程序使用 ASP.Net,您应该选择一个 Web 角色。您仍然可以将所有业务逻辑放在 Worker Role 中,并让您的 Web Role 将请求委托给它,例如通过 Azure 队列 - 这样您就可以独立扩展这两个角色。

    您可能还对 OWIN 或更具体的 Katana project 感兴趣。简而言之,Owin 是一个抽象层,它使您的 Web 项目技术独立 - 例如,您可以使用 IIS / ASP.Net,然后根据需要切换到自托管解决方案。 Katana 支持 SignalR,因此您也可以将 SignalR 直接托管在 Worker Role 中并完全跳过 ASP.Net(通过自己实现 JavaScript 客户端)。

    【讨论】:

      【解决方案2】:

      查看SignalR Scaleout - 很可能,您想要开发 Web 应用程序并将 Web 应用程序部署到 Azure 云服务。云服务在负载均衡器后面运行任意数量的实例,无需您进行任何配置,只需将您的 CNAME 记录指向云服务。对于 SignalR 部分,为了使其可扩展,您将希望使用 Azure 服务总线中继作为 SignalR 实现的背板(同样,负载平衡,您不必担心配置/维护)。引用的示例是一个好的开始。

      【讨论】:

      • 感谢您的回答。我已经阅读了这篇文章并观看了一些关于 SingnalR 的 Microsoft 视频,但他们的开发人员不建议使用背板解决方案,他们建议使用 P2P 连接之类的东西,在连接的机器之间发送消息。我没有找到任何关于使用 SignalR 和 Azure 背板完成的基准测试的信息,那么我如何确定它可以很好地扩展?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多