【问题标题】:Invoke Python Script from .NET Web Service从 .NET Web 服务调用 Python 脚本
【发布时间】:2012-03-22 18:00:23
【问题描述】:

从 .NET Web 服务执行 Python 脚本时遇到问题。

Web 服务为 python.exe 创建一个System.Diagnostics.Process,并将 Python 脚本路径作为参数传递。

Web 服务作为自定义本地帐户运行。如果我将自定义本地帐户添加到管理员组,python 脚本会成功,但我无法将其作为解决方案。

Python 脚本无法从 ESRI 导入名为 ArcPy 的库。看起来这个模块使用 Java JAR 从(ESRI 的 API)调用 ArcObjects。

只有在 web 服务的上下文中运行时才会失败。如果我使用 runas 打开一个 cmd shell 将其作为 Web 应用程序池自定义帐户运行并调用 python 脚本,它工作正常(即使应用程序池帐户不在管理员组中)。当作为 Web 服务运行时,它只需要在管理员组中。

我在 procmon 中查看了 w3wp.exe 和 python.exe 中的条目,但没有找到需要更改权限的任何内容。

我想知道为什么它可以在作为应用程序池帐户运行的 shell 中运行,而不是在 Web 服务中运行。

我将每个本地用户权限分配策略都授予应用程序池帐户,但它不起作用,所以我已经排除了。

我还更改了 Web 服务应用程序池以加载用户配置文件,但这也无济于事。

system.diagnostics.process 在 IIS 应用程序池的上下文中运行与以同一帐户运行的 shell 相比,执行环境有何不同?

【问题讨论】:

  • 为什么不使用 IronPython 而不是执行python.exe? IPY 与 .NET 完美集成,尤其是 >=v4
  • @sll 如果我不能让它工作,可能是一个替代方案。

标签: c# web-services security iis arcpy


【解决方案1】:

事实证明,这与安全无关。 ESRI 安装它的 python 实例并将 .PTH 文件添加到 Lib\site-packages 目录。

我安装了 ArcGIS Desktop 和 ArcGIS Server,并且在程序文件目录中都有 ArcPy python 模块。 Python 导入了错误的模块,因为它位于路径的第一个。

此 ESRI KB 中记录了该问题。

http://support.esri.com/en/knowledgebase/techarticles/detail/39029

我不知道为什么当帐户在管理员组中时它会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    相关资源
    最近更新 更多