如何解决如何使用websocket在Azure应用服务Web应用和本地控制台应用之间建立连接?
我有一个REST API Web App作为应用程序服务部署在Azure中,可以成功地从设备上的控制台应用程序发出请求。我的目标是从通过控制台端的HttpClient来回传递JSON到通过Web套接字在两者之间建立连接。
当前,我具有以下功能,该功能在启动时在我的App Service中被调用。
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,requestBuffer.Length);
string msg = Encoding.ASCII.GetString(requestBuffer,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,buffer.Length);
}
}
} catch (Exception ex) { Console.WriteLine(ex.Message + ex.StackTrace); }
}
供参考,I used the format found here as my guide.
我已经确保在我的App Service的配置中将Web套接字设置为“ on”。除此之外,到目前为止,我还不知道需要进行任何更改。
我的问题是在实际尝试在服务器端调用函数时出现的。在侦听器参数中使用IpAddress.Any时,出现10013错误(权限被拒绝)。更改端口有时会将错误更改为10048(已使用)。当我用入站IP替换IpAddress.Any时,我的错误变为10049(无法分配所请求的地址。所请求的地址在其上下文中无效)。 Error code references here
如果我理解正确,Azure App Service只能接受端口80和443上的入站流量,在我的情况下,这两个都不起作用。我在使用这些技术方面经验不足,因此欢迎您提供任何见识。
此外,由于我的当前执行仅在此处停止,因此我只能调试到代码中的listener.Start()行。因此,如果在随后的代码中有明显的地方跳出来,请随时指出。
解决方法
您最好使用ngrok之类的工具,该工具将充当代理并将数据发送到本地开发站。
例如:
将数据发送到ngrok /它将路由到您的本地主机
,请在中间使用某些东西,使用Web套接字时建议的方法是使用SignalR。 Azure SignalR是一项平台服务,使用Web套接字或REST或其他协议,您可以做到这一点,它将具有可伸缩性,并且不会因不使用太多请求而关闭您的App Service。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。