我在从托管在Windows Server IIS中的.NET Core api运行python脚本时面临以下问题。我在此脚本中使用了 pyrfc 1.9.5 SAP 连接器。这是下面的代码
from pyrfc import Connection
def GetConnection(connmeta):
return Connection(**connmeta)
这是我得到的错误 -
from pyrfc import Connection
File "<C:Program FilesPython35libsite-packagespyrfc-1.9.5-py3.5-win-amd64.eggpyrfc_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 位
- 蟒蛇 3.5 64 位,
- Pyrfc 1.9.5 for Python 3.5 64 位 (AMD64(
- SAP NW RFC SDK 7.5.0 64 位
Python 可执行文件和 SDK 的lib
文件夹的路径已添加到环境变量中。我还尝试从bin
目录中执行示例 rfcexec.exe 程序,它工作正常。我只是在从IIS运行应用程序时收到错误。应用池标识对 python 脚本具有完全权限。
如果我评论 pyrfc 导入部分,该脚本在 IIS 中工作正常。 请帮忙.
最后,我在调试至少 1 周后找到了解决方案。问题是与访问相关的问题。SAP NW RFC SDK 根据文档安装在路径C:nwrfcsdklib
中。
友情链接 : 安装文档
但是,在 IIS 的应用程序池中运行 .NET Core API 的用户帐户对此nwrfcsdk
文件夹没有任何读/写访问权限。因此,当从.NET Core API调用python脚本时,pyrfc无法导入DLL(SAPNWRFC.dll(。我已经提供了对该特定帐户的读/写访问权限,并且脚本现在运行良好。
我已按照以下步骤调试问题诊断 -
我已经使用Procmon进行了分析.exe从sysinternals来监视w3wp.exe IIS工作进程和python.exe在调用API后
我还使用依赖步行者来跟踪依赖的dll。
希望这对面临类似问题的人有所帮助。