在运行的测试计算机上(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计算机上运行时检查的内容:
我感到困惑,只有在IIS6下运行时才会发生。它几乎就像是认为呼叫来自网络服务或本地系统用户,并且它没有检查运行应用程序池的身份。
顺便说一下,当我查看Procmon并观看从Web服务调用的C ++应用程序时,它没有读取和写入 C:\ Documents and settings \ myUserName \ ApplicatonData 的问题,它没有似乎有问题,也许它会以不同的方式构建路径。
我开始认为这可能是.NET中的一个错误?
感谢。
Tom Deloford
答案 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)
没问题。
您应该更改池的用户(并回收池)以查看更改。