在Windows Mobile设备上,连接管理器是一个关键的组件,它负责集中管理和自动化建立多种类型的网络连接。这些连接可以是针对互联网或企业网络的连接。当一个或多个应用程序请求连接时,连接管理器会选择最佳的连接类型,并通知所有应用程序连接已经激活。应用程序需要配置连接名称和网络名称。
连接管理器跟踪应用程序正在使用或请求的连接。它关闭未使用的连接,自动断开空闲一定时间的连接,并关闭低优先级的连接以打开高优先级的连接。例如,语音连接通常比数据连接具有更高的优先级。
连接管理器能够处理多种不同类型的连接,包括点对点协议(PPP)、远程访问服务(RAS)和点对点隧道协议(PPTP)连接。它还可以配置代理服务器设置,以允许网络资源通过防火墙或无线应用协议(WAP)网关。
这个应用程序块由微软的模式与实践小组提供。它允许应用程序从移动设备检索连接信息并监控连接状态的变化。
连接管理器API包含大约11个函数,但通常只需要两个函数来了解连接状态。
这个应用程序块提供了托管API,用于从移动设备建立或释放连接。它弥补了托管代码中的空白,使用户能够管理自己的连接。
连接管理器API包含大约11个函数,但通常只需要六个函数来建立和释放网络连接。在许多情况下,应用程序可能只需要两个函数。
CMConsole是示例代码,展示了用户如何使用连接监视器和连接管理器应用程序块。这部分连接监视器示例由微软模式与实践小组提供,并已增强,以展示如何使用连接管理器应用程序块建立连接。
控制台屏幕显示了在app.config中定义的不同连接:蜂窝连接、NIC连接和桌面连接。
public ConsoleForm()
{
    InitializeComponent();
    monitor = ConnectionMonitorFactory.CreateFromConfiguration();
    monitor.ActiveNetworkChanged += NetworkChangeHandler;
}
    
ConnectionMonitorFactory.CreateFromConfiguration()返回一个ConnectionMonitor对象,该对象跟踪配置文件中指定的各种连接的状态。
private void mnuConnect_Click(object sender, EventArgs e)
{
    const int CONNMONITOR_STATUS_CONNECTED = 0x10;
    ConnectionMonitorNativeHelper.CONNMONITOR_CONNECTION_DETAILED_STATUS cnStatus = 
        cnList[lstConnection.SelectedIndex];
    if (_connectionHandle != IntPtr.Zero)
    {
        ConnMgrReleaseConnection(_connectionHandle, 0);
        _connectionHandle = IntPtr.Zero;
    }
    if (cnStatus.dwConnectionStatus != CONNMONITOR_STATUS_CONNECTED)
    {
        ConnMgrStatus status = ConnMgrStatus.Unknown;
        Guid forceConnGuid = new Guid();
        if (ConnMgrMapConRef(ConnMgrConRefTypeEnum.ConRefType_NAP, 
                cnStatus.pszDescription,
                ref forceConnGuid) != 0)
        {
            ConnMgrMapConRef(ConnMgrConRefTypeEnum.ConRefType_PROXY, 
                cnStatus.pszDescription,
                ref forceConnGuid);
        }
        ConnMgrConnectionInfo info = new ConnMgrConnectionInfo(forceConnGuid, 
            ConnMgrPriority.HighPriorityBackground);
        ConnMgrEstablishConnectionSync(info,
            ref _connectionHandle, 
            _syncConnectTimeout,
            ref status);
        if (status == ConnMgrStatus.Connected)
            MessageBox.Show("Connect Succeeded");
        else
            MessageBox.Show("Connect failed: " + status.ToString());
    }
}