Проблема OfficeConverter при развертывании в службе приложений Azure

#c# #azure #azure-web-app-service #openxml

Вопрос:

У меня есть веб-API, который просто

  • клонирование файла .docx
  • преобразуйте этот клонированный файл .docx в формат .pdf
 using DocumentFormat.OpenXml.Packaging;


[HttpPost("clone")]
public IActionResult CloneBillFromTemplate()
{
     var templateFilePath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "Bill", "PaymentTempl.docx");
     var clonedFilePath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "Bill", "ClonedBill.docx");
     var pdfFilePath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "Bill", "FinalBill.pdf");
     
     using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(templateFilePath, true))
     {
         var clonedDoc = wordDoc.Clone(clonedFilePath);
         System.Threading.Thread.Sleep(500);
         clonedDoc.Save();
         clonedDoc.Close();
     }

     using (var converter = new OfficeConverter.Converter())
     {
         converter.Convert(clonedFilePath, pdfFilePath);
     }

     return Ok();
}
 

Все отлично работает при отладке (наверняка :3), а также в IIS

Но при развертывании в службе приложений Azure я получил ошибку такого типа (трассировка стека сообщение об исключении).

Не удалось прочитать реестр для проверки версии Word

Не удалось найти ключевое слово реестра.ПриложениеCurVer в OfficeConverter.Word..ctor() в OfficeConverter.Конвертер.get_Word() в OfficeConverter.Конвертер.Преобразовать(файл ввода строки, файл вывода строки, поток лог-потока) в ….

Не могли бы вы, ребята, помочь мне в этом? Спасибо всем!!!

**не стесняйтесь запрашивать дополнительную информацию, необходимую для обнаружения этой проблемы

Обновление Похоже, что это проблема с конвертером pdf, который я использую, а не с OpenXML

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

1. можете ли вы вставить сообщение трассировки всего стека

2. @Sajeetharan Привет, только что обновил вопрос, включая трассировку стека

3. ну, я думаю, что эта проблема связана не с открытым xml, а с другими пакетами, которые я использовал для преобразования в pdf-файл, хотя

Ответ №1:

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

Приложения имеют доступ только для чтения ко многим (хотя и не ко всем) частям реестра виртуальной машины, на которой они работают. На практике это означает, что разделы реестра, разрешающие доступ только для чтения к локальной группе пользователей, доступны приложениям. Одной из областей реестра, которая в настоящее время не поддерживается для доступа на чтение или запись, является улей HKEY_CURRENT_USER.

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

https://docs.microsoft.com/en-us/azure/app-service/operating-system-functionality#registry-access

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