C# ASP MVC与WinForm应用程序之间的通信

C# ASP MVC与WinForm应用程序之间的通信,c#,asp.net-mvc,winforms,wcf,http,C#,Asp.net Mvc,Winforms,Wcf,Http,我正在寻找一种用户可以在ASP和Winform应用程序之间进行通信的方法 我正在寻找类似soluto.com的东西,我想让用户通过网站向其他计算机发送命令。假设用户注册了10台计算机,这是在mvc应用程序上注册的。用户可以选择所有10台计算机,并通过单击按钮发送“执行此任务” 我在想,Winform将创建一个httplisten服务器。每次winform打开时,它都会向mvc发送一条“我在线”帖子以及IP:Port。服务器将在需要时向该ip:端口发送请求 不过,这种方法似乎非常不安全,有一个开放

我正在寻找一种用户可以在ASP和Winform应用程序之间进行通信的方法

我正在寻找类似soluto.com的东西,我想让用户通过网站向其他计算机发送命令。假设用户注册了10台计算机,这是在mvc应用程序上注册的。用户可以选择所有10台计算机,并通过单击按钮发送“执行此任务”

我在想,Winform将创建一个httplisten服务器。每次winform打开时,它都会向mvc发送一条“我在线”帖子以及IP:Port。服务器将在需要时向该ip:端口发送请求

不过,这种方法似乎非常不安全,有一个开放端口,配置防火墙等等,似乎是一种过火的做法

我想知道是否还有其他方法可以做到这一点

谢谢你的帮助


在你说这是一个愚蠢的想法之前,梨状肌也在做类似的事情。查看Agomo.com

在WinForm应用程序中创建WCF服务,指定端点(并适当保护端点),并以与连接WCF服务相同的方式从ASP.NET应用程序连接到所述端点。

与架构正确的web和windows应用程序(如MVP、MVC等)一起使用


为什么不让Winforms应用程序使用标准的HttpClient或WebRequest定期轮询服务(可能每5秒左右一次),并询问是否有需要执行的任务

除非您需要实时、低延迟、高性能的通信,否则这是用最少到零的客户端设置或安全配置来解决问题的最简单方法

我的方法是将其实现为数据持久层中的堆栈。因此,每个客户机都可以在一个表中包含在任务排队时添加的行。当客户端向MVC服务器发送HTTP GET请求时,它将返回该客户端的任务数组,您可以让它立即从数据库中删除这些任务,或者等待客户端稍后发送HTTP命令以指示它完成了哪些任务

您可以将任务表示为具有一些属性的简单数据对象,或者仅表示一个字符串或int,您可以通过某种方式在客户端上查找这些字符串或int以调用适当的代码


为了合理的安全性,每个客户机只需要获得一个唯一的密钥,如GUID或等效密钥,它可以稍后发送到服务器以验证其身份。这也被称为cookie、secret或API密钥。

这是我的想法,但是让WinForms像每分钟一样发送请求会不会很麻烦?我的程序每天有200次下载。所以,假设一年后,会有很多程序查询我的服务器。我想还是比实时更好。你真正想要的是发布/订阅模型,这就是@John S.的答案。轮询也可能很慢,并且会产生大量开销。还有其他发布/订阅框架,如NServicebus()等。