天道酬勤,学无止境

SignalR cannot connect to Azure Redis on SSL

I am currently hosting my redis cache server on Azure, and have signalR relying on it as the backbone using the following...

GlobalHost.DependencyResolver.UseRedis("Server",port,"password","eventKey");

This works find on port 6379 (non-SSL) but my chat app breaks when I try to connect to the SSL port (6380) of my Azure Redis server, and the hub is never started. What could be the cause of this issue? Or am I doing something wrong?

This is the error that appears on /signalr/connect in my browser net::ERR_CONNECTION_RESET

评论

You can try this: GlobalHost.DependencyResolver.UseRedis(new RedisScaleoutConfiguration(connectionString, "YourServer"));

And connection string something like:

connectionString="yourNameHere.cache.windows.net,ssl=true,password=YourPasswordKey"

Make sure you are using SignalR built with StackExchange.Redis (latest is gratest ;)

I upgraded the signalr core library to version 2.2.3.0 and used the below syntax, works like a charm.

var redisServer = ConfigurationManager.AppSettings[Constants.RedisServer].ToString();

var redisServerPassword = ConfigurationManager.AppSettings[Constants.RedisServerPassword].ToString();

var connectionString = $"{redisServer},password={redisServerPassword},ssl=True,abortConnect=False";
GlobalHost.DependencyResolver.UseRedis(new RedisScaleoutConfiguration(connectionString, "APIIdentifierString"));

In case anyone else hits the issue, it seems that the default connection string provided by the Azure portal contains abortConnect=False. Once I've removed that part, things started working for me.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 带有Azure Redis的StackExchange.Redis异常缓慢或抛出超时错误(StackExchange.Redis with Azure Redis is unusably slow or throws timeout errors)
    问题 我将所有现有的Azure In-Role缓存使用都移到Redis,并决定将Azure Redis预览与StackExchange.Redis库(https://github.com/StackExchange/StackExchange.Redis)一起使用。 我为它编写了所有代码,没有太大问题,但是在运行它时,它的速度绝对无法使用,并且会不断抛出超时错误(我的超时时间设置为15秒)。 以下是有关如何设置Redis连接并将其用于简单操作的相关代码: private static ConnectionMultiplexer _cacheService; private static IDatabase _database; private static object _lock = new object(); private void Initialize() { if (_cacheService == null) { lock (_lock) { if (_cacheService == null) { var options = new ConfigurationOptions(); options.EndPoints.Add("{my url}", 6380); options.Ssl = true; options.Password = "my password";
  • 为什么与Azure Redis缓存的连接如此之高?(Why are connections to Azure Redis Cache so high?)
    问题 我在一台查询缓存的计算机负载高的情况下使用Azure Redis缓存。 这台机器大约每秒获取并设置约20个项目。 在白天,这种情况会增加,而在夜间,这种情况会减少。 到目前为止,一切都很好。 今天,我意识到“已连接客户端”的指标非常高,尽管我只有1个客户端不断获取和设置项目。 这是我所指指标的屏幕截图: 我的代码如下所示: public class RedisCache<TValue> : ICache<TValue> { private IDatabase cache; private ConnectionMultiplexer connectionMultiplexer; public RedisCache() { ConfigurationOptions config = new ConfigurationOptions(); config.EndPoints.Add(GlobalConfig.Instance.GetConfig("RedisCacheUrl")); config.Password = GlobalConfig.Instance.GetConfig("RedisCachePassword"); config.ConnectRetry = int.MaxValue; // retry connection if broken config
  • SignalR with Self-Signed SSL and Self-Host
    Tried my luck at research, but so far no joy. I would like to connect a SignalR javascript client to a self-hosted SignalR Windows Service binding to a self-signed SSL certificate. My application works quite well over http, but the client repetitively disconnects when the Owin WebApplication starts using https. Here is what I've done to configure SignalR with SSL. Created a Self-Signed certificate using IIS Imported the certificate into the Trusted Root Certification Authorities in the mmc (not sure if that helped) Ran NETSH command to bind SSL to port 8080 netsh http add sslcert ipport=0.0.0
  • Updating aspnet.config on Azure Web Role
    I have a SignalR solution that is deployed to an Azure Web Role (cloud service, not Azure Web Site) and in order to ensure we can maximise the number of connections to each instance I need to make some changes various ASP.NET settings as detailed in this article: http://www.asp.net/signalr/overview/performance/signalr-performance#tuning The appConcurrentRequestLimit and requestQueueLimit settings were easily changed with a startup task that uses APPCMD to make the relevant changes. However, the maxConcurrentRequestsPerCPU setting resides in the aspnet.config file which cannot be changed via
  • 在Azure Web角色上更新aspnet.config(Updating aspnet.config on Azure Web Role)
    问题 我有一个SignalR解决方案,该解决方案已部署到Azure Web角色(云服务,而不是Azure网站),并且为了确保我们可以最大化与每个实例的连接数,我需要对各种ASP.NET设置进行一些更改,详细本文中的文章:http://www.asp.net/signalr/overview/performance/signalr-performance#tuning 通过使用APPCMD进行相关更改的启动任务,可以轻松更改appConcurrentRequestLimit和requestQueueLimit设置。 但是,maxConcurrentRequestsPerCPU设置位于aspnet.config文件中,无法通过相同的机制进行更改。 我尝试使用启动任务直接更新该文件(目前仅是基本文件替换),但是启动任务完成后似乎已被Azure运行时替换,因此更改丢失。 我可以将RDP放入机器中并手动进行更改,因此我已经看到它可以工作,但是对于我们希望按需扩展和缩减的服务而言,这是不可持续的。 关于如何在Azure环境中更改此设置的任何想法将不胜感激! 回答1 我最终使用了以下基于注册表的方法,该方法使我无需使用aspnet.config即可更改maxConcurrentRequestsPerCPU设置。 我将REG命令行实用程序的以下用法添加到了现有的startup.cmd中
  • 具有自签名SSL和自托管功能的SignalR(SignalR with Self-Signed SSL and Self-Host)
    问题 尝试我的研究运气不错,但到目前为止还没有喜悦。 我想将SignalR javascript客户端连接到绑定到自签名SSL证书的自托管SignalR Windows服务。 我的应用程序在http上运行良好,但是当Owin WebApplication开始使用https时,客户端反复断开连接。 这是我为SSL配置SignalR所做的工作。 使用IIS创建自签名证书将证书导入到mmc中的“受信任的根证书颁发机构”(不确定是否有帮助) 使用NETSH命令将SSL绑定到端口8080 netsh http add sslcert ipport=0.0.0.0:8080 certhash=123456f6790a35f4b017b55d09e28f7ebe001bd appid={12345678-db90-4b66-8b01-88f7af2e36bf} 在自托管的HubConnection实例中添加了代码,以添加导出的SSL,如下所示(尽管这无关紧要,因为客户端无法连接): if (File.Exists("MyCert.cer") && Settings.GetSetting(Settings.Setting.SrProtocol).Equals("https", StringComparison.InvariantCultureIgnoreCase)) connection
  • 如果IIS配置了多个工作进程,则SignalR会丢失消息(SignalR lost messages if IIS configure with more than 1 worker process)
    问题 我使用1个工作进程IIS广播和接收所有消息。 将工作进程更改为2,我仅收到其他所有消息(丢失50%)。 是通过设计,配置还是错误? 回答1 这是设计使然。 这两个工作进程不共享状态,并且将在循环的基础上在它们之间分配客户端,这意味着50%的进程将连接到进程A,而50%的进程将连接到进程B。默认情况下,进程A看不到来自进程B的消息。 您正在配置的内容称为“网络花园”(不要与“网络农场”相混淆),通常用于使故障应用程序具有更高的响应速度(请参见此SO问题)。 由于SignalR是从头开始构建的,并考虑了可伸缩性,因此此配置不会给您带来任何好处。 我的建议是将工作进程限制保持为1。 但是,有一种方法可以使它与Web花园一起使用:您需要使用外部消息总线(例如Redis或Windows Azure Service Bus)(详细信息可以在文档中找到)在进程之间共享消息,这当然会引入额外的网络延迟。
  • 使用 BookSleeve 的 ConnectionUtils.Connect() 将 SignalR 与 Redis 消息总线故障转移一起使用(Using SignalR with Redis messagebus failover using BookSleeve's ConnectionUtils.Connect())
    问题 我正在尝试使用 SignalR 应用程序创建 Redis 消息总线故障转移方案。 起初,我们尝试了一个简单的硬件负载平衡器故障转移,它只是监控两个 Redis 服务器。 SignalR 应用程序指向单个 HLB 端点。 然后我在一台服务器上失败了,但在没有回收 SignalR 应用程序池的情况下,我无法在第二台 Redis 服务器上成功获取任何消息。 想必这是因为它需要向新的Redis消息总线发出设置命令。 从 SignalR RC1 开始, Microsoft.AspNet.SignalR.Redis.RedisMessageBus使用 Booksleeve 的RedisConnection()连接到单个 Redis 以进行发布/ RedisConnection() 。 我创建了一个新类RedisMessageBusCluster() ,它使用 Booksleeve 的ConnectionUtils.Connect()连接到 Redis 服务器集群中的一个。 using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using BookSleeve; using Microsoft
  • Using SignalR with Redis messagebus failover using BookSleeve's ConnectionUtils.Connect()
    I am trying to create a Redis message bus failover scenario with a SignalR app. At first, we tried a simple hardware load-balancer failover, that simply monitored two Redis servers. The SignalR application pointed to the singular HLB endpoint. I then failed one server, but was unable to successfully get any messages through on the second Redis server without recycling the SignalR app pool. Presumably this is because it needs to issue the setup commands to the new Redis message bus. As of SignalR RC1, Microsoft.AspNet.SignalR.Redis.RedisMessageBus uses Booksleeve's RedisConnection() to connect
  • 如何使Redis在Azure上运行? [关闭](How to get Redis running on Azure? [closed])
    问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 7年前关闭。 改善这个问题 我已经看到了一些关于在Azure上运行Redis的人的参考,但是没有实现或任何形式的“方法”。 有人看过这样的例子吗? 回答1 下载适用于Windows的Redis-请参阅https://github.com/ServiceStack/ServiceStack.Redis上的“ Redis Service builds for Windows”部分。 我最终使用了dmajkic的win64版本https://github.com/dmajkic/redis/downloads 创建一个Azure辅助角色,删除默认类(根本不需要c#代码)。 从下载的redis源中添加文件redis-server.exe(可以在redis / src中找到该exe)。 在服务定义文件中,添加以下配置<WorkerRole name="my.Worker" vmsize="Small"> <Runtime executionContext="limited"> <EntryPoint> <ProgramEntryPoint commandLine="redis-server.exe" setReadyOnProcessStart=
  • 获取连接到SignalR集线器的侦听器和客户端的数量(Get number of listeners, clients connected to SignalR hub)
    问题 有没有办法找出侦听器的数量(连接到集线器的客户端?) 如果连接了至少一个客户端,我正在尝试运行/启动任务,否则不要启动它: [HubName("taskActionStatus")] public class TaskActionStatus : Hub, IDisconnect { static CancellationTokenSource tokenSource; public void GetTasksStatus(int? siteId) { tokenSource = new CancellationTokenSource(); CancellationToken ct = tokenSource.Token; ITaskRepository taskRepository = UnityContainerSetup.Container.Resolve<ITaskRepository>(); // init task for checking task statuses var tasksItem = new DownloadTaskItem(); taskRepository.GetTasksStatusAsync(siteId, tasksItem, ct); // subscribe to event [ listener ] tasksItem
  • SignalR使用Azure EventHub进行横向扩展(SignalR scaling out with Azure EventHub)
    问题 我正在寻找SignalR的高频缩放解决方案。 我想知道我是否可以使用Azure EventHub做到这一点。 如果我将EventHub用作SignalR消息的背板,它将成为我的瓶颈吗? 我已经检查过此页面,但与EventHub无关,因为它相当新。 回答1 我无法说清楚SignalR的具体细节; 但是,原则上您可以将EventHubs用于背板,但是您需要了解这些限制。 SignalR的背板横向扩展模式假定所有服务器都可以访问所有消息并假定处理所有消息。 这为单个背板可以在商用硬件或云中执行的操作提供了一个相当明确的限制。 在典型的云中,您可能能够维持100MB / s的数据吞吐量(1 Gb / s nic的整数倍),商品硬件(和Azure的HPC机器)的上限为1000MB / s(10 Gb / s nic)。 因此问题是,Azure EventHubs能否将您带到吞吐量的体系结构限制? 答案是肯定的。 100或1000个分区将为您提供足够的写入吞吐量,并为2台服务器提供足够的读取容量。 下一个问题是,如果您仅需要每台服务器在背板上读取100MB /秒,那么有多少服务器可以读取数据(即,如果您广播100MB /秒的股票报价,则数据大小不会随服务器数量的增加而增加) )。 答案是,只要您想要,但有一些技巧。 EventHubs通过对数据流进行分区来扩展。
  • Why are connections to Azure Redis Cache so high?
    I am using the Azure Redis Cache in a scenario of high load for a single machine querying the cache. This machine roughly gets and sets about 20 items per second. During daytime this increases, during nighttime this is less. So far, things have been working fine. Today I realized that the metric of "Connected Clients" is extremely high, although I only have 1 client that just constantly Gets and Sets items. Here is a screenshot of the metric I mean: My code looks like this: public class RedisCache<TValue> : ICache<TValue> { private IDatabase cache; private ConnectionMultiplexer
  • .NET Scalable Pub/Sub service implementation
    I need to build a system that is similar to a pub/sub system. It is composed of multiple sub-systems or services running in separate executables or as a Windows Services. The sub-systems are: The pub/sub service A pub/sub service managing communications between the internal sub-systems and the users. A user can have multiple channels open (A web page connected to a SignalR service, a mobile device connected to a duplex WCF service, etc.). The service should manage all the channels of an user and be able to send information to them on demand based on topics or specific users. The service must
  • 在Typescript中使用ASP.NET Core SignalR和React创建实时应用程序
    目录 介绍 ScrumPoker应用程序 源代码 开发工具 基本步骤 后端代码 创建Hub 在Startup中注册集线器 创建持久性 让我们为客户端应用程序公开一些终端 启用Cors 前端代码 结论 SignalR现在包含在ASP.NET Core框架中,并且进行了大量改进,使其轻巧易用。令我惊讶的是,我找不到任何有关如何使用SignalR的好教程,并且无法使用它使相同的旧聊天应用程序变得有趣。我想到了用SignalR创建一些东西,而不是同一个无聊的聊天应用程序。 介绍 在本教程中,我将指导您完成创建实时应用程序所需的主要步骤。我不会在这里写完整的代码。您可以在github 上找到完整的源代码。 ScrumPoker应用程序 在本教程中,我们将创建一个有趣的应用程序,名为ScrumPoker。我们生活在敏捷的世界中,因此在我们的开发过程或每个冲刺周期中进行故事评估并指出要点很普遍。过去,我们曾经计划使用扑克牌,而团队则通过这些牌来进行故事评估,但是现在一切都在线上了,我们经常进行远程工作。 用户可以创建ScrumBoard链接并与队友共享链接。团队成员可以进入那里并开始指出故事。只有当创建的用户ScrumBoard允许他们查看时,团队给出的点才会显示在仪表板上。 用户会实时添加到仪表板上,他们提交的点也会实时反映出来。 源代码 ├───clientapp├───Contracts├
  • StackExchange.Redis with Azure Redis is unusably slow or throws timeout errors
    I'm moving all of my existing Azure In-Role cache use to Redis and decided to use the Azure Redis preview along with the StackExchange.Redis library (https://github.com/StackExchange/StackExchange.Redis). I wrote all the code for it without much problem, but when running it is absolutely unusably slow and constantly throws timeout errors (my timeout period is set to 15 seconds). Here is the relevant code for how I am setting up the Redis connection and using it for simple operations: private static ConnectionMultiplexer _cacheService; private static IDatabase _database; private static object
  • SignalR 和 HttpContext/Session(SignalR and HttpContext/Session)
    问题 我理解为什么 SignalR 不让您访问 HttpContext。 然而,这对我们来说是相当有问题的。 让我解释: 我们的应用程序是一个多租户应用程序,用户在登录时选择环境。这基本上是在 HttpSession 中注册 ConnectionStringName。 在我们的 SignalR Hub 中,我们需要访问Disconnect上的数据库。 但这是不可能的,因为此时我们没有 HttpContext 并且无法确定要写入的环境。 任何人都可以向我们提供如何解决这个问题的建议吗? 我们在这一点上有点卡住了。 编辑:如果您的解决方案在负载平衡环境中工作,则加分。 回答1 这是一个老问题,但我会留下我的答案,以防万一它对那里的任何人都有帮助。 由于您的集线器扩展了Microsoft.AspNet.SignalR.Hub,因此它可以访问HubCallerContext类型的Context属性 这个属性暴露了来自调用者的大量信息: 连接 ID 标题请求参数要求饼干用户 在我的解决方案中,我使用存储在Context.User.Identity.Name 中的用户名作为我的键/值存储(在我的例子中是Redis)中的一个键来跟踪用户拥有的所有连接。 您可以覆盖OnConnnect和OnDisconnect以维护与用户关联的连接列表。 您还可以存储您想要的任何其他内容以及连接 ID
  • 您网站上的多个signalR连接/集线器(Multiple signalR connections/hubs on your website)
    问题 如果我有多个页面可以使用多个中心类,那么管理此问题的最佳方法是什么? 例如: 导航到网站上的另一个页面并从本质上“重新打开”与上一页中打开的同一集线器类的连接是否不好? 我是否认为在页面上打开多个集线器连接是正确的,因为即使它们是不同的集线器类,它们也都统一在一个连接中? 回答1 您可以有多个集线器在您的站点上共享一个连接。 SignalR 2.0已更新,可以通过一个信号连接处理多个集线器,而不会降低性能。 官方文档:http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server#multiplehubs 所有客户端将使用相同的URL与您的服务建立SignalR连接(“ / signalr”或您的自定义URL(如果您指定了一个)),并且该连接用于该服务定义的所有集线器。 与在单个类中定义所有集线器功能相比,多个集线器没有性能差异。 回答2 要开始使用集线器,请阅读集线器和集线器的客户端的WIKI条目。 根据多个页面的上下文,有几件事情。 启动集线器时,它将为您的客户提供一个ID,该ID在多个页面上都与该集线器相同(可以通过示例进行确认)。 重新打开与同一集线器的连接也不错。 您可能在所有页面上都运行hub.start客户端方法,但是,如果一个客户端打开多个窗口或从一个页面转到另一个页面
  • helm3安装harbor仓库
    主要内容 helm 安装 harbor仓库安装过程只需要2分钟国内需要换成国内源 helm repo add stable http://mirror.azure.cn/kubernetes/charts 添加harbor源 helm repo add harbor https://helm.goharbor.io 参考资料: https://github.com/goharbor/harborhttps://github.com/goharbor/harbor-helm helm搜索 $ helm search repo harbor NAME CHART VERSION APP VERSION DESCRIPTION harbor/harbor 1.3.0 1.10.0 An open source trusted cloud native registry th... helm chart(想看细节可以clone repository) $ git clone https://github.com/goharbor/harbor-helm.git $ cd harbor-helm && git checkout 1.3.0 安装 $ helm install harbor harbor/harbor -f values.yaml $ echo "结束" values
  • Ignore SSL errors with signalR Core Client
    I'm making an application that involves a website on localhost as a user interface with Asp.net Core and SignalR Core. My problem is that I get an authentication exception when starting the connection. I know this happens because I haven't ran dotnet dev-certs https --trust. But I can't expect an average user to run this command or have the dotnet SDK installed at all. I've tried using ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true; in my Startup.cs (and other places, but I understand that it's a global setting. in any case it