使用C#访问不同机器上的文件的正确方法

时间:2009-08-10 02:05:51

标签: c# authentication impersonation filestream

我想从同一网络上的不同Windows机器上读取文件,但不是同一个域的一部分。 (ASP.NET C#app)
尝试使用FileStream(无法进行身份验证),尝试使用FileWebRequest(使用file:///时恢复为FileStream),以及模拟(support.microsoft.com/kb/306158#4)在我的Vista上显示“模拟失败”。
更新:我修复了“假冒失败”问题。但是仍然从其他机器获得“拒绝访问”,即使我在两者上都“镜像”了用户,所以问题仍然存在...... 什么是接近这项任务的正确方法?

4 个答案:

答案 0 :(得分:1)

可能不是您正在寻找的答案,但您要求正确方式,因此...将文件服务器加入域并授予ASP.NET的服务帐户访问权限

答案 1 :(得分:0)

我不确定这是否是正确的方法,但这是我的方式。假设您知道该计算机的登录信息,我将调用WNetConnection到IPC $对象以对机器进行身份验证,完成我的工作,然后执行另一个P / Invoke以删除与IPC $的连接。

答案 2 :(得分:0)

尝试使用WebClient。您可以使用它来访问URI,我相信这包括使用'文件'协议(或者您可以通过HTTP发布远程文件)。

您可以使用WebClient进行传统下载:

WebClient.DownloadFile(Uri address, string localFile)

或者返回一个流:

WebClient.OpenRead(Uri address)

但是,您的身份验证问题可能仍然存在。您可以使用标准的Uri方式提供凭据,但可能无法使用“文件”协议。

我从未尝试过,但我相信您可以在web.config中指定模拟

<authentication mode="Windows" />
<identity impersonate="true" username="[user]" password="[password]"/>

虽然这听起来像是一种安全风险,但是让您的应用程序采用网络用户的凭据而不是匿名用户默认值。

无论如何更多:How To: Use Impersonation and Delegation in ASP.NET 2.0

答案 3 :(得分:0)

映射驱动器,例如“Z:”到运行代码的机器上的远程机器。 使用Z访问文件:...