C# Can';t在Windows Server 2012 R2中使用DotRas拨号

C# Can';t在Windows Server 2012 R2中使用DotRas拨号,c#,.net,pinvoke,ras,C#,.net,Pinvoke,Ras,我对多特拉斯一无所知,所以请耐心点。。我有一个配置了“路由和远程访问”的windows server 2012 R2。在这个简单的配置中,有一个拨号连接到vpn,如第一张图所示 因此,如果我单击“连接…”。。一切正常,网络接口的状态从断开连接变为已连接。 转到事件查看器我得到的是: 来自RASCLIENT源日志的事件: 事件1: CoId={A52088DC-5358-44D6-8B77-DA49516C3FBD}: The user SYSTEM has started dialing a

我对多特拉斯一无所知,所以请耐心点。。我有一个配置了“路由和远程访问”的windows server 2012 R2。在这个简单的配置中,有一个拨号连接到vpn,如第一张图所示

因此,如果我单击“连接…”。。一切正常,网络接口的状态从断开连接变为已连接。 转到事件查看器我得到的是:

来自RASCLIENT源日志的事件:

事件1:

CoId={A52088DC-5358-44D6-8B77-DA49516C3FBD}: The user SYSTEM has started dialing a VPN connection using a all-user connection profile named VpnAtlanta02. The connection settings are: 
Dial-in User = c******s
VpnStrategy = PPTP
DataEncryption = Require
PrerequisiteEntry = 
AutoLogon = No
UseRasCredentials = Yes
Authentication Type = MS-CHAPv2 
Ipv4DefaultGateway = No
Ipv4AddressAssignment = By Server
Ipv4DNSServerAssignment = By Server
Ipv6DefaultGateway = Yes
Ipv6AddressAssignment = By Server
Ipv6DNSServerAssignment = By Server
IpDnsFlags = 
IpNBTEnabled = No
UseFlags = Private Connection
ConnectOnWinlogon = No.
事件2:

CoId={A52088DC-5358-44D6-8B77-DA49516C3FBD}: The user SYSTEM is trying to establish a link to the Remote Access Server for the connection named VpnAtlanta02 using the following device: 
Server address/Phone Number = ***.***.***.***
Device = WAN Miniport (PPTP)
Port = VPN3-4
MediaType = VPN.
事件3:

CoId={A52088DC-5358-44D6-8B77-DA49516C3FBD}: The user SYSTEM has successfully established a link to the Remote Access Server using the following device: 
Server address/Phone Number = ***.***.***.***
Device = WAN Miniport (PPTP)
Port = VPN3-4
MediaType = VPN.
事件4:

CoId={A52088DC-5358-44D6-8B77-DA49516C3FBD}: The link to the Remote Access Server has been established by user SYSTEM.
活动5:

CoId={A52088DC-5358-44D6-8B77-DA49516C3FBD}: The user SYSTEM has dialed a connection named VpnAtlanta02 to the Remote Access Server which has successfully connected. The connection parameters are:
TunnelIpAddress = 172.20.0.19
TunnelIpv6Address = None
Dial-in User = c******s.
现在。。我的目标是通过windows服务连接

下面是我的代码(基本部分):

到目前为止,不管怎样。。。转到事件查看器查找RasClient事件源,正如预期的那样,我记录了5个事件。1、2、3和4等于手动连接生成的值。遗憾的是,最后(5)个值为:

<强>请考虑,如果你认为在一些错误的凭证或其他…我在没有任何凭证的情况下进行了一次尝试,正如预期的那样,在这种情况下,我无法获得事件4


有什么想法吗?

第一件事!这不是我问题的答案,而是。。。我认为这对任何经历过同样麻烦的人都有帮助

在使用DotRas源代码进行了一系列尝试,甚至尝试了一些调试之后,我没有取得任何进展,而且我不确定这是否真的可以做到。我说过,因为在管理员命令提示符下尝试使用“rasdial”命令,我得到了相同的结果:失败,错误代码720。也就是说,我已经使用powershell获得了解决方案

我一直在寻找3个功能强大的cmdlet

-Get-vpns2s接口 -Connect-VPNS2S接口 -断开连接-VPNS2S接口

所以我只设置了3个简单的方法,现在一切都像一个魅力

public Boolean IsConnected()
{
    Boolean retVal = false;

    using (PowerShell ps = PowerShell.Create())
    {
        ps.AddCommand("Get-VpnS2SInterface");
        ps.AddParameter("Name", "VpnAtlanta02");

        foreach (PSObject result in ps.Invoke())
        {
            retVal = ("" + result.Members["ConnectionState"].Value).ToLower() == "connected";
        }
    }

    return retVal;
}

public void Connect()
{
    using (PowerShell ps = PowerShell.Create())
    {
        ps.AddCommand("Connect-VpnS2SInterface");
        ps.AddParameter("Name", "VpnAtlanta02");
        ps.AddParameter("PassThru");


       foreach (PSObject result in ps.Invoke())
       {
           String destination = "";
           foreach (String s in result.Members["Destination"].Value as String[])
           {
               destination += "{" + s + "}";
           }
           Service1.InfoLog("Destination=" + destination + "\r\n" +
            "ConnectionState=" + result.Members["ConnectionState"].Value + "\r\n");
        }
    }
}

public void Disconnect()
{
    using (PowerShell ps = PowerShell.Create())
    {
        ps.AddCommand("Disconnect-VpnS2SInterface");
        ps.AddParameter("Name", "VpnAtlanta02");
        ps.AddParameter("Force");
        ps.Invoke();

        Service1.InfoLog("Nic: " + "VpnAtlanta02" + " is connected: " + IsConnected());
    }
}

第一件事!这不是我问题的答案,而是。。。我认为这对任何经历过同样麻烦的人都有帮助

在使用DotRas源代码进行了一系列尝试,甚至尝试了一些调试之后,我没有取得任何进展,而且我不确定这是否真的可以做到。我说过,因为在管理员命令提示符下尝试使用“rasdial”命令,我得到了相同的结果:失败,错误代码720。也就是说,我已经使用powershell获得了解决方案

我一直在寻找3个功能强大的cmdlet

-Get-vpns2s接口 -Connect-VPNS2S接口 -断开连接-VPNS2S接口

所以我只设置了3个简单的方法,现在一切都像一个魅力

public Boolean IsConnected()
{
    Boolean retVal = false;

    using (PowerShell ps = PowerShell.Create())
    {
        ps.AddCommand("Get-VpnS2SInterface");
        ps.AddParameter("Name", "VpnAtlanta02");

        foreach (PSObject result in ps.Invoke())
        {
            retVal = ("" + result.Members["ConnectionState"].Value).ToLower() == "connected";
        }
    }

    return retVal;
}

public void Connect()
{
    using (PowerShell ps = PowerShell.Create())
    {
        ps.AddCommand("Connect-VpnS2SInterface");
        ps.AddParameter("Name", "VpnAtlanta02");
        ps.AddParameter("PassThru");


       foreach (PSObject result in ps.Invoke())
       {
           String destination = "";
           foreach (String s in result.Members["Destination"].Value as String[])
           {
               destination += "{" + s + "}";
           }
           Service1.InfoLog("Destination=" + destination + "\r\n" +
            "ConnectionState=" + result.Members["ConnectionState"].Value + "\r\n");
        }
    }
}

public void Disconnect()
{
    using (PowerShell ps = PowerShell.Create())
    {
        ps.AddCommand("Disconnect-VpnS2SInterface");
        ps.AddParameter("Name", "VpnAtlanta02");
        ps.AddParameter("Force");
        ps.Invoke();

        Service1.InfoLog("Nic: " + "VpnAtlanta02" + " is connected: " + IsConnected());
    }
}
public Boolean IsConnected()
{
    Boolean retVal = false;

    using (PowerShell ps = PowerShell.Create())
    {
        ps.AddCommand("Get-VpnS2SInterface");
        ps.AddParameter("Name", "VpnAtlanta02");

        foreach (PSObject result in ps.Invoke())
        {
            retVal = ("" + result.Members["ConnectionState"].Value).ToLower() == "connected";
        }
    }

    return retVal;
}

public void Connect()
{
    using (PowerShell ps = PowerShell.Create())
    {
        ps.AddCommand("Connect-VpnS2SInterface");
        ps.AddParameter("Name", "VpnAtlanta02");
        ps.AddParameter("PassThru");


       foreach (PSObject result in ps.Invoke())
       {
           String destination = "";
           foreach (String s in result.Members["Destination"].Value as String[])
           {
               destination += "{" + s + "}";
           }
           Service1.InfoLog("Destination=" + destination + "\r\n" +
            "ConnectionState=" + result.Members["ConnectionState"].Value + "\r\n");
        }
    }
}

public void Disconnect()
{
    using (PowerShell ps = PowerShell.Create())
    {
        ps.AddCommand("Disconnect-VpnS2SInterface");
        ps.AddParameter("Name", "VpnAtlanta02");
        ps.AddParameter("Force");
        ps.Invoke();

        Service1.InfoLog("Nic: " + "VpnAtlanta02" + " is connected: " + IsConnected());
    }
}