通过混合连接从客户端连接到Azure Web作业

时间:2018-02-11 21:39:10

标签: c# azure azure-web-sites azure-webjobs azure-hybrid-connections

我有一个内部服务器(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);

我想知道是否有人知道如何实现我的目标,或者我是否以错误的方式解决问题。

1 个答案:

答案 0 :(得分:2)

Azure Web App的网络访问存在多种限制。

通过互联网访问应用程序的唯一方法是通过已经公开的 HTTP(80)和HTTPs(443)TCP端口,应用程序可能无法在其他端口上侦听来自的数据包互联网。

但是,应用程序可能会创建一个可以侦听沙箱内连接的套接字。例如,同一app中的两个进程可以通过TCP套接字相互通信; 从沙箱外部传入的连接尝试虽然位于同一台计算机上,但会失败。

有关详细信息,请参阅此article