2010-09-25 52 views
0

我正在創建一個從給定服務器讀取XML文件的Windows應用程序。該應用程序已安裝在約30個客戶端中。也許他們會同時調用這個函數。下面的代碼有問題嗎?

我的問題:

將任何問題發生,如果多個用戶在通話同時這種方法嗎?

public string GetXmlInnerText() 
{ 
    FtpWebRequest tmpReq = null; 
    System.Net.WebResponse tmpRes = null; 
    try 
    { 
     if (Settings.Default.Internal) 
      tmpReq = (FtpWebRequest)FtpWebRequest.Create("ftp://<IPhere>/XMLData.xml"); 
     else 
      tmpReq = (FtpWebRequest)FtpWebRequest.Create("ftp://<IPhere>/XMLData.xml"); 

     tmpReq.Credentials = new System.Net.NetworkCredential("userName", "password"); 
     tmpReq.KeepAlive = false; 
     tmpRes = tmpReq.GetResponse(); 

    } 
    catch (Exception ex) 
    { 
     //------ 
    } 


    string fileContents = null; 
    using (System.IO.Stream tmpStream = tmpRes.GetResponseStream()) 
    { 
     using (System.IO.TextReader tmpReader = new System.IO.StreamReader(tmpStream)) 
     { 
      fileContents = tmpReader.ReadToEnd(); 
     } 
    } 
    return fileContents; 
} 

感謝

回答

3

一個問題 - 你沒有處置WebResponse。它實現了IDisposable,所以你應該使用using聲明。用你目前的架構,這並不容易 - 你應該考慮適當地重構你的try/catch塊。

此外,默認情況下,StreamReader使用UTF-8 - 如果您的XML文檔未使用UTF-8編碼,則可能會出現問題。如果它是一個XML文檔,爲什麼不通過XmlReader.Create(Stream)或類似的東西加載它?這將爲您處理編碼。

+0

只是想知道爲什麼你建議重組而不是簡單地添加一個finally塊? – 2010-09-25 12:33:48

+0

我忘了配置WebResponse。謝謝。但對於XML文檔,我沒有任何問題。 – AEMLoviji 2010-09-27 05:34:52

2

我沒有看到一個問題,因爲你只能從文件中讀取。唯一的問題可能是服務器禁止同時訪問用戶帳戶,並限制同時允許多少個連接。在這種情況下,您可能更適合使用web服務或腳本(例如php)通過HTTP傳遞xml,而不是FTP。

1

如果您想知道多個客戶端同時訪問FTP服務器,它將取決於如何設置FTP服務器。

有些將被設置爲一次只允許2或3個客戶端,而有些則允許(幾乎)儘可能多地滿足您的需要。

如果FTP服務器出現問題,可以通過HTTP服務器代替。