我需要在具有 windows ce 6 的 PDA 中创建 GPRS 连接。现在通常我不得不使用制造商的 dll 来创建它,但他们说他们使用 ras 来完成这个。使用它的唯一问题是我在 .net c# 中编程,而该库是非托管代码库。
幸运的是,我来到了 opennetcf ras 库,它已经为 windows ras 库做了必要的 pInvokes,唯一的问题是糟糕的文档。
然后我创建了一个库,可以在 Windows 上调用和设置必要的 GPRS 连接。我正在使用使用以下定义的葡萄牙电信运营商:
Operator Name: Optimus P
Apn: umts
Password: *******
User: ******
咨询 gsm 模块定义,我有以下调制解调器设置:
Connection Name: GPRS
Device: Hayes Compatible on COM1:
Baund Rate:115200
Data Bits: 8
Parity:1
Stop Bits: 1
Flow Control: Hardware
当然还有额外的设置(或者我如何称它为 atCall)
+cgdcont=1, "ip", "umts"
当我使用控制面板并与该配置文件进行连接时,此设置会连接,并且我可以毫无错误地调用所有 Web 服务。它还显示了调制解调器的额外配置文件,其中显示了设备的设置,包括 IP 地址、子网掩码甚至默认网关。
问题是,当我使用我创建的库以编程方式创建 gprs 连接,然后在某个时候调用 web 服务时,它会抛出一个 web 异常:无法解析远程名称。我也检查了,没有出现额外的图标,但是如果我看到 GPRS 状态,它会在连接时出现。
创建、销毁和查询是否存在连接的代码如下:
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using OpenNETCF.Net;
using OpenNETCF.Diagnostics;
namespace gsmAdapterNet
{
/// <summary>
/// GPRS Connection class
/// </summary>
public class GPRS
{
private static string connectionName = "GPRS";
/// <summary>
/// Connects the GPRS.
/// </summary>
/// <returns></returns>
public static bool ConnectGPRS()
{
//precisamos de obter as connecoes e ligar
RasEntryCollection connecoesPossiveis = Ras.Entries;
RasEntry _currentEntry = connecoesPossiveis[connectionName];
_currentEntry.RasStatus += new RasNotificationHandler(RasStatusHandler);
RasError resultado = _currentEntry.Dial(false);
if (resultado == RasError.Success)
return true;
else
return false;
}
static void RasStatusHandler(int hConn, RasConnState State, RasError ErrorCode)
{
Logger.WriteLine("");
Logger.WriteLine("RAS STATUS: " + ErrorCode.ToString() + " , State: " + State.ToString());
}
/// <summary>
/// Disconnects the GPRS.
/// </summary>
/// <returns></returns>
public static void DisconnectGPRS()
{
RasEntryCollection entradas = Ras.Entries;
foreach (RasEntry possivelEntrada in entradas)
{
if (possivelEntrada.Name == connectionName)
{
possivelEntrada.Hangup();
}
}
}
/// <summary>
/// Determines whether this instance is connected.
/// </summary>
/// <returns>
/// <c>true</c> if this instance is connected; otherwise, <c>false</c>.
/// </returns>
public static bool isConnected()
{
RasConnection[] conecoes = Ras.ActiveConnections;
foreach (RasConnection conecao in conecoes)
{
if (conecao.Name == connectionName)
return true;
}
return false;
}
/// <summary>
/// Dumps the ras entries.
/// </summary>
public static void DumpRasEntries()
{
foreach (RasEntry entry in Ras.Entries)
{
Logger.DumpRasEntry(entry);
}
}
}
}
所以恢复问题是我如何创建与 opennetcf ras 库的可行连接
最好的问候