【问题标题】:Communication between ASP MVC and WinForm ApplicationsASP MVC 和 WinForm 应用程序之间的通信
【发布时间】:2013-10-05 01:47:20
【问题描述】:

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

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

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

不过,这种方法似乎很不安全,开放端口、配置防火墙等似乎有点矫枉过正。

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

感谢您的帮助。

附:在您声称这是一个愚蠢的想法之前,Piriform 也在做类似的事情。看看 Agomo.com

【问题讨论】:

    标签: c# asp.net-mvc winforms wcf http


    【解决方案1】:

    SingalR 与适当架构的 Web 和 Windows 应用程序(例如 MVP、MVC 等)一起使用

    SignalR with window client (WPF)

    Console App & SignalR

    【讨论】:

    【解决方案2】:

    在 WinForm 应用程序中创建 WCF 服务,指定端点(并适当地保护端点),并从您的 ASP.NET 应用程序连接到所述端点,就像连接到 WCF 服务一样。

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

      • 这就是我的想法,但是让 WinForms 像每分钟一样发送请求会不会很麻烦?我的程序每天有 200 次下载。所以,假设一年后,会有很多程序查询我的服务器。我想还是比实时好。
      • 您真正想要的是发布/订阅模型,这是@John S. 所回答的。轮询也可能很慢,并且会产生大量开销。
      猜你喜欢
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多