Windows ce 6 を搭載した PDA で GPRS 接続を作成する必要があります。通常は製造元の dll を使用して作成する必要がありますが、これを行うには ras を使用するとのことでした。それを使用する唯一の問題は、.net c# でプログラムし、ライブラリがアンマネージ コードであることです。
幸いなことに、Windows ras ライブラリに必要な pInvokes を既に実行している opennetcf ras ライブラリにたどり着きました。唯一の問題はドキュメントが貧弱であることです。
次に、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 ライブラリとの実行可能な接続を作成する方法です。
よろしくお願いします