Создание постоянного соединения RAS с opennetcf Ras в Windows CE 6.0
Мне нужно создать GPRS-соединение в КПК с Windows CE 6. Теперь обычно мне нужно было использовать dll производителя для создания этого, но они сказали, что для этого используют ras. Единственная проблема использования этого заключается в том, что я программирую на.net C#, а библиотека представляет собой неуправляемый код.
К счастью, я пришел в библиотеку 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
С наилучшими пожеланиями
1 ответ
Кажется, что сетевой интерфейс для соединения GPRS, который вы получаете при наборе номера, не настроен с правильными серверами DNS. Кроме того, доменные имена, необходимые для ваших вызовов службы, могут быть неправильными.
Чтобы проверить это:
Это только конкретный веб-сервис, доменное имя которого не может быть разрешено? Это всегда то же самое? Работают ли другие? Вы можете просто HTTP GET получить что-то вроде http://stackru.com/ программно после того, как соединение было установлено?