如何将C#Socket Server应用程序部署到Azure VM中?这真的是个好主意吗?

时间:2015-01-06 12:25:14

标签: c# sockets azure virtual-machine

我有一个想法,我正在尝试将数据从Netduino上传到Azure VM中托管的SQL数据库。在与WCF挣扎之后,我刚刚在C#中编写了一个简单的应用程序,通过套接字(下面的代码)处理请求,并在我的机器/ LAN上完成工作。因为我还不太了解

Azure VM,如何以客户端应用程序成功到达服务器部分的方式向外界公开IP /端口? 目前,我无法让Azure VM收听外部世界。我创建了一个端点(名称,TCP协议,相同的公共和私有端口,并检查'启用直接服务器返回'。要尝试它,我关闭防火墙并尝试从外部,无济于事。

该端口上的侦听器是否可以被视为安全解决方案?

为了简单起见,我想到了套接字,但这真的是一个好主意吗?你们会做些不同的事情并且仍然保持简单吗?

...
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 3211);
server.Bind(localEndPoint);
server.Listen(Int32.MaxValue);
while (true)
{
    Socket clientSocket = server.Accept();
    new ProcessClientRequest(clientSocket);
}
...


public ProcessClientRequest(Socket clientSocket)
{
    m_clientSocket = clientSocket;
    new Thread(ProcessRequest).Start();
}

private void ProcessRequest()
{
    const Int32 c_microsecondsPerSecond = 1000000;
    using (m_clientSocket)
    {
        Byte[] buffer = new Byte[1024];
        string lastRead;
        if (m_clientSocket.Poll(5 * c_microsecondsPerSecond, SelectMode.SelectRead))
        {
            if (m_clientSocket.Available == 0)
                 return;
            Int32 bytesRead = m_clientSocket.Receive(buffer, m_clientSocket.Available, SocketFlags.None);
            // Return a key to the client.
            lastRead = WriteDataToDB(System.Text.Encoding.UTF8.GetString(buffer).Replace("\0", string.Empty));
            m_clientSocket.Send(Encoding.UTF8.GetBytes(lastRead));
        }
    }
}    

1 个答案:

答案 0 :(得分:0)

您是否在https://manage.windowsazure.com/上检查了VM的端点设置?添加规则应允许任何人连接到<vm-dns-name>.cloudapp.net:<public-port>。 这是DNS名称,而不是VM名称。我的Meteor应用程序不需要直接服务器返回功能。

足够硬的哈希和加密层应该足够安全,前提是客户知道您的公钥fingerprint,因为Certificate Authorities can be compromised