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).
我在一个解决方案中有 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).