我在解决方案中有2个项目,一个是MVC应用程序,第二个是简单的Windows窗体应用程序。出于测试目的,我目前正在尝试做的是通过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();
}
}
}
表单应用 - 点击按钮事件:
private void button1_Click(object sender, EventArgs e)
{
var context = GlobalHost.ConnectionManager.GetHubContext<ConnectionHub>();
context.Clients.All.updatesequence(" ");
}
Javascript客户端函数“updatesequence()”应该没问题,因为我在不同的设置中测试它并且它工作正常。数据库连接也有效。
编辑:我的问题是 - 如何使这项工作?它在当前设置中不起作用。加载了Forms中的Context并调用了“updatesequence”方法,但没有任何反应。
答案 0 :(得分:0)
您正在Winforms应用中调用服务器端代码,这是不对的。在Winforms应用程序中,您应该参考SignalR .NET 客户端库,并使用该库连接到您的服务器并将方法调用到您的集线器中(或者您可能希望为管理目的引入另一个方法)。
看看这个:http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-net-client
此外,除非您计划拥有多个服务器并且需要水平可伸缩性,在此阶段可能不是您的主要考虑因素,否则您根本不需要Sql Server背板(请致电UseSqlServer
Startup
类)。