如何将 C# 套接字服务器应用部署到 Azure VM 中?这真的是一个好主意吗?
本文关键字:真的 好主意 一个 套接字 服务器 应用 VM Azure 部署 | 更新日期: 2023-09-27 18:36:29
我有一个想法,正在尝试将数据从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("'0", string.Empty));
m_clientSocket.Send(Encoding.UTF8.GetBytes(lastRead));
}
}
}
是否已在 https://manage.windowsazure.com/上检查过 VM 的终结点设置?在那里添加规则应该允许任何人连接到<vm-dns-name>.cloudapp.net:<public-port>
。这是 DNS 名称,而不是 VM 名称。我的 Meteor 应用程序不需要直接服务器返回功能。
足够硬的哈希和加密层应该足够安全,前提是客户知道您的公钥的指纹,因为证书颁发机构可能会受到损害。