#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. Если вы можете запустить его локально, он также должен работать в службе приложений.