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

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

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

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

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

你能帮我吗?

非常感谢你

编辑:

当我尝试执行类似的语句时

Directory.CreateDirectory(@"\\my\network\path");

从我的Visual Studio 2010中的一个简单的控制台应用程序项目,它完美地工作,并创建目录.

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

解决方法:

听起来像在本地运行时,您的本地域帐户是运行所有内容的上下文.运行控制台应用程序时,自启动应用程序以来,它仍在用户上下文中运行.在IIS中运行时,您正确使用了应用程序池帐户,并且网络服务帐户具有一些非常低的权限.

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

How do you do Impersonation in .NET?

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

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

上一篇:javascript – SignalR用于跟踪在线用户和聊天


下一篇:javascript – 如何在函数内定义函数并从外部调用它?