2011年2月25日 星期五

WebClient 與 HttpWebRequest

在 .Net Framework 的 System.Net 下有許多操作網路資源的 Class
挑這兩個出來是因為在 Windows Phone (或說Silverlight) 上僅有這兩個可用

這兩個類別可以讓我們用來取得網路上的資源,不論是網頁內容、Xml 資訊、圖片、音樂檔案等,
而且非常方便的提供了 Async 方法,讓我們不必自己利用 Thread 處理背景下載的麻煩事,

WebClient 的官方文件於此,簡單的範例與說明如下


private void GetHttpDocument(String strURL)
{
  WebClient client = new WebClient();
  //client.AllowReadStreamBuffering = false; // 若加上這行即為不使用 Buffer
  client.OpenReadCompleted += new OpenReadCompletedEventHandler(OpenReadCallback);
  client.OpenReadAsync(new Uri(strURL, UriKind.Absolute));
}

private void OpenReadCallback(Object sender, OpenReadCompletedEventArgs e)
{
  Stream stream = (Stream)e.Result;
  // stream 已為完整資料串流,可將 stream 寫為 File 或啥米的應用
}


HttpWebRequest 的官方文件於此,簡單的範例與說明如下


private void GetHttpDocument(String strURL)
{
  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
  //request.AllowReadStreamBuffering = false; // 若加上這行即為不使用 Buffer
  request.BeginGetResponse(new AsyncCallback(GetHttpDocCallback), request);
}

private void GetHttpDocumentCallback(IAsyncResult asynchronousResult)
{
  HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
  HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
  Stream stream = response.GetResponseStream();
  // stream 已為完整資料串流,可將 stream 寫為 File 或啥米的應用
}


比較需注意的是 HttpWebRequest 不可以使用 new HttpWebRequest(); 來建構物件
也不可以使用它的基底類別 WebRequest 來建構轉型,因為 WebRequest 是個抽像類別,
必須使用靜態方法 WebRequest.Create() 來回傳型別為 HttpWebRequest 的物件。
而 HttpWebRequest 比較是針對 http Protocol 所設計的,WebClient 是比較單純的網路資源類別,
除非有特殊需要但如修改 http Header 參數,WebClient 就蠻夠用的了,
事實上,WebClient 能做的事其實比 HttpWebRequest 多了不少,只是目前沒用到,暫不紀錄。

沒有留言:

張貼留言