如何将 C# 套接字服务器应用部署到 Azure VM 中?这真的是一个好主意吗?



我有一个想法,正在尝试将数据从Netduino上传到Azure VM中托管的SQL DB。在与 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("", string.Empty));
            m_clientSocket.Send(Encoding.UTF8.GetBytes(lastRead));
        }
    }
}    

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

足够硬的哈希和加密层应该足够安全,前提是客户知道您的公钥的指纹,因为证书颁发机构可能会受到损害。

最新更新