SignalR 在两个应用程序之间共享连接

SignalR sharing connection between 2 apps

我在一个解决方案中有 2 个项目,一个是 MVC 应用程序,第二个是简单的 Windows Forms 应用程序。出于测试目的,我目前正在尝试做的是通过 Windows Forms 应用程序控制我的 MVC 应用程序上的内容。为了进一步简化这一点,我在我的应用程序上有一个按钮,单击该按钮后,应该会在我连接的客户端上更新 HTML。所以 MVC 应该管理客户端连接,而 Forms 应用程序应该专用于内容管理。

我所做的是这个 - MVC 集线器设置

public class ConnectionHub : Hub
{
    public void Update()
    {
        Clients.All.updatesequence(" ");
    }
}

MVC 启动设置:

[assembly: OwinStartup(typeof(Web.Startup))]

namespace Web
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {      
            GlobalHost.DependencyResolver.UseSqlServer(
        ConfigurationManager.ConnectionStrings["signalr"].ConnectionString);
            app.MapSignalR();
        }
    }
}

Forms 应用程序 - 按钮单击事件:

 private void button1_Click(object sender, EventArgs e)
 {
        var context = GlobalHost.ConnectionManager.GetHubContext<ConnectionHub>();
        context.Clients.All.updatesequence(" ");
 }

Javascript 客户端函数 "updatesequence()" 应该没问题,因为我在不同的设置中测试过它并且它有效。数据库连接也有效。

编辑:我的问题是 - 如何进行这项工作?它在当前设置中不起作用。加载了表单中的上下文并调用了 "updatesequence" 方法,但没有任何反应。

您正在 Winforms 应用程序中调用服务器端代码,这是不正确的。在您的 Winforms 应用程序中,您应该引用 SignalR .NET client 库,并通过该库连接到您的服务器并将方法调用到您的集线器(或者您可能想为管理员引入的另一个集线器)目的)。

看看这个:http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-net-client

此外,除非您计划拥有多台服务器并且需要水平可扩展性,这在现阶段可能不是您主要关心的问题,否则您根本不需要 Sql 服务器背板(调用 UseSqlServer 在你的 Startup class).