我正在尝试从ASP.NET中的Web服务使用网络路径(创建目录,写入和读取文件)。
我的办公室里的一切工作正常,网络路径位于我的笔记本电脑的同一个局域网中,但是当我尝试通过VPN连接到网络路径时,目录的创建失败并显示“拒绝访问路径”错误。
奇怪的是,从Windows资源管理器中,我可以完全访问这样的路径,根据我的VPN凭据,我存储在Windows Credentials Wallet中。
我还尝试将我的IIS应用程序池标识设置为“网络服务”,但没有运气。
你能帮我吗?
非常感谢
当我尝试执行类似
的语句时Directory.CreateDirectory(@"\\my\network\path");
从我在Visual Studio 2010中的一个简单的控制台应用程序项目中,它可以正常工作并创建目录。
问题是当我在我的Web服务的业务逻辑中发出这样的声明时,该声明在本地IIS下运行(并且我通过“附加进程...”VS2010中的调试工具连接到该对象)
答案 0 :(得分:1)
当您在本地运行时,您的本地域帐户就是运行所有内容的上下文。运行控制台应用程序时,自启动应用程序以来,它仍在用户上下文中运行。在IIS中运行时,你是正确的,因为正在使用app-pool帐户,并且网络服务帐户具有一些非常低的权限。
不是使用高权限帐户(例如您的帐户),而是模拟会解决您的问题吗?任何需要通过VPN完成的工作都可以在上下文中“包装”适当的权限。这是另一篇关于使用模拟的SO文章,我已经为相关事项实现了这个:
How do you do Impersonation in .NET?
参见Matt Johnson的答案,他创建了一个自定义的Impersonation类。在使用块中使用它,然后做你的网络东西。它使用advapi32.dll和p / invoke来做这种用户帐户voodoo。他还整理了一个NuGet包,可以节省你一些时间:
答案 1 :(得分:0)
我可能没有详细说明您直接询问的内容,但如果您通过Visual Studio和VPN运行此服务,请在CodeBetter上查看此great article。
runas /netonly /user:domain\username “C:\ProgramFiles\Path\to\your\visualstudio”
我没有把我的电脑放在我面前,但我记得我创建了一个批处理文件并运行它来启动VS和Sql Server Management Studio,它就像一个魅力。 / p>
如果我误解了这个问题,请为噪音感到抱歉。