0

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 ライブラリとの実行可能な接続を作成する方法です。

よろしくお願いします

4

1 に答える 1

0

ダイヤルイン時に取得する GPRS 接続のネットワーク インターフェイスが、正しい DNS サーバーで構成されていないようです。または、サービス呼び出しに必要なドメイン名が間違っている可能性があります。

これを確認するには:

ドメイン名が解決できない特定のWebサービスだけですか?いつも同じですか?他の人は働いていますか?接続が確立された後、プログラムでhttp://stackoverflow.comのような HTTP GET を実行できますか?

于 2011-01-31T19:36:20.773 に答える