如何使用 websockets 在我的 Azure 应用服务 Web 应用和本地控制台应用之间建立连接?

How do I establish a connection between my Azure App Service Web App and local console app using websockets?

我在 Azure 中部署了一个 REST API Web 应用程序作为应用程序服务,我可以从我设备上的控制台应用程序成功地向其发出请求。我的目标是从通过控制台端的 HttpClient 来回传递 JSON 过渡到通过网络套接字在两者之间建立连接。

目前,我的应用服务启动时会调用以下函数。

public static void StartListening()
{
    try
    {
        TcpListener listener = new TcpListener(IPAddress.Any, 80);

        listener.Start();

        using (TcpClient client = listener.AcceptTcpClient())
        {
            using (Stream stream = client.GetStream())
            {
                byte[] requestBuffer = new byte[100];
                int size = stream.Read(requestBuffer, 0, requestBuffer.Length);
                string msg = Encoding.ASCII.GetString(requestBuffer, 0, size);
            }
        }
    } catch (Exception ex) { /* handle exception here */ }
}

在我的控制台应用程序中:

static void StartConnection(string msg)
{
    try
    {
        Console.WriteLine("Accessing tcp");
        byte[] buffer = Encoding.ASCII.GetBytes(msg);

        using (TcpClient client = new TcpClient("hostname here", 80))
        {
            using (Stream stream = client.GetStream())
            {
                stream.Write(buffer, 0, buffer.Length);
            }
        }
    } catch (Exception ex) { Console.WriteLine(ex.Message + ex.StackTrace); }
}

供参考,I used the format found here as my guide.

我已确保在我的应用服务配置中将 Web 套接字设置为“打开”。除此之外,我不知道到目前为止我需要做任何改变。

我的问题是在实际尝试在服务器端调用函数时出现的。在我的侦听器参数中使用 IpAddress.Any,我收到 10013 错误(权限被拒绝)。更改端口有时会将错误更改为 10048(已使用)。当我用入站 IP 替换 IpAddress.Any 时,我的错误更改为 10049(无法分配请求的地址。请求的地址在其上下文中无效)。 Error code references here

如果我理解正确,Azure App Service 只能接受端口 80 和 443 上的入站流量,这两个端口都不适用于我的情况。我没有太多使用这些技术的经验,所以欢迎任何见解。

此外,我只能调试到代码中的 listener.Start() 行,因为我当前的执行停在那里。因此,如果后面的代码中有任何明显的跳出,请随时指出。

您最好使用像 ngrok 这样的工具,它可以充当代理并将数据发送到您本地的开发站。

例如:

将数据发送到 ngrok / 它将路由到您的本地主机

请在中间使用一些东西,当使用网络套接字时,推荐的方法是使用 SignalR。 Azure SignalR 是一种平台服务,使用 Web 套接字或 REST 或其他协议你可以做到这一点,它将是可扩展的,并且不会因为不使用太多请求而降低你的应用程序服务。