Создание постоянного соединения RAS с opennetcf Ras в Windows CE 6.0

Мне нужно создать GPRS-соединение в КПК с Windows CE 6. Теперь обычно мне приходилось использовать dll производителя, чтобы создать это, но они сказали, что используют ras для этого. Единственная проблема с этим заключается в том, что я программирую на .net С#, а библиотека представляет собой неуправляемый код.

К счастью, я нашел библиотеку opennetcf ras, которая уже выполняет необходимые pInvokes для библиотеки Windows ras, единственная проблема заключается в плохой документации.

Я создал тогда библиотеку, которая бы звонила и настраивала нужное GPRS-соединение на windows. Я использую португальского оператора связи, который использует следующие определения:

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"

Эти настройки, когда я использую панель управления и подключаюсь к этому профилю, подключается, и я могу вызывать все веб-сервисы без ошибки. Он также показывает дополнительный профиль для модема, который показывает настройки устройства, включая IP-адрес, маску подсети и даже шлюз по умолчанию.

Проблема в том, что когда я использую созданную мной библиотеку для программного создания соединения gprs, а затем в какой-то момент вызываю веб-сервисы, это выдает мне веб-исключение: удаленное имя не может быть разрешено. Я также проверил, и дополнительный значок не появляется, но если я вижу статус 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

С наилучшими пожеланиями


person Sorcerer86pt    schedule 31.01.2011    source источник


Ответы (1)


Похоже, что сетевой интерфейс для GPRS-соединения, который вы получаете при наборе номера, не настроен с правильными DNS-серверами. Кроме того, доменные имена, необходимые для ваших обращений в службу поддержки, могут быть неправильными.

Чтобы убедиться в этом:

Это только конкретная веб-служба, чье доменное имя не может быть разрешено? Всегда ли это одно и то же? Другие работают? Можете ли вы просто HTTP GET что-то вроде http://stackoverflow.com программно после того, как соединение было установлено?

person Arne    schedule 31.01.2011
comment
Доменные имена верны, так как я могу выполнить HTTP GET для www.google.com и получить страницу, а также, если я устанавливаю соединение с помощью панели управления, моя программа работает как шарм. Это происходит только тогда, когда я программно подключаюсь. - person Sorcerer86pt; 01.02.2011