我在 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() 行之前进行调试,因为我当前的执行在那里停止。因此,如果在后面的代码中有任何明显的跳出,请随时指出。