从C#Web应用程序中的网络共享访问文件
我有一个Web应用程序,需要从网络共享中读取(并可能写入)文件。我想知道这样做的最好方法是什么?
我无法授予网络服务或者aspnet帐户访问网络共享的权限。我可能会使用模拟。
网络共享和Web应用程序都托管在同一个域上,我可以专门为此目的在该域上创建一个新用户,但是我不太确定如何在创建文件流和指定要使用的凭据之间加点在Web应用程序中。
不幸的是,该驱动器未映射为计算机上的网络驱动器,仅作为网络共享供我使用,因此很遗憾,我无法进行透明呼叫。
我可以想到的一个问题是模拟...我只能在每个应用程序域中模拟一个用户,但我很乐意得到纠正。我可能需要将此文件写入几个不同的共享,这意味着我可能必须模拟几个用户。
我喜欢创建令牌的想法...如果可以的话,我可以先向用户询问其凭据,然后动态应用安全性,如果访问被拒绝,则向他们提供有意义的错误消息...我我要去玩,但我会再给我们更新的。
解决方案
回答
我毫无问题地透明连接到网络共享,就好像它们是本地驱动器一样。我们可能遇到的唯一问题是我们提到的问题:拥有" aspnet"帐户可以访问共享。模仿可能是实现此目的的最佳方法。
我们应该能够使用任何文件流对象来访问网络共享,只要它在服务器计算机上具有驱动器号即可。
回答
在这种情况下,模拟对我来说效果很好。我们有一个向导通过网站上传了一个zip文件,但是我们对该网站进行了负载均衡。因此需要设置一种在所有计算机上保存文件的方法。
有很多不同的方法可以做到这一点。我们决定使所有请求都在我们设置的用户下运行,只是添加了web.config条目并在该用户的文件夹上设置了安全权限。这篇kb文章很好地说明了设置。
回答
鉴于每个人都已经拥有域帐户。尝试IIS集成身份验证。我们会在网络上看到一个难看的登录框,但是信誉应该传递到文件共享中。
@lomaxx
我们是在说只有共享权限或者手动将其映射到驱动器号。如果以后可以使用ucn \ host \ share,则使用与使用c:\ shared_folder相同的方式。
随机的
将共享镜像到主机上的本地文件夹是否会成为负担?我听说ROBOCOPY非常方便。
另一个想法。在目标共享上运行IIS,我们可以通过http进行阅读,并且如果需要编写调查webdav。