0

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

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

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

作为参考,我使用此处找到的格式作为我的指南。

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

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

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

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

4

2 回答 2

0

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

例如:

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

于 2020-08-19T18:26:49.920 回答
0

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

于 2020-08-22T15:42:29.703 回答