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.
Надеюсь, что это помогает кому-то, кто сталкивается с подобным типом проблемы.