2011-01-21 53 views
3

在我的程序中,我需要從服務器請求數據,並在收集響應時,使用返回的數據進行進一步處理。在C#中向服務器發送/接收數據#

我正在使用「system.net.webrequest」類。我對此有幾個問題:

  1. 我收到數據後(數據至少爲0.5MB大小)我必須處理這整個數據以得出一些結果。我正在考慮將返回的數據存儲在「txt」文件中,然後從該文件和進程中讀取數據。

這是一個更好的主意嗎?如果沒有,你可以請建議。

  1. 我向多個服務器(> 10個服務器)發出請求並使用它們中的數據。我觀察到,由於某種原因,如果服務器不可用,然後我PROGRAME停止拋出異常

    服務器無法接通
    型「System.Net.WebException」的第一次機會異常出現在System.dll中

我該如何解決這個問題?任何想法?

Appreaciate your help。

感謝, 拉胡爾

回答

3

至於除外;實施try/catch區域,並採取適當的措施(可能會記錄錯誤並在稍後時間對其進行排隊以進行重試)。

我不能完全確定什麼樣的第一個問題是因爲我們不知道數據/系統是什麼 - 但一些想法:

  • 來減少帶寬,如果服務器支持壓縮,請確保你告訴它 - 相應地設置accept-header(如果使用HttpWebRequest,則根據您的請求設置request.Accept = "gzip,deflate";);或者如果您控制管道的兩端,可能是更密集的序列化格式
  • 請確保在處理數據時正確使用諸如Dictionary<,>之類的內容;我不能告訴你什麼是「適當的」,是不知道什麼是「處理」或「數據」是指在特定的情況下,P
+0

嗨馬克,是的,我得到了第2題;使用try/catch/finally ...解決。第一個問題:從服務器返回的數據是XML格式,我得到的數據返回正常...但正在考慮使用該數據更好的方式...正如我所說的我所查詢的服務器數量是> 10.因此,就像我將繼續向服務器請求數據並處理,直到處理完所有服務器。 – Rahul

+0

@Rahul你可以嘗試並行,如果你受到每個(獨立)服務器的帶寬限制;當然,如果你受**你的帶寬限制,或者「10臺服務器」實際上都是同一個,那麼這不會起作用。 –

1

將數據保存到一個文件僅是必要的,如果你不想到達或不能按照您收到它的方式處理它,或者如果您想在處理後爲了調試目的而保留這些數據。我通常避免創建像這樣的文件,因爲它會增加維護開銷。

其他服務器繼續處理數據異常的情況下,在一個,你將需要如下(僞)使用Try/Catch塊:

foreach (var server in serverList) 
{ 
    try 
    { 
     ... fetch data and process ... 
    } 
    catch (Exception ex) 
    { 
     // handle exception (log, requeue, etc) 
    } 
} 
+0

比爾,同意......即使我不喜歡這樣,將數據存儲在文件中。那麼,你是否建議我直接使用返回的數據,而不是將它保存在txt文件中。對不起,請問您,但請您提供一些示例代碼塊,瞭解如何直接使用數據。謝謝。 – Rahul

相關問題