Не удалось обновить файл excel (.xls) в WCF, развернутом на Windows server 2008 R2

#c# #wcf #windows-server-2008-r2

#c# #wcf #windows-server-2008-r2

Вопрос:

Эта проблема характерна для случая, когда я пытаюсь обновить существующий файл Excel через WCF. Пожалуйста, обратите внимание, что я могу читать файлы Excel, и проблема возникает только при попытке обновить любой файл Excel. Кроме того, эта логика обновления отлично работает в моей среде разработки (WinXP, где в качестве рабочей среды используется Windows server 2008 R2).

Я попробовал шаги, упомянутые в блоге Borgon (http://hopschwiiz.blogspot.com/2011/02/automating-excel-2007-on-windows-server.html ) также, но без какой-либо удачи.

Я использую .Net 3.5, SQL Server 2008 и SL 3.0.

В соответствии с запросом добавлены коды…

 string[] strArray;
string fileName = null;
System.Array myvalues = null;
Microsoft.Office.Interop.Excel.Application ExcelObj = null;

try
{
    fileName = System.Configuration.ConfigurationManager.AppSettings["FileLocation"].ToString();
    fileName  = "JobDetails.xls";

    ExcelObj = new Microsoft.Office.Interop.Excel.Application();
    Excel.Workbook theWorkbook = (Excel.Workbook)ExcelObj.Workbooks.Open(fileName, 0, false, 5, "", "", true, Excel.XlPlatform.xlWindows, "", true, false, 0, false, true, false);
    Excel.Sheets sheets = theWorkbook.Worksheets;
    for (int sheetNum = 1; sheetNum <= sheets.Count; sheetNum  )
    {
        Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(sheetNum);

        for (int i = 8; i <= 50; i  )
            {
                Excel.Range range = worksheet.get_Range("A"   i.ToString(), "AI"   i.ToString());
                myvalues = (System.Array)range.Cells.get_Value(Type.Missing);
                strArray = ConvertToStringArray(myvalues);

                if (strArray[1].Equals("PSA Id") amp;amp; strArray[2].Equals("Member Name") amp;amp; strArray[3].Equals("Project Name"))
                {
                    int j = i;
                    worksheet.Cells[j, 5] = Month; // Updated Month in the excel file.
                    foreach (MemberShift item in listOfJobPlan)
                    {
                        j  ;
                        worksheet.Cells[j, 2] = item.MemberID.ToString("D"   6);
                        worksheet.Cells[j, 3] = item.MemberName;
                        worksheet.Cells[j, 4] = inGroupName;
                    }
                    break;
                }
            }
    }
}
catch (Exception ex)
{
    string Log = "DataService";
    if ((!(EventLog.SourceExists(Log))))
        EventLog.CreateEventSource(Log, Log);
    EventLog logEntry = new EventLog();
    logEntry.Source = Log;
    logEntry.WriteEntry("Message : "   ex.Message   "n StackTrace : "   ex.StackTrace, EventLogEntryType.Error);
    return false;
}
finally
{
    ExcelObj.Workbooks.Close();
}

return true;
  

Комментарии:

1. Пожалуйста, покажите какой-нибудь код. Какой метод вы используете для обновления файла?

2. Джон.. Я добавил коды..

3. Имеет ли служба WCF необходимый доступ к файлу на сервере.?

4. Вы знали, что никогда не следует использовать Office Automation из серверного процесса, только из настольного процесса? Автоматизация никогда не была предназначена для запуска в этой среде и часто завершается сбоем со странными проблемами, которые невозможно отладить.

5. Aravind.. перепроверено… Пул приложений имеет права на изменение..

Ответ №1:

Проверьте, от имени какого пользователя запущен веб-сайт, а затем убедитесь, что у этого пользователя есть соответствующие разрешения на редактирование файлов.