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

Connect To Azure Web Job from Client over Hybrid Connection

我有一个本地服务器 (mockhospital1),并且在应用服务计划中有一个 Azure Web 应用。

我已经创建了从这个 Azure Web 应用程序到 link 服务器 A 的混合连接,我在服务器 A 上下载了 HCM 并在那里添加了连接(一切正常)。

我能够在 mockhospital1 上打开监听器套接字(使用 c# 控制台应用程序):

        Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        listener.Bind(new IPEndPoint(IPAddress.Any, 2113));
        listener.Listen(100);

然后我在我的 Azure Web 应用程序中创建了一个网络作业,它通过 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);

我想知道是否有人知道我如何才能实现我想要做的事情,或者我是否以错误的方式解决了这个问题。

从 Azure Web 应用程序进行网络访问方面存在多种限制。

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

但是,应用程序可以创建一个套接字来侦听沙箱内的连接。例如,同一个应用程序中的两个进程可以通过 TCP 套接字相互通信; 从沙箱外部传入的连接尝试,即使它们在同一台机器上,也会失败。

更多细节,你可以参考这篇article