C#如何从Azure App Services RDP连接到本地Windows Server?

时间:2019-11-05 15:07:54

标签: azure wmi azure-web-app-service remote-desktop

我在azure应用程序服务中托管了一个Asp.net核心Web API。我的Web API应该连接到一台或多台Premise Windows服务器上以创建DNS记录。 Windows服务器正在运行DNS服务。我正在使用System.Management连接到本地Windows服务器。

但是,我无法从azure应用程序服务连接到远程服务器。我肯定相信我缺少某种配置,但是我不知道。

这是我的代码:

using System.Management;

public static ManagementScope ConnectDNSServer(string dnsServerName, PCSCredential useMyInfo)
{
    ConnectionOptions options = new ConnectionOptions
    {
        Username = useMyInfo.WindowsDomain + "\\" + useMyInfo.UserName,
        Password = useMyInfo.PassString
    };

    try
    {
        ManagementScope scope = new ManagementScope(@"\\" + dnsServerName + "\\root\\MicrosoftDNS", options);
        scope.Connect();
        return scope;
    }
    catch
    {
        //ManagementScope scopeEx = new ManagementScope();                
    }
    return null;
}

我收到此错误:

System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)

1 个答案:

答案 0 :(得分:0)

在Azure App Service上-无论地址如何,应用程序都无法使用端口445、137、138和139连接到任何地方。换句话说,即使连接到非私有IP地址或虚拟网络的地址,不允许连接到端口445、137、138和139。

其他信息,标准/本机Azure Web Apps在称为沙箱的安全环境中运行。每个应用程序都在其自己的沙箱中运行,从而将其执行与同一台计算机上的其他实例隔离开来,并提供其他程度的安全性和隐私性,否则这些安全性和隐私性将是不可用的。因此,这似乎是由于沙箱所致。

在这种环境中,可以通过Internet访问应用程序的唯一方法是通过已经公开的HTTP(80)和HTTPS(443)TCP端口;否则,不能通过Internet访问应用程序。应用程序可能不会在其他端口上侦听来自Internet的数据包。 尝试连接到本地地址(例如localhost,127.0.0.1)和计算机自己的IP将失败,除非同一沙箱中的另一个进程在目标端口上创建了侦听套接字: https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox#network-endpoint-listening