0

从托管在 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 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 位,
  • 用于 python 3.5 64 位 (amd64) 的 pyrfc 1.9.5
  • SAP NW RFC SDK 7.5.0 64 位

Python 可执行文件和libSDK 文件夹的路径已添加到环境变量中。我还尝试从bin工作正常的目录中执行示例 rfcexec.exe 程序。我只在从 IIS 运行应用程序时收到错误消息。应用程序池身份对 python 脚本具有完全权限。

如果我评论 pyrfc 导入部分,该脚本在 IIS 中运行良好。请帮忙 。

4

1 回答 1

1

最后我在调试至少 1 周后找到了解决方案。问题是访问相关问题。SAP NW RFC SDK 已按照文档安装在路径C:\nwrfcsdk\lib中。

链接:安装文档

但是在 IIS 的应用程序池中运行 .NET Core API 的用户帐户对此文件夹没有任何读/写访问权限nwrfcsdk。因此,当从 .NET Core API 调用 python 脚本时,pyrfc 无法导入 DLL (SAPNWRFC.dll)。我提供了对该特定帐户的读/写访问权限,并且脚本现在运行良好。

我已按照以下步骤调试诊断问题 -

  • 在调用 API 后,我使用 sysinternals 的Procmon.exe进行分析来监控 w3wp.exe IIS 工作进程和 python.exe

  • 我还使用依赖walker 来跟踪依赖的dll。

希望这对面临类似问题的人有所帮助。

于 2018-08-14T17:48:23.150 回答