在Windows Azure上部署Web Socket服务器

时间:2013-02-13 09:04:50

标签: azure asp.net-mvc-4 websocket

我创建了一个在本地运行的简单Web应用程序,并使用了我使用Alchemy Web Sockets实现的简单Web套接字服务器。现在我需要将此应用程序部署到Windows Azure。

目前,该解决方案由MVC4网站和Web套接字服务器的控制台应用程序组成。我的问题是如何将我当前的解决方案部署到Windows Azure?甚至可以将Azure用作控制台应用程序吗?

根据我在Azure网站上看到的内容,我可以将MVC4网站部署为Azure网站,并将控制台应用程序(服务器)部署在虚拟机或云服务上。在我看来,云服务更有意义(因为基础设施由微软管理,我对此不感兴趣),但我对这些技术完全陌生,所以我不确定哪种方法最好/如果是甚至可能。

修改

我已经将Web套接字服务器控制台应用程序实现为Sandrino建议的Web角色的一部分。但是,在加载连接到服务器的页面时,我在chrome调试器Unexpected response code: 200中收到以下错误。

除了我使用@HttpContext.Current.Request.ServerVariables["HTTP_HOST"]连接到客户端服务器之外,我已经保留了相同的一切,因为Azure中将使用不同的服务器,我在本地应用程序中尝试了这一点并且它有效。我还没有部署到Azure但我在本地测试,也许服务器实际上没有运行,我该如何检查?使用断点似乎正在输入启动服务器的必要方法。

1 个答案:

答案 0 :(得分:0)

我建议您从控制台应用程序中获取代码并将其移至Cloud Service的WebRole.cs。此文件是您的实例的入口点,这意味着您的代码将在实例启动时运行。这将允许您以相同的角色与ASP.NET MVC应用程序一起运行WebSocket服务器。

因此,在Visual Studio中,您需要创建一个新的Cloud Service并选择一个MVC4 Web角色。

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();
    }
}