从.NET Web服务调用Python脚本

本文关键字:Python 脚本 调用 服务 NET Web | 更新日期: 2023-09-27 18:28:47

从.NET web服务执行Python脚本时出现问题。

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

web服务正在作为自定义本地帐户运行。如果我将自定义本地帐户添加到administrators组,python脚本就会成功,但我不能将其作为解决方案。

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

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

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

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

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

我还更改了web服务应用程序池以加载用户配置文件,但这也没有帮助。

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

从.NET Web服务调用Python脚本

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

我安装了ArcGIS Desktop和ArcGIS服务器,它们的程序文件目录中都有ArcPy-python模块。Python导入了错误的模块,因为它是路径中的第一个模块。

此ESRI知识库中记录了此问题。

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

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