如何从Web应用程序远程执行多个客户端上的程序?

时间:2010-12-21 17:09:14

标签: c# .net asp.net client-server distributed

所以我对我正在进行的项目有以下要求,我无法弄清楚最好(或任何,就此而言)这样做的方法。

我在总部的IIS上有一个asp.net网络应用程序。当特定事件发生时,我需要在整个公司的动态选择的PC子集上显示消息。由于此过程的时间限制(4小时反应时间),必须显示该消息,并且我们在法律上不能不显示该消息。

所以我需要做以下事情:

  • 向用户显示消息。我有一个winforms应用程序,它提出了一个对话框,唯一可以解决它的方法是单击一个大的“确认”按钮。
  • 确保显示消息。某种报告表明是的,它已被展示并随后得到承认。
  • 如果未显示表单,则采取反应的方式。

我考虑过以下几点:

  • PsExec - 在我的网络应用中异步迭代每个节点以触发远程 坐在每台PC上的可执行文件。
  • .NET Remoting - 我根本不熟悉这个,它让我看看WCF。它能用于我正在做的事情吗?
  • WCF回调 - 这些似乎需要一个持续的连接,我不确定这对我们的基础设施意味着什么。我想象一个客户服务会启动应用程序或以某种方式显示表单。
  • 我们的日程安排软件(Tidal Enterprise Scheduler) - 远程执行可执行文件。这会引入更多的失败点。

在SO看来,解决这个问题的最佳方法是什么?在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

一种方法是:

  1. 安装在每个桌面上的客户端应用
  2. 让该应用程序(在定时事件上)调用Web服务以获取它需要显示的任何消息,或直接联系数据库服务器以获取它需要显示的消息。
  3. 一旦显示消息,让应用程序告诉Web服务或sql server它已被查看。记录日期时间并登录用户。
  4. 您的网络应用应该只是将消息存储在数据库中;并且,如果您想要一点健壮性,则会公开桌面应用程序调用的Web服务以检索消息并将其标记为已查看。这样可以防止需要让桌面应用程序直接与sql server通信,这意味着桌面应用程序可以安装在世界任何地方。

    应安装桌面应用程序,使其无法禁用/关闭/卸载。有很多种方法可以做到这一点。

    我不会使用你定义的任何方法,因为它们很复杂并且引入了过多的脆弱性。

    <强>更新 有几种方法可以锁定应用程序:

    1. 拥有以管理员身份运行的监视器服务,该服务可监控桌面应用程序。如果它被杀死然后强行重启。您可以通过WMI进行监控。有些AV软件会这样做。务必使用户权利远离停止服务。
    2. 删除用户使用或访问任务管理器的功能。许多病毒变种都可以做到这一点,从group policy settings开始很容易做到。
    3. 如果他们在域中,请确保您的组策略设置强制安装桌面应用并强制它在Windows启动时自动运行。

    4. 如果您真的希望它有效,请执行以下操作: 确保您的应用程序每小时通知家庭服务器一次。让首席执行官发出一条消息,指出如果应用程序被关闭,相关员工将被解雇。他们可能会说它比这更好一点。定期运行审计报告并解雇几个人以吓跑别人。我保证在那之后没人会搞砸它。

      确保审核报告得到经理的确认......毕竟员工可能不在那一天。 ;)

答案 1 :(得分:1)

您可以让HQ应用程序在表中设置一些记录,以了解哪些客户端需要显示消息

Message [ComputerName, IsAcknowledged]

然后,每个客户端将在必要时查看该表,以查看其ComputerName是否存在且IsAcknowleded == false。如果是,请显示Acknowledge的提示,更新他们的记录

答案 2 :(得分:1)

探索发布和订阅设计模式。这可能是您正确的解决方案。基本上,它启动所有Windows应用程序将注册回调的服务,并从您的webapp,您可以在服务中引发将发布所有已注册应用程序的事件。发布者将具有根据事件和来源识别PC子集的逻辑。