Вы можете использовать WMI service, чтобы начать процесс на удаленных компьютерах. Вы создадите exe в общий каталог, который отображается на удаленном компьютере, а затем используйте WMI на удаленном компьютере для запуска exe.
Есть много примеров из того, чтобы сделать это, но, чтобы проиллюстрировать, простой метод, который не предполагает каких-либо осложнений аутентификации является использование файла сценария .VBS:
strComputer = "acomputer"
strCommandLine = "calc.exe"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objProcess = objWMIService.Get("Win32_Process")
intReturnValue = objProcess.Create(strCommandLine, , , intPID)
WScript.Echo "Process ID: " & intPID
Вы можете также использовать PsExec from SysInternals для обработки все детали этой работы.
После создания exe в Visual Studio вы можете запустить его на своем локальном компьютере, чтобы убедиться, что он делает то, что вы хотите, а затем, когда вы будете готовы запустить его на удаленных системах, вы можете выполнить пакетный скрипт, подобный выше VBS для запуска exe на удаленных системах.
Вам по-прежнему необходимо предоставить некоторый механизм для разделения рабочей нагрузки, чтобы каждый клиент знал, в какой части проблемы он должен работать.Вы можете предоставить эту информацию в командной строке, используемой для запуска удаленных приложений, в файле конфигурации в каталоге с exe в таблице базы данных или использовать отдельный сервер типа командного и контрольного типов, к которому клиенты подключаются обратно (хотя при таком подходе вы скоро выйдете на сцену, где вам было бы лучше учиться использовать существующее решение, а не сворачивать самостоятельно).
Возможно, вы также захотите включить удаленный переключатель «kill». Вы можете использовать PsKill from SysInternals, или если вы хотите более грациозное завершение работы, что-то простое, как наличие определенного файла в том же каталоге, что и exe, может служить флагом для удаленных процессов, чтобы закрыться.
Вы также можете рассмотреть возможность добавления поддержки клиента CSScript, чтобы удаленные клиентские программы были статическими и загружали и скомпилировали файл CSScript для выполнения этой работы. Это может быть полезно, если вы столкнулись с какой-то трудностью при частом повторном развертывании и перезапуске клиентских программ, или если вам нужно, чтобы они были немного разными (вы можете написать программу для генерации отдельных файлов сценариев для каждого клиента, например).
Я считаю, что его легко распараллеливать. Рабочая нагрузка может быть разделена на отдельные блоки. Кто-то предложил WCF, но потом я считаю, что все еще есть проблема, что мне нужно будет создать * .exe, установить его на каждом сервере, прежде чем я смогу запустить его. Любые изменения, которые мне нужно сделать для этих двух методов, потребуют нового * .exe и повторной установки их на серверах. (Это предполагает, что я ничего не понял) –
Я бы заглянул в Hadoop и HDInsight: http://cloud.dzone.com/articles/hdinsight-writing-hadoop-map – duffymo
Я проверю это, спасибо за ссылку! –