IIS6 WebService下Environment.GetFolderPath(Environment.SpecialFolder.ApplicationFolder)返回的路径错误

时间:2010-10-15 15:20:27

标签: c# .net web-services iis-6

在运行的测试计算机上(Windows XP,IIS5.1),在自定义进程标识下使用C#.NET WebService(.SVC)执行以下代码(使用machine.config指定用户)

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

正确返回

c:\Documents and Settings\myUserName\Application Data

但是,在运行IIS6的(终端服务)Windows 2003计算机上执行相同的代码但现在使用ApplicationPool指定该方法返回的相同进程标识:

c:\Documents and Settings\Default User\Application Data

在Win2003 / IIS6计算机上运行时检查的内容:

  1. myUserName属于IIS_WPG组(甚至尝试过Admin)
  2. 对Environment.UserName的调用正确返回myUserName
  3. Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)的调用; 也会返回“默认用户”路径,同样使用DesktopDirectory
  4. 以myUserName身份登录并确保 C:\ Documents and settings \ myUserName 存在
  5. 在Windows 2003框中的.net应用程序中运行完全相同的代码,这将起作用并返回正确的路径。
  6. 我感到困惑,只有在IIS6下运行时才会发生。它几乎就像是认为呼叫来自网络服务本地系统用户,并且它没有检查运行应用程序池的身份。

    顺便说一下,当我查看Procmon并观看从Web服务调用的C ++应用程序时,它没有读取和写入 C:\ Documents and settings \ myUserName \ ApplicatonData 的问题,它没有似乎有问题,也许它会以不同的方式构建路径。

    我开始认为这可能是.NET中的一个错误?

    感谢。

    Tom Deloford

2 个答案:

答案 0 :(得分:1)

解决。显然这是'按设计',因为IIS6不加载用户配置文件设置。

微软建议我先升级到IIS7或调用LoadUserProfile,我想知道是什么让他们从IIS5.1改变了这个功能。

http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/890fa85a-b11a-4fbe-a333-cbe69abd72a7

无论如何吸取教训,不要假设功能尚未被删除,并且即使惹恼IT部门也始终使用相同的应用服务器进行测试!

答案 1 :(得分:-1)

是。这不是一个错误。 在哪个用户下运行应用程序池??

让我们分一点:

测试计算机使用IIS来托管服务或内置Web服务器? 如果您使用内置Web服务器,它将在您的用户下运行。 如果您使用IIS,哪一个是池用户?

如果是网络服务或本地系统,则该进程在其中一个用户的上下文中运行,实际上,调用:

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 

没问题。

您应该更改池的用户(并回收池)以查看更改。