Похоже, что можно разместить собственный код на Azure: http://msdn.microsoft.com/en-us/library/dd573362.aspx. Действительно ли возможно выполнить сервер сокета (слушающий tcp/udp) сюда? И даже размещая CLR на вершине?
Сервер сокетов легко запустить с рабочей ролью, но только 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!");