无法通过VPN以编程方式访问网络路径

时间:2014-08-14 15:56:59

标签: c# asp.net visual-studio-2010 vpn access-denied

我正在尝试从ASP.NET中的Web服务使用网络路径(创建目录,写入和读取文件)。

我的办公室里的一切工作正常,网络路径位于我的笔记本电脑的同一个局域网中,但是当我尝试通过VPN连接到网络路径时,目录的创建失败并显示“拒绝访问路径”错误。

奇怪的是,从Windows资源管理器中,我可以完全访问这样的路径,根据我的VPN凭据,我存储在Windows Credentials Wallet中。

我还尝试将我的IIS应用程序池标识设置为“网络服务”,但没有运气。

你能帮我吗?

非常感谢

编辑:

当我尝试执行类似

的语句时
Directory.CreateDirectory(@"\\my\network\path");

从我在Visual Studio 2010中的一个简单的控制台应用程序项目中,它可以正常工作并创建目录。

问题是当我在我的Web服务的业务逻辑中发出这样的声明时,该声明在本地IIS下运行(并且我通过“附加进程...”VS2010中的调试工具连接到该对象)

2 个答案:

答案 0 :(得分:1)

当您在本地运行时,您的本地域帐户就是运行所有内容的上下文。运行控制台应用程序时,自启动应用程序以来,它仍在用户上下文中运行。在IIS中运行时,你是正确的,因为正在使用app-pool帐户,并且网络服务帐户具有一些非常低的权限。

不是使用高权限帐户(例如您的帐户),而是模拟会解决您的问题吗?任何需要通过VPN完成的工作都可以在上下文中“包装”适当的权限。这是另一篇关于使用模拟的SO文章,我已经为相关事项实现了这个:

How do you do Impersonation in .NET?

参见Matt Johnson的答案,他创建了一个自定义的Impersonation类。在使用块中使用它,然后做你的网络东西。它使用advapi32.dll和p / invoke来做这种用户帐户voodoo。他还整理了一个NuGet包,可以节省你一些时间:

https://www.nuget.org/packages/SimpleImpersonation

答案 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>

如果我误解了这个问题,请为噪音感到抱歉。