Лазурный и нативный код - PullRequest
1 голос
/ 30 мая 2010

Похоже, вы можете разместить собственный код в Azure: http://msdn.microsoft.com/en-us/library/dd573362.aspx. Можно ли здесь запустить сервер сокетов (прослушивание tcp / udp)? И даже хостинг CLR сверху?

1 Ответ

2 голосов
/ 30 мая 2010

Сервер сокетов легко запустить на рабочей роли, но только по протоколу tcp, а не по протоколу udp. Вы можете запустить собственный процесс с помощью метода OnStart () рабочей роли. Вы можете сделать это и с помощью метода Run (), но как только вы попадете в состояние выполнения, ваша роль будет видна балансировщиком нагрузки и внешним миром, поэтому вы можете получить tcp трафик до запуска вашего сокет-сервера.

Вам потребуется создать конечную точку tcp в конфигурации рабочей роли (щелкните правой кнопкой мыши рабочую роль и просмотрите свойства):

alt text

Указанный вами номер порта предназначен для внешнего мира. Балансировщик нагрузки предоставит каждому экземпляру вашей роли уникальный порт, к которому будет привязан ваш код. Например, представьте, что ваш 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!");
...