2011-01-31 55 views
0

我需要在具有windows ce 6的PDA中創建GPRS連接。現在通常我不得不使用製造商的dll來創建該連接,但他們說他們使用ras來實現這一點。使用它的唯一問題是我在.net c#中編程,而庫是一個非託管代碼。在Windows CE 6.0中使用opennetcf Ras創建持久RAS連接

幸運的是,我來到了opennetcf ras庫,它已經爲windows ras庫提供了必要的pInvokes,唯一的問題是文檔很差。

我創建了一個庫,可以在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服務與出錯。它還顯示調制解調器的額外配置文件,其中顯示了設備的設置,包括ipaddress,子網掩碼甚至默認網關。

問題是,當我使用我創建的庫以編程方式創建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基因庫中的一個可行的連接

最佳問候

回答

0

看起來好像對於GPRS連接的網絡接口,你在撥號時不configu紅色與正確的DNS服務器。或者,您的服務呼叫所需的域名可能是錯誤的。

爲了驗證這一點:

難道只有特定的Web服務,它的域名無法解析?它總是一樣嗎?其他人工作嗎?在建立連接後,您可以通過編程以HTTP方式獲取類似http://stackoverflow.com的東西嗎?

+0

域名是正確的,因爲我可以爲www.google.com做HTTP GET並獲取頁面,並且如果我通過控制面板進行連接,我的程序就像魅力一樣。只有當我做連接programaticaly,這發生。 – Sorcerer86pt 2011-02-01 11:57:02