我是否必须将 Azure SignalR 用于部署到 Azure 的 SignalR 服务?

Do I have to use Azure SignalR for a SignalR service deployed to Azure?

我知道这个问题听起来很奇怪,但最近的测试让我怀疑我的 SignalR 实现。

我在我的启动程序中有以下设置 class(为了尽可能简单,省略了其他设置):

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSignalR().AddAzureSignalR();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapHub<BearHub>("/bear");
        });
    }

我的 Azure 帐户中有一个付费的 SignalR 订阅,当我使用 .AddAzureSignalR() 部分时,它是从我的应用程序设置文件中读取的。它工作正常。

后来,我们需要添加一些集成测试。出于某种原因,经过几次尝试,我们发现我们的 in-memory SignalR 测试 classes 在我们删除 AddAzureSignalR() 部分时工作正常!! 这让我想起,在 Azure 成为许多公司的选择之前很久,我就已经看过 SignalR 示例了。这意味着:公司只是在他们的正常应用程序服务中使用 SignalR……或者我是这样认为的。

因此,当我使用 AzureSignalR 而不仅仅是具有 SignalR 功能的应用服务时,我不确定要添加什么。我去了 Azure SignalR site,它声称有些事情不清楚:

You don’t have to provision and maintain servers just because you need real-time features in your solution. SignalR Service is fully managed which makes it easy to add real-time communication functionality to your application. No more worrying about hosting, scalability, load balancing, and such details!

我不需要同时使用应用程序服务来维护服务器。我不需要担心托管、可扩展性和平衡性。 balancing 部分可能是这里的关键,因为它可以以比应用程序服务更好的方式自动管理。但是其他的点好像只是宣传

Benefit from everything Azure has to offer! Easily integrate with services such as Azure Functions, Azure Active Directory, Azure Storage, Azure App Service, Azure Analytics, Power BI, IoT, Cognitive Services, Machine Learning, and more.

仅 SignalR 和应用服务就是如此。如果我删除 AddAzureSignalR() 部分,它不会改变。

我不确定我们是否为不需要的东西付费(即使它根本不贵)

与其他服务相比,Azure SignalR 服务非常新。 SignalR 早在 2013 年就开始使用了。因此,您可以在没有 Azure SignalR 服务的应用程序服务中使用它。我们自己这样做。我什至猜测大多数 Signal R 应用程序仍在使用它们“自己的”基础架构,只是因为它们(还)没有迁移。

MSDN 甚至有一个 official full sample 用于执行此操作。

在上述好处中,SaaS 解决方案对我来说有两个主要好处:

  • 将 SignalR 与您的其他基础设施分离
  • 缩放。如果您使用应用服务进行横向扩展,则必须使用 redis backplane,这在成本和基础架构方面是一个相当大的飞跃。