2016-08-15 3 views
0

Я работаю над службой, которая периодически выполняет сканирование в определенной папке для сбора информации о некоторых файлах, находящихся в ней и ее подпапках.Служба зависает при вызове XDocument.Root.Add (XElement)

Я протестировал код в консольном приложении, и он работает как ожидалось, однако, когда он запускается из моей службы, выполнение, похоже, застревает в той части, где он вызывает scanLog.Root.Add (temp);

Я вижу запись о событиях, в которой говорится: «Начать добавление узла», однако никогда не доходит до «Готового добавления узла», какие-либо мысли о том, почему это не работает в моей службе, но отлично работает в консольном приложении?

private void ScanForChildCopies(string dir) 
    { 
     foreach(var dirs in Directory.GetDirectories(dir)) 
     { 
      ScanForChildCopies(dirs); 
     } 

     foreach(var files in Directory.GetFiles(dir, "*.ac")) 
     { 
      FileInfo fInfo = new FileInfo(files); 
      serviceLogging.WriteEntry("Found File: " + files); 
      if (fInfo.Exists) 
      { 
       if ((DateTime.Now - fInfo.LastWriteTime).Days > 0) 
       { 
        serviceLogging.WriteEntry("Building node"); 
        XElement temp = new XElement("childfile", new XElement("name", fInfo.Name), new XElement("lastmodified", fInfo.LastWriteTime.ToShortDateString()), 
         new XElement("age", (DateTime.Now - fInfo.LastWriteTime).Days.ToString())); 
        serviceLogging.WriteEntry("Starting to add node"); 
        scanLog.Root.Add(temp); 
        serviceLogging.WriteEntry("finished Adding node to scanlog");     
       }      
      } 
     } 



    } 

ответ

0

Я нашел проблему, из-за которой служба зависла.

scanLog.Root.Add(temp); 

SCANLOG был объявлен как статический XDocument в начале, но был повторно объявлен в функции, которая была размещена вызывающей функции.

-1

Одна из причин, почему он никогда не выполняет, может быть потому, что вы пытаетесь редактировать файлы, которые находятся в той же папке, что и услуги, которые вы звоните.

+0

Он зависает при попытке добавить XElement (temp) в существующий XDocument, поэтому на данном этапе не происходит запись в фактический файл, он должен просто создавать xml в памяти и добавлять его к объекту XDocument. – Vladmere

+0

Когда вы говорите услугу, вы имеете в виду веб-службу, размещенную в IIS или услуге Windows ... – MrPink13

+0

@Umair Farooq Я знаю, что IIS сбросит пул приложений, если вы что-нибудь напишите в сопоставленной папке ... Я просто ссылался на то, что это может происходить в случае с Vladmere ... – MrPink13

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