2013-02-13 3 views
0

Я создал простое веб-приложение, которое выполняется локально и использует простой сервер веб-сокетов, который я реализовал с помощью Alchemy Web Sockets. Теперь мне нужно развернуть это приложение в Windows Azure.Развертывание сервера веб-Socket на Windows Azure

В настоящее время решение составлено из веб-сайта MVC4 и консольного приложения для сервера веб-сокетов. Мой вопрос: как я смогу применить текущее решение для Windows Azure? Возможно ли использовать Azure для консольного приложения?

Из того, что я видел на веб-сайте Azure, я могу развернуть сайт MVC4 как сайт Azure и консольное приложение (сервер) на виртуальной машине или облачном сервисе. Мне кажется, что облачная служба имеет больше смысла (поскольку инфраструктура управляется Microsoft, и меня это не интересует), но я совершенно не знаком с этими технологиями, поэтому я не уверен, что это лучший подход/если это даже возможно.

EDIT:

Я реализовал веб-сокетов консоли сервера приложений как часть веб-роли, как было предложено Сандрино. Однако при загрузке страницы, которая подключается к серверу, я получаю следующую ошибку в хром-отладчике Unexpected response code: 200.

Я оставил все то же самое, за исключением того, что я использую @HttpContext.Current.Request.ServerVariables["HTTP_HOST"] для подключения к серверу на стороне клиента, так как в Azure будут использоваться разные серверы, я пробовал это в локальном приложении, и это сработало. Я до сих пор не развернулся в Azure, но тестирую локально, возможно, сервер не работает, как я могу проверить это? Используя точки останова, кажется, что вводятся необходимые методы для запуска сервера.

+0

Я сожалею, чтобы ткнуть на вопрос, который был давно мертв, но я использую Alchemy WebSockets, и я не могу получить его на любом Compute эмуляторе или на самой Azure. Я добавил конечную точку TCP для порта 81, если это помогает, поэтому ваш код должен работать нормально, но когда я пытаюсь выполнить эхо-тест (http://www.websocket.org/echo.html) по адресу ws: // hostname .cloudapp.net: 81/это не выход ... Любая идея? Я потратил довольно много времени на это :( – matt

ответ

0

Предлагаю вам взять код из консольного приложения и перенести его в WebRole.cs вашего облачного сервиса. Этот файл является точкой входа вашего экземпляра, означающей, что ваш код будет запущен при запуске экземпляра. Это позволит вам запустить сервер WebSocket вместе с вашим приложением ASP.NET MVC в той же роли.

Итак, в Visual Studio вам необходимо создать новую облачную службу и выбрать веб-роль MVC4.

public class WebRole : RoleEntryPoint 
{ 
    public override bool OnStart() 
    { 
     Task.Factory.StartNew(OnStartWebSocketServer, TaskCreationOptions.LongRunning); 
     return base.OnStart(); 
    } 

    private void OnStartWebSocketServer() 
    { 
     var aServer = new WebSocketServer(81, IPAddress.Any) 
     { 
      OnReceive = OnReceive, 
      OnSend = OnSend, 
      OnConnect = OnConnect, 
      OnConnected = OnConnected, 
      OnDisconnect = OnDisconnect, 
      TimeOut = new TimeSpan(0, 5, 0) 
     }; 
     aServer.Start(); 
    } 
} 
+0

Благодарим за помощь! NB Чтобы заставить ее работать, вы также должны добавить конечную точку для сервера веб-сокетов в ServiceDefinition.csdef. Конечная точка должна быть из тип ввода и протокол TCP – Matt

Смежные вопросы