1

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

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

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

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

然后我在我的 Azure Web 应用程序中创建了一个 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);

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

4

1 回答 1

2

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

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

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

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

于 2018-02-12T08:44:08.540 回答