2012-08-22 43 views
1

我已經構建了一個小型Windows應用程序,它可以查找計算機的MAC地址。我也有一個ASP.NET網頁。當我的登錄頁面加載時,我正在運行該可執行文件。小型桌面應用程序如何與ASP.NET網頁進行通信?

我想獲得MAC地址值。我怎樣才能做到這一點?

我的桌面應用程序可以將該值返回給我的網頁嗎?

這是我到目前爲止嘗試過的。

桌面應用程序代碼:

public string GetSystemMACID() 
{ 
    string systemName = System.Windows.Forms.SystemInformation.ComputerName; 
    try 
    { 
     ManagementScope theScope = new ManagementScope("\\\\" + Environment.MachineName + "\\root\\cimv2"); 
     ObjectQuery theQuery = new ObjectQuery("SELECT * FROM Win32_NetworkAdapter"); 
     ManagementObjectSearcher theSearcher = new ManagementObjectSearcher(theScope, theQuery); 
     ManagementObjectCollection theCollectionOfResults = theSearcher.Get(); 

     foreach (ManagementObject theCurrentObject in theCollectionOfResults) 
     { 
      if (theCurrentObject["MACAddress"] != null) 
      { 
       string macAdd = theCurrentObject["MACAddress"].ToString(); 
       return macAdd.Replace(':', '-'); 
      } 
     } 
    } 
    catch (ManagementException e) 
    { 
    } 
    catch (System.UnauthorizedAccessException e) 
    { 

    } 
    return string.Empty; 
} 

返回值是剛分配到Label

任何人都可以建議我嗎?歡迎任何建議。

+0

爲什麼不直接在'ASP.NET'代碼中直接詢問'MAC'?另外,你知道這會給你服務器的MAC嗎? –

+0

@FilipEkberg雅我試過,但它給服務器的MAC,我想做的事情是不可能的? – freebird

+0

使用Web服務(關鍵字「SOAP」和「WSDL」)。 –

回答

2

您可以將您的站點設置爲接受名爲MACAddress的查詢參數。將桌面應用程序發佈到網站上;發佈cookie的價值。這可以幫助:

using System.Net; 

... 

var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
httpWebRequest.UseDefaultCredentials = true; 
httpWebRequest.ContentType = "application/x-www-form-urlencoded"; 
httpWebRequest.Method = "POST"; 

byte[] requestBytes = Encoding.UTF8.GetBytes(queryString); 
httpWebRequest.ContentLength = requestBytes.Length; 

using (var requestStream = httpWebRequest.GetRequestStream()) 
{ 
    requestStream.Write(requestBytes, 0, requestBytes.Length); 
    requestStream.Close(); 
} 

查詢字符串像

"MACAddress=" + macAdd 

-------------更新應要求---------- -----

在桌面應用程序中,添加using語句。您可能還需要在解決方案資源管理器中添加對該DLL的引用。

然後,創建一個名爲PostMacAddress方法如下:

public void PostMacAddress(string url, string macAdd) 
{ 
    var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
    httpWebRequest.UseDefaultCredentials = true; 
    httpWebRequest.ContentType = "application/x-www-form-urlencoded"; 
    httpWebRequest.Method = "POST"; 

    var queryString = "MACAddress=" + macAdd; 

    byte[] requestBytes = Encoding.UTF8.GetBytes(queryString); 
    httpWebRequest.ContentLength = requestBytes.Length; 

    using (var requestStream = httpWebRequest.GetRequestStream()) 
    { 
     requestStream.Write(requestBytes, 0, requestBytes.Length); 
     requestStream.Close(); 
    } 
} 

我不知道它是什麼你不理解(並不想成爲的意思)。我在這裏進行了簡化,但POSTing是一個用於將數據發送到網站的HTTP協議。另一個是GET(讀取數據的協議)。

希望有幫助!

-------更新,以顯示網絡側...-----------

在你的Page_Load方法,你會希望得到這樣的查詢字符串:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!String.IsNullOrEmpty(Request.QueryString["MACAddress"]) 
     lblMacAddress.Text = Request.QueryString["MACAddress"]; 
} 
+0

+1用於發佈數據。但是,儘管帖子的有效內容與查詢字符串在合成上相同,但它不會被稱爲查詢字符串,因爲qs是URL的一部分。發佈的數據在請求的主體中發送。另外值得一提的是POST數據中的值應該被編碼。也沒有餅乾。 – spender

+0

@Mark謝謝你的回答。不過,我不能很好地理解它。小解釋將是有益的。謝謝。 – freebird

+0

@Mark我知道我發佈數據到我的網站,您提供的代碼是有用的。我的困惑是如何在我的網頁上檢索它?抱歉它可能聽起來很愚蠢。 – freebird

相關問題