azure - 为 SignalR ASP.NET 项目选择正确的项目类型和 Windows Azure 服务

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

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

我刚刚开始接触 Windows Azure,对它完全陌生。我注册了 30 天免费试用。我正在 Visual Studio 2012 中开发我的应用程序。

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

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

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

最佳答案

关于项目类型:

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

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

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

<小时/>

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

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

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

Web 角色就像 worker 角色一样,但随 ASP.Net 一起提供。 OnStart、OnStop 和 Run 方法仍然存在,但您不需要使用它们,而是可以使用 ASP.Net 事件(如应用程序启动)。

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

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

关于azure - 为 SignalR ASP.NET 项目选择正确的项目类型和 Windows Azure 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18274987/

相关文章:

c# - 安装 MySQL .Net 连接器 6.8.3 时出现奇怪错误

c# - 使用发布-订阅模式通过 SignalR 向客户端发送更新

c# - 从 SignalR 集线器发送异步邮件

asp.net-mvc - Visual Studio 在 razor 语句中显示语法错误但有效

azure - 将 Multi-Tenancy 项目发布到 Azure 时自定义 web.config

angularjs - 如何动态地将集线器添加到 SignalR 并具有不同的作用域

.NET Core、Windows Azure 存储。在控制台应用程序上崩溃但在网络应用程序上不崩溃?

azure - 如何将 Microsoft Azure 存储模拟器与 Xamarin 结合使用?

azure - 使用 terraform 脚本在 azure 上旋转 Linux 虚拟机的 azurerm_image.source_virtual_machine_id 应该是什么?

c# - Azure 函数在 Linux 上出现 'Listener unable to start' 错误