2011-09-28 127 views
0

我需要從網站獲取一些信息。該網站不打算從瀏覽器訪問。所以假設該網站包含一個字節數組:我想從控制檯應用程序獲取該字節數組。通過webrequest從asp.net網站接收byte []

// c# code for asp website 
protected byte[] data; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    data = new byte[] { 1, 100, 200, 255 }; // the byte array that I want to send 
} 

// the asp content 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      <%=data%> 
     </div> 
    </form> 
</body> 

如果「數據」將是一個字符串,我就可以通過分析在下面的代碼中定義的變量responseFromServer檢索。

 // Create a request using a URL that can receive a post. 
     WebRequest request = WebRequest.Create("http://localhost:4444/WebSite2/HelloFromC.aspx"); 
     // Set the Method property of the request to POST. 
     request.Method = "POST"; 
     // Create POST data and convert it to a byte array. 
     string postData = "This is a test that posts this string to a Web server."; 
     byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
     // Set the ContentType property of the WebRequest. 
     request.ContentType = "application/x-www-form-urlencoded"; 
     // Set the ContentLength property of the WebRequest. 
     request.ContentLength = byteArray.Length; 
     // Get the request stream. 
     Stream dataStream = request.GetRequestStream(); 
     // Write the data to the request stream. 
     dataStream.Write(byteArray, 0, byteArray.Length); 
     // Close the Stream object. 
     dataStream.Close(); 
     // Get the response. 
     WebResponse response = request.GetResponse(); 
     // Display the status. 
     Console.WriteLine(((HttpWebResponse)response).StatusDescription); 
     // Get the stream containing content returned by the server. 
     dataStream = response.GetResponseStream(); 
     // Open the stream using a StreamReader for easy access. 
     StreamReader reader = new StreamReader(dataStream); 
     // Read the content. 
     string responseFromServer = reader.ReadToEnd(); 
     // Display the content. 
     Console.WriteLine(responseFromServer); 
     // Clean up the streams. 
     reader.Close(); 
     dataStream.Close(); 
     response.Close(); 

,我曾嘗試事情:

我試圖字節數組{1,100,200,255}轉換爲ASCII。然後用編碼類將其轉換回字節數組。 ASCII的問題是它不包含256個字符。也許我應該使用不同類型的編碼。但是,我必須確保,無論編碼我用的就是通過我的網站的支持......

+3

你看過用Web服務做這個嗎? – Matt

+1

目前尚不清楚您的問題是發送發佈數據還是收到響應數據。你有沒有看過WebClient的方式?這對於像這樣的事情要簡單得多... –

+1

請勿爲您的網站使用常規的aspx頁面。使用ashx文件(通用處理程序)。您可以完全控制發佈的標記。 – NotMe

回答

1

從你上面的評論下面就可能會喜歡看本教程(如克里斯生動的建議)http://www.dotnetperls.com/ashx

它也可能有助於提供一些最終目標的更多細節。你總是試圖推出一個字節數組?如果是這樣的話,Web服務可能會有所幫助A web service tutorial

你將如何使用這些數據?在不同的網頁或Windows應用程序?

+0

非常感謝我會研究這一點。 –

1

使用類似的東西的類

byte[] myBinaryResponse = new byte[response.ContentLength]; 
response.GetResponseStream().Read (myBinaryResponse, 0, myBinaryResponse.Length); 
+0

的一部分,我怎麼才能擺脫來自網站的頭信息,只是保持字節數組。如果我使用這種技術,那麼標題信息也將是一個字節數組。也許標題信息總是相同的長度,我可以修剪'myBinaryResponse' .... –

+0

根據http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.getresponsestream.aspx上述應該已經沒有http頭......或者你的意思是來自'.aspx'的任何HTML代碼? – Yahia

+0

是的,但是當我將字節數組放入<%=data%>時,網站不會發送數據字節數組,除非它被轉換爲字符串。換句話說,當我用瀏覽器打開該網站時,它會顯示System.Byte [] ... –