从.NET Web服务调用Python脚本

时间:2012-03-22 18:00:24

标签: c# web-services security iis arcpy

从.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服务运行。

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

我还更改了网络服务应用程序池以加载用户个人资料,但这也无济于事。

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

1 个答案:

答案 0 :(得分:0)

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

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

此ESRI KB中记录了该问题。

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

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