代码之家  ›  专栏  ›  技术社区  ›  Timothy Strimple

用于运行应用程序的wcf返回命令

  •  0
  • Timothy Strimple  · 技术社区  · 16 年前

    在我正在设置的信息亭系统中,所有信息亭都与中央服务器通信,以签入和接收更新命令。我不使用双HTTP通信,因为我不能保证在客户机站点上允许哪些端口,所以通信总是从kiosk(客户机)启动的。我目前有一个更新契约,它返回一个名为kioskaction的枚举,该枚举表示一个kiosk可以执行的所有命令(updateClient、sendlogfile、updateSetting等)。这已经足够好用了,但我想知道是否有更优雅的方式来处理这个问题。

    亭上的当前更新方法类似于…

    var kioskAction = KioskService.Update(kioskId);
    switch(kioskAction)
    {
        case KioskAction.SendLogFile:
            KioskService.SendLogFile(kioskId, GetLogFile());
            break;
        case KioskAction.UpdateSettings:
            Setting[] settings = KioskService.GetKioskSettings(guid kioskId);
            UpdateSettings(settings);
            break;
        ...
    }
    

    我的问题是,为了添加更多的信息亭功能,我必须重新构建和重新部署信息亭应用程序和WCF服务。我正在考虑返回某种类型的脚本(可能是Ironpython),它实际上包含执行该操作所需的代码。然后我可以添加新的功能,只需向系统添加一个新的脚本,而不需要对kiosk应用程序或kiosk服务进行任何更改。

    显然存在一些安全问题,因为kiosk客户机基本上运行kiosk服务返回的任何代码,因此,如果kiosk服务受到影响,那么所有的kiosk也可能受到影响。在向这个方向前进之前,我还有什么需要注意的,或者我应该考虑的吗?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Anderson Imes    16 年前

    您也可以考虑Windows工作流基础工作流,而不是代码。如果您使用仅声明性工作流(有时称为“仅XOML”工作流),那么您应该能够将它们放到一个目录中,然后一般地激活它们。它的设计允许这样做。

        2
  •  0
  •   Cheeso    16 年前

    我看到一些风险。

    1. 当已经存在远程管理/更新工具时,您是否为自己的目的构建了特定的东西?这是一个虚荣的项目吗?你宁愿自己建造它,也不愿重复利用已经存在的东西?
      在构建自己的Ironpython远程处理和执行之前,可以做一些addl研究。
      • 首先,检查PowerShell,特别是PowerShell托管功能(通过运行空间)。您可以将PowerShell代码发送到客户端,然后 run it in a powershell RunSpace 属于您的WCF客户端。此外, RemoteRunSpace thing 从不久前开始,可能会很有趣。不确定PowerShell v2是否内置了此功能。如果是这样,它可能对你有用。
      • 中的配置服务 StockTrader 应用程序设置是否更新,但不“运行任意代码”。源头与 arch doc 配置服务可用。
    2. 如果您选择“运行任何代码”路径,请确保在系统中添加一个红色的大重置按钮,以防其中一个脚本没有按预期执行,并导致1000个远程信息亭无法通信。