Python - pyrfc 1.9.5 - 从 IIS 托管的 .NET Core 调用时导入错误 API
Python - pyrfc 1.9.5 - import error while calling from IIS hosted .NET Core API
我在 运行 来自 .NET Core api 的 python 脚本时遇到以下问题,该脚本托管在 windows 服务器 IIS 中。我正在使用 pyrfc此脚本中的 1.9.5 SAP 连接器。这是下面的代码
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 服务器 2016 64 位
- Visual C++ 2013 可再发行 64 位
- Python 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:\nwrfcsdk\lib
中。
link : Installation documentation
但是 .NET Core API 所在的用户帐户 运行 在 IIS 的应用程序池中 没有任何 read/write 访问权限 到这个 nwrfcsdk
文件夹。因此,当从 .NET Core python 调用 python 脚本时,pyrfc 无法导入 DLL (SAPNWRFC.dll) API.I 提供了对该特定帐户的 read/write 访问权限,并且现在脚本 运行 没问题了。
我已按照以下步骤调试诊断问题 -
我使用来自 sysinternals 的 Procmon.exe 的分析来监视 w3wp.exe IIS 工作进程和调用后的 python.exe API
我也用过dependency walker来跟踪依赖的dll。
希望这对面临类似问题的人有所帮助。
我在 运行 来自 .NET Core api 的 python 脚本时遇到以下问题,该脚本托管在 windows 服务器 IIS 中。我正在使用 pyrfc此脚本中的 1.9.5 SAP 连接器。这是下面的代码
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 服务器 2016 64 位
- Visual C++ 2013 可再发行 64 位
- Python 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:\nwrfcsdk\lib
中。
link : Installation documentation
但是 .NET Core API 所在的用户帐户 运行 在 IIS 的应用程序池中 没有任何 read/write 访问权限 到这个 nwrfcsdk
文件夹。因此,当从 .NET Core python 调用 python 脚本时,pyrfc 无法导入 DLL (SAPNWRFC.dll) API.I 提供了对该特定帐户的 read/write 访问权限,并且现在脚本 运行 没问题了。
我已按照以下步骤调试诊断问题 -
我使用来自 sysinternals 的 Procmon.exe 的分析来监视 w3wp.exe IIS 工作进程和调用后的 python.exe API
我也用过dependency walker来跟踪依赖的dll。
希望这对面临类似问题的人有所帮助。