Python - pyrfc 1.9.5 - импортер при вызове из IIS.NET Core API

Я сталкиваюсь с приведенной ниже проблемой при запуске сценария Python из API.NET Core, который размещен на сервере IIS Windows. В этом сценарии я использую соединитель SAP pyrfc 1.9.5. Вот код ниже

from pyrfc import Connection
def GetConnection(connmeta):
   return Connection(**connmeta)

Вот ошибка, которую я получил -

from pyrfc import Connection
  File "<C:\Program Files\Python35\lib\site-packages\pyrfc-1.9.5-py3.5-win-amd64.egg\pyrfc_init_.py>", line 22, in 
    from pyrfc._pyrfc import get_nwrfclib_version, Connection, TypeDescription, FunctionDescription, Server
ImportError: DLL load failed: The specified module could not be found

,

Он отлично работает из командной строки, Python IDLE, powershell и т. Д. Ранее я получил эту ошибку, когда не был установлен распространяемый пакет Visual C++. Но теперь он установлен правильно, так как тот же скрипт работает из IDLE и powershell.

Вот сведения об установленном программном обеспечении и сервере -

  • Windows Server 2016 64 бит
  • Visual C++ 2013 распространяемый 64-разрядный
  • Python 3.5 64 бит,
  • pyrfc 1.9.5 для python 3.5 64 бит (amd64)
  • SAP NW RFC SDK 7.5.0 64 бит

Исполняемый файл Python и путь к lib папка SDK уже добавлена ​​в переменную Environment. Я также попытался выполнить пример программы rfcexec.exe из bin каталог работает нормально. Я получаю только ошибку при запуске приложения из IIS . У удостоверения пула приложений есть полное разрешение на скрипты Python.

Сценарий работает нормально из IIS, если я прокомментирую часть импорта pyrfc. Пожалуйста помоги.

1 ответ

Решение

Наконец, я нашел решение после отладки, по крайней мере, 1 неделю. Проблема была связана с доступом. SAP NW RFC SDK был установлен в пути C:\nwrfcsdk\lib согласно документации.

ссылка: Документация по установке

Но учетная запись пользователя, под которой запускался.NET Core API в пуле приложений IIS , не имела доступа для чтения / записи к этому. nwrfcsdk папка. Следовательно, pyrfc не смог импортировать DLL (SAPNWRFC.dll) при вызове сценария python из.NET Core API. Я предоставил доступ для чтения / записи к этой конкретной учетной записи, и сценарий теперь работает нормально.

Я выполнил следующие шаги для отладки диагностики проблемы -

  • Я использовал профилирование с Procmon.exe из sysinternals для мониторинга рабочего процесса IIS w3wp.exe и python.exe после вызова API

  • Я также использовал ходок зависимостей для отслеживания зависимых DLL.

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

Другие вопросы по тегам