WCF返回命令以运行应用程序

时间:2009-05-31 20:55:10

标签: .net wcf

在我正在设置的自助服务终端系统中,所有自助服务终端都与中央服务器通信以检入并接收更新命令。我不使用Dual Http通信,因为我不能保证在客户端站点允许哪些端口,因此始终从Kiosk(客户端)启动通信。我目前有一个更新合同,它返回一个名为KioskAction的枚举,它代表了一个自助服务终端可以执行的所有命令(UpdateClient,SendLogFile,UpdateSetting等)。这工作得很好,但我想知道是否有一种更优雅的方式来处理这个问题。

Kiosk上的当前Update方法看起来像......

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 个答案:

答案 0 :(得分:2)

您可能还会考虑Windows Workflow Foundation工作流程,而不是代码。如果您使用仅声明式工作流(有时称为“仅xoml”工作流),您应该能够将它们放在目录中,通常会激活它们。它旨在允许这一点。

答案 1 :(得分:0)

我看到了几个风险。

  1. 当您已经有远程管理/更新工具时,您是否正在构建特定于您的目的的东西?这是一个虚荣项目 - 你宁愿自己构建它而不是重用已经存在的东西吗? 也许在构建自己的IronPython远程处理和执行之前做一些addl研究。
    • 首先,查看PowerShell,特别是powershell托管功能(通过RunSpace)。您可以将PowerShell代码发送到客户端,并将您的WCF客户端拥有run it in a powershell RunSpace。此外,前一段时间的RemoteRunSpace thing可能很有趣。不确定Powershell v2是否内置了它。如果有,它可能对你有用。
    • StockTrader中的ConfigService执行app-settings更新,但不执行“运行任意代码”。 ConfigService的源和arch doc可用。
  2. 如果您选择“运行任何代码”路径,请务必在系统中添加一个大红色重置按钮,以防您的某个脚本无法完全按预期执行,并导致1000个远程信息亭正在运行与外界隔绝。