Служба Windows зависает при открытии OLEDB-соединения в Excel-файл - PullRequest
2 голосов
/ 08 января 2010

У меня есть служба Windows, которая зависает при открытии OLEDB-соединения с Excel-файлом, например:

using (var connection = new OleDbConnection(
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
    + fileName + ";Extended Properties=\"Excel 8.0\""))
{
  connection.Open();
  // start using the connection
}

Этот код отлично работает при запуске в качестве консольного приложения. Когда я отлаживаю Windows Service с помощью Visual Studio, я могу войти в код, пока не нажму на вызов connection.Open (). В этот момент поток зависает. Не исключение не выбрасывается. Visual Studio остается отзывчивым, пока я не нажму кнопку «Отключить все» или «Остановить отладку». В этот момент Visual Studio также зависает. Когда я завершаю процесс, Visual Studio снова становится отзывчивым.

Кто-нибудь знает, почему это происходит и как это решить?

РЕДАКТИРОВАТЬ: fileName является абсолютным путем; файл был написан самой службой.

Ответы [ 2 ]

2 голосов
/ 11 января 2010

После неудачной попытки сделать это внутри службы Windows, я извлек бизнес-логику в отдельное консольное приложение и просто вызывал это приложение из службы Windows. Кажется, работает нормально.

0 голосов
/ 08 января 2010

Я не знаю, почему это происходит, но вы пытались сузить его, пытаясь открыть файл и просто загрузить его в байтовый массив - чтобы определить, связана ли проблема с файловой системой / разрешениями / и т.д .. а не OLE DB? Если вы можете открыть и загрузить файл в байтовый массив, но OLE DB по-прежнему зависает, это означает, что процессор привязан, что может указывать на то, что в файле может быть что-то, что OLE DB не может обработать?

Если вы не можете заставить это работать с OLE DB, рассматривали ли вы стороннюю библиотеку xls / xlsx, такую ​​как SpreadsheetGear for .NET ? Вы можете посмотреть живые образцы здесь и загрузить бесплатную пробную версию здесь .

Отказ от ответственности: я владею SpreadsheetGear LLC

...