繁体   English   中英

多个应用程序池上的SignalR

[英]SignalR on multiple application pools

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

因此,当在客户端连接的同一池中的服务器端触发通知时,它看起来像-它起作用,但如果池不同,则不起作用。

任何人都可以建议如何处理此问题-或问题出在错误的代码中(错误的集线器上下文处理等)。 我是SignalR的新手-因此使用了SignalR文档中的消息广播示例。

这是亩中心:

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(...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM