2010-09-25 2 views
0

Я создаю приложение Windows, которое читает XML-файл с данного сервера. Это приложение установлено около 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

Просто интересно, почему вы предлагаете реструктурировать вместо простого добавления блока? –

+0

Я забыл Dispose WebResponse. Благодарю. Но с XML-документом у меня нет никаких проблем. – AEMLoviji

2

я не вижу проблемы, как вы только чтение из файла. Единственной проблемой может быть сервер, запрещающий одновременный доступ к учетной записи пользователя и ограничивающий количество подключений одновременно. В этом случае вам может быть лучше с webservice или скриптом (например, php), доставляющим xml через HTTP, а не FTP.

1

Если вам интересно, как несколько клиентов сразу обращаются к FTP-серверу, это будет зависеть от того, как настроен FTP-сервер.

Некоторые из них будут созданы, чтобы одновременно разрешать только 2 или 3 клиента, тогда как некоторые из них позволят (почти) столько, сколько вам когда-либо понадобится.

Если FTP-сервер вызывает проблемы, вы можете использовать его через HTTP-сервер.

Смежные вопросы