我想从同一网络上的不同 Windows 机器上读取文件,但不是同一域的一部分。(ASP.NET C# 应用程序)
尝试过 FileStream(无法进行身份验证),尝试过 FileWebRequest(使用 file:/// 时恢复为 FileStream)和模拟(support.microsoft.com/kb/306158#4),上面写着“模拟失败”在我的 Vista 上。
更新:我已经修复了“模拟失败”问题。但是仍然从另一台机器上得到“拒绝访问”,即使我在两台机器上都有“镜像”用户,所以问题仍然存在......
完成这项任务的正确方法是什么?
问问题
5942 次
4 回答
1
可能不是您正在寻找的答案,但您要求正确的方法,所以... 将文件服务器加入域并授予 ASP.NET 的服务帐户访问共享的权限。
于 2009-11-30T08:05:13.397 回答
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]"/>
虽然这听起来像是一个安全风险,但让您的应用程序采用网络用户的凭据而不是匿名用户的默认值。
无论如何,这里有更多:如何:在 ASP.NET 2.0 中使用模拟和委派
于 2009-12-01T00:38:55.437 回答
0
将驱动器(例如“Z:”)映射到运行代码的机器上的远程机器。使用 Z:... 访问文件
于 2014-02-20T23:27:55.997 回答
0
我不确定这是否是正确的方法,但我就是这样做的。假设您知道该计算机的登录名,IP/Invoke 到 IPC$ 对象的 WNetConnection 以与机器进行身份验证,完成我的工作,然后执行另一个 P/Invoke 以删除与 IPC$ 的连接。
于 2009-08-10T02:39:10.950 回答