我有一个内部服务器(mockhospital1),我在应用服务计划中有一个Azure Web App。
我已从此Azure Web App创建了一个混合连接以链接服务器A,我在服务器A上下载了HCM并在那里添加了连接(这一切都正常)。
我可以在mockhospital1上打开一个监听器套接字(使用c#console app):
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(new IPEndPoint(IPAddress.Any, 2113));
listener.Listen(100);
然后,我在Azure Web App中创建了一个webjob,通过HC发送到此套接字:
IPHostEntry ipHost = Dns.Resolve("mockhospital1");
IPAddress ipAddress = ipHost.AddressList[0];
IPEndPoint ipEndpoint = new IPEndPoint(ipAddress, 2113);
Socket sender = new Socket(System.Net.Sockets.AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sender.Connect(ipEndpoint);
这很有效。
现在我尝试以相反的方式连接(启动从mockhospital1发送到Azure)。
我想要实现的是将数据从端口2113上的相同HC从mockhospital1直接发送到我在Azure WebJob中创建的侦听器。我正在努力找到一种方法来做到这一点。我不确定如何设置发送套接字。
这就是我在Azure WebJob上的内容(只需在正确的端口上设置监听器 - 2113):
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(new IPEndPoint(IPAddress.Any, 2113));
listener.Listen(100);
我不知道如何连接到这个以从mockhospital1发送。我已经尝试了以下代码(我想我真的需要知道IP_HOST_NAME应该是什么):
byte[] receivedBytes = new byte[1024];
IPHostEntry ipHost = Dns.Resolve(IP_HOST_NAME);
IPAddress ipAddress = ipHost.AddressList[0];
IPEndPoint ipEndpoint = new IPEndPoint(ipAddress, 2113);
Socket sender = new Socket(System.Net.Sockets.AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sender.Connect(ipEndpoint);
我想知道是否有人知道如何实现我的目标,或者我是否以错误的方式解决问题。
答案 0 :(得分:2)
Azure Web App的网络访问存在多种限制。
通过互联网访问应用程序的唯一方法是通过已经公开的 HTTP(80)和HTTPs(443)TCP端口,应用程序可能无法在其他端口上侦听来自的数据包互联网。
但是,应用程序可能会创建一个可以侦听沙箱内连接的套接字。例如,同一app中的两个进程可以通过TCP套接字相互通信; 从沙箱外部传入的连接尝试虽然位于同一台计算机上,但会失败。
有关详细信息,请参阅此article。