【发布时间】:2020-04-21 10:04:07
【问题描述】:
我有一个运行某些进程的 Windows 服务,它必须在浏览器上通知它的进度。我不确定我是否在做一些好的事情,但我只是做了:
Windows Service publish a json on a redis channel called 'web' -> An action on ASP.NET MVC application subscribe the 'web' channel and send the json to browser via signalR hub -> the browser take it and show the progress。
我有以下代码(它是一个助手)在发布后添加一个通道范围。它是从我的控制器/动作中调用的:
public void Listen(string channel, Action<string, object> action)
{
var sub = Client.GetSubscriber();
sub.Subscribe(channel, (c, v) =>
{
action(c.ToString(), v.ToString());
});
}
问题:它按预期工作,我收到了浏览器通知。问题是当用户(在浏览器上)点击 F5 或再次执行操作时。它创建了一个新频道,我收到了重复的消息。如果用户再次执行它,我开始每条收到 3 条消息,依此类推。我想避免它。
我的尝试:我尝试使用IsConnection(channel),但它总是返回true。我在Subscribe(channel) 之前尝试过Unsubscribe(channel),它可以工作,但我不确定我是否会丢失一些消息(我害怕)。我不知道如何解决它并避免重复订阅。有谁能帮帮我吗?
谢谢。
【问题讨论】:
标签: c# .net redis publish-subscribe stackexchange.redis