【问题标题】:Check if file from remote server exists检查来自远程服务器的文件是否存在
【发布时间】:2014-12-07 23:43:17
【问题描述】:

我有一个应用程序需要访问远程服务器上的文件的权限。

我的应用在服务器 A,我要访问的文件在服务器 B。这两台服务器在同一个域中。

我在服务器A中为服务器B中的目录创建了一个虚拟目录。虚拟目录的名称是FolderFromServerB,它的路径是\ServerB\Folder。我使用用户进行身份验证,当我在 IIS 中测试连接时,它说一切正常。

此外,当我将锚标记放入如下所示的测试文件中时,我可以访问该文件并且内容显示在页面中:

<a href="FolderFromServerB/test.txt">Test file</a> -->  **This works**

但我的问题是当我使用代码来判断该文件是否存在时,它总是返回 False。我的代码如下:

FileInfo fi = new FileInfo(@"\FolderFromServerB/test.txt"); --> 这不起作用

Response.Write(fi.Exists); --> 这总是“假”

我向服务器 B 中的用户和网络服务以及所有人和管理员授予“完全控制”权限,但我都没有工作。

我怎样才能让它工作?

上周还在工作。我猜服务器更新了自己并且发生了一些更新,但我找不到任何解决方法。我现在非常绝望,我必须更改所有代码并花费大量时间才能使其正常工作。

【问题讨论】:

  • 虚拟目录仅存在于网络服务器级别。我怀疑您的 c# 代码会意识到它的存在,因为 c# 直接与文件系统打交道。它相当于一个 Apache Alias,它也存在于 webserve 级别。
  • 你想达到什么目的?我认为您正面临XY Problem。如果您描述自己的目标,而不是您想要达到的方式,我们可能会更好地帮助您。这个文件里有什么样的数据?实际上,我认为访问文件系统数据是一种不好的做法。或者更准确地说,如果应用程序需要处理数据,我倾向于在应用程序外部创建一个临时目录,在其中为自定义应用程序池设置正确的权限。

标签: c# iis file-exists applicationpoolidentity


【解决方案1】:

我在 web.config 中找到了解决方法:

<identity impersonate="true"  userName="{domain}\{username}" password="{password}"/>

我使用 File.Exist() 几个月,但突然它消失了,没有工作,我不知道为什么。但就是上面的解决方案。

【讨论】:

  • 您应该在应用程序池属性中设置应用程序的标识。
【解决方案2】:

您的代码不起作用,因为 ASP.Net 应用程序的当前执行文件夹不是您应用程序的文件夹,而是c:\windows\system32

当您创建FileInfo 对象时,您将尝试读取c:\windows\system32\FolderFromServerB\test.txt

&lt;a href="FolderFromServerB/test.txt"&gt; 有效,因为链接将相对于当前页面(如果该页面位于另一个目录中,它将不起作用)。

如果您要查找的文件在您的应用程序目录下,您可以使用以下方法将虚拟路径转换为物理路径:

string actualFilePath = HttpContext.Current.Server.MapPath("~/FolderFromServerB/test.txt");
FileInfo fi = new FileInfo(actualFilePath);

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 2020-06-23
    • 1970-01-01
    • 2014-01-31
    • 2013-01-01
    • 2010-12-12
    • 2011-06-03
    • 1970-01-01
    • 2017-09-13
    相关资源
    最近更新 更多