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

C# 使用C访问不同机器上文件的正确方法#,c#,authentication,impersonation,filestream,C#,Authentication,Impersonation,Filestream,我想从同一网络上的不同windows计算机读取文件,但不是同一域的一部分。(ASP.NET C#应用程序) 已尝试FileStream(无法验证)、已尝试FileWebRequest(使用文件:///时恢复为FileStream)和模拟(),在我的Vista上显示“模拟失败”。 更新:我已修复“模拟失败”问题。但是仍然会从另一台机器获得“拒绝访问”,即使我在这两台机器上都“镜像”了用户,所以问题仍然是… 什么是完成这项任务的正确方法?我不确定这是否是正确的方法,但这是我完成这项任务的方法。假设您

我想从同一网络上的不同windows计算机读取文件,但不是同一域的一部分。(ASP.NET C#应用程序)
已尝试FileStream(无法验证)、已尝试FileWebRequest(使用文件:///时恢复为FileStream)和模拟(),在我的Vista上显示“模拟失败”。
更新:我已修复“模拟失败”问题。但是仍然会从另一台机器获得“拒绝访问”,即使我在这两台机器上都“镜像”了用户,所以问题仍然是…

什么是完成这项任务的正确方法?

我不确定这是否是正确的方法,但这是我完成这项任务的方法。假设您知道该计算机的登录名,我P/Invoke一个到IPC$对象的ownetconnection以向该计算机进行身份验证,完成我的工作,然后执行另一个P/Invoke以删除到IPC$的连接。

可能不是您想要的答案,但您要求的是正确的方法,所以。。。将文件服务器加入域并授予ASP.NET的服务帐户对共享的访问权限。

请尝试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]"/>

将驱动器(例如“Z:”映射到运行代码的机器上的远程机器)。
用户可以使用Z:…

访问文件,为什么不编写一个简单的服务来为文件提供服务呢?您可以根据需要添加身份验证等。IMHO,试图通过网络共享或类似的方式直接访问该文件只会让事情出错。