Сервер сокетов легко запустить на рабочей роли, но только по протоколу tcp, а не по протоколу udp. Вы можете запустить собственный процесс с помощью метода OnStart () рабочей роли. Вы можете сделать это и с помощью метода Run (), но как только вы попадете в состояние выполнения, ваша роль будет видна балансировщиком нагрузки и внешним миром, поэтому вы можете получить tcp трафик до запуска вашего сокет-сервера.
Вам потребуется создать конечную точку tcp в конфигурации рабочей роли (щелкните правой кнопкой мыши рабочую роль и просмотрите свойства):
Указанный вами номер порта предназначен для внешнего мира. Балансировщик нагрузки предоставит каждому экземпляру вашей роли уникальный порт, к которому будет привязан ваш код. Например, представьте, что ваш MyApp.exe при запуске принимает параметр --tcpport:
var rootDirectory = Path.Combine(Environment.GetEnvironmentVariable("RoleRoot") + "\\", "approot\\MyApp");
int port = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["MyExternalEndpoint"].IPEndpoint.Port;
var cmdline = String.Format("--tcpport {0}",port);
MyProcess = new Process()
{
StartInfo = new ProcessStartInfo(Path.Combine(rootDirectory, "myapp.exe"), cmdline)
{
UseShellExecute = false,
WorkingDirectory = rootDirectory
}
};
MyProcess.Start();
Тогда в вашем методе Run () просто ждите вечно, зная, что вы никогда не должны выходить:
MyProcess.WaitForExit();
throw new Exception("MyApp quit on me!");