【问题标题】:SignalR on multiple application pools多个应用程序池上的 SignalR
【发布时间】:2016-08-11 12:41:48
【问题描述】:

我正在尝试从服务器向特定客户端发送有关事务更改的通知。到目前为止,我在本地和开发环境中做得很好,但在 LIVE 中,我们有 3 个应用程序池(3 个物理服务器)和负载均衡器(所有三个都有相同的机器密钥)。

所以看起来当通知在客户端连接的同一个池上触发服务器端时 - 它可以工作,但如果池不同则不起作用。

任何人都可以建议如何处理这个问题 - 或者问题可能出在错误的代码中(不正确的集线器上下文处理或其他东西)。我是 SignalR 的新手 - 所以使用 SignalR 文档中的消息广播示例。

这里是 mu 集线器:

public class ExampleClassHub : Hub
{
    private readonly ExampleClass _ExampleClassInstance;
    public ExampleClassHub() : this(ExampleClass.Instance) { }

    public ExampleClassHub(ExampleClass ExampleClassInstance)
    {
        _ExampleClassInstance = ExampleClassInstance;
    }
}

这是提供静态实例的类:

public class ExampleClass
{
    private readonly static Lazy<ExampleClass> _instance = new Lazy<ExampleClass>(() =>
        new ExampleClass(GlobalHost.ConnectionManager.GetHubContext<ExampleClassHub>().Clients));

    private IHubConnectionContext<dynamic> Clients { get; set; }

    private ExampleClass(IHubConnectionContext<dynamic> clients)
    {
        Clients = clients;
    }

    public static ExampleClass Instance
    {
        get
        {
            return _instance.Value;
        }
    }

    public void NotifyTransactionChange(int userId, string tid, bool isTransactionSuccessfull)
    {
        string json = JsonConvert.SerializeObject(new Notification { UserId = userId, Tid = tid, IsTransactionSuccessful = isTransactionSuccessfull });
        Clients.User(userId.ToString()).notifyTransactionStateChange(json);
    }


    class Notification
    {
        public int UserId { get; set; }
        public string Tid { get; set; }
        public bool IsTransactionSuccessful { get; set; }
    }
}

所以从服务器端通知是通过以下方式触发的:

ExampleClass.Instance.NotifyTransactionChange(...)

【问题讨论】:

  • @JAG...,谢谢 - 使用 SQL-Server 背板解决了这个问题
  • @RUKAclMortality 仅供参考,微软建议使用 Redis 作为背板(显然 SQL Server 和服务总线背板也有它们的位置)
  • @Mark C。感谢您的洞察力。由于我们只对服务器广播感兴趣 - 我们现在就可以使用 SQL Server 背板了。

标签: asp.net signalr application-pool


【解决方案1】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-25
    • 2019-08-19
    • 1970-01-01
    • 2011-03-28
    • 2022-09-28
    • 1970-01-01
    • 2016-10-18
    • 2014-06-22
    相关资源
    最近更新 更多