В системе киосков, которую я настраиваю, все киоски связываются с центральным сервером для регистрации и получения команд обновления. Я не использую связь Dual Http, потому что не могу гарантировать, какие порты будут разрешены на клиентском сайте, поэтому связь всегда инициируется из киоска (клиента). В настоящее время у меня есть контракт на обновление, который возвращает перечисление с именем KioskAction, которое представляет все команды, которые может выполнять киоск (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 скомпрометирована, все киоски также могут быть. Есть ли какие-то другие вещи, на которые мне нужно обратить внимание, или я должен принять это во внимание, прежде чем двигаться в этом направлении?