Pregunta

Necesito crear una conexión GPRS en un PDA que tenga Windows CE 6. Ahora normalmente tenía que usar la DLL del fabricante para crear eso, pero dijeron que usan RAS para lograr esto. El único problema de usar eso es que programa en .NET C#, y la biblioteca es un código no administrado.

Afortunadamente, vine por la biblioteca RAS OpenNetCF que ya hace los PinVokes necesarios para la Biblioteca Windows RAS, el único problema es la mala documentación.

Luego creé una biblioteca que llamaría y configuraría la conexión GPRS necesaria en Windows. Estoy usando un operador de telecomunicaciones portugués que utiliza las siguientes definiciones:

Operator Name: Optimus P
Apn:  umts
Password: *******
User: ******

Consultando la definición del módulo GSM, tenía la siguiente configuración del módem:

Connection Name: GPRS
Device: Hayes Compatible on COM1:
Baund Rate:115200
Data Bits: 8
Parity:1
Stop Bits: 1
Flow Control: Hardware

y, por supuesto, la configuración adicional (o cómo lo llamo el Atcall)

+cgdcont=1, "ip", "umts"

Esta configuración cuando uso el panel de control y hago una conexión con ese perfil, se conecta y puedo llamar a todos los servicios web sin un error. También muestra un perfil adicional para el módem que muestra la configuración para el dispositivo, incluye el iPaddress, la máscara de subred e incluso la puerta de enlace predeterminada.

El problema es que cuando uso la biblioteca que creé para crear una conexión GPRS de manera programada, y luego llamo a los servicios web en algún momento me arroja una excepción web: el nombre remoto no se pudo resolver. También verifiqué y el icono adicional no aparece, pero si veo el estado GPRS, aparece como está conectado.

El código que crea, destruye y consulta si existe una conexión es el siguiente:

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);
        }
    }

}

}

Por lo tanto, reanudar la pregunta es cómo puedo crear una conexión viable con la biblioteca RAS OpenNetCF

Mejores saludos

¿Fue útil?

Solución

Parece que la interfaz de red para la conexión GPRS que obtiene al marcar no está configurada con los servidores DNS correctos. Alternativamente, los nombres de dominio necesarios para sus llamadas de servicio pueden ser incorrectos.

Para verificar esto:

¿Es solo un servicio web específico cuyo nombre de dominio no se puede resolver? ¿Siempre es lo mismo? ¿Otran otros? ¿Puedes simplemente http obtener algo como http://stackoverflow.com programáticamente después de que se haya establecido la conexión?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top