从Sharepoint应用程序页面访问远程文件

时间:2011-09-02 08:03:19

标签: sharepoint permissions

在我的Sharepoint应用程序页面中,我正在尝试从网络共享文件夹中复制文件..我的代码如下所示..

    try
    {
        File.Copy("\\MShare\Public\Test.txt", "C:\Temp\Test.txt", true);
        LblMessage.Text = "File copied.";
    }
    catch (Exception ex)
    {
        LblMessage.Text = ex.ToString() + " - " + ex.Message;
    }

如果我在ASP.NET网站上测试相同的代码,它运行良好。但是我收到的错误如下:SP Application Page ..

System.UnauthorizedAccessException: Access to the path '\\MShare\Public\Test.txt' is denied. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite) at System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite) at TestApp.PullingFile.ButGet_Click(Object sender, EventArgs e) - Access to the path '\\MShare\Public\Test.txt' is denied.

我已尝试按照this帖子实施模拟..不工作.. 我尝试使用<trust level="WSS_Medium" originUrl="" />更改web.config也是..

1 个答案:

答案 0 :(得分:0)

默认情况下,SharePoint使用impersonating。这意味着您的代码在当前用户的凭据下运行。该用户没有(也不应该)访问服务器的文件系统。

为了访问文件系统,您可以执行revert to the system accounts credentials

SPSecurity.RunWithElevatedPrivileges(() =>
{
    File.Copy("\\MShare\Public\Test.txt", "C:\Temp\Test.txt", true);
});

您必须牢记的是:

  1. 系统帐户(应用程序池帐户)不一定访问文件系统(最小权限方案)。 (SO question
  2. 系统帐户(应用程序池帐户)不一定访问网络共享。
  3. 访问您的应用程序页面的任何用户都可以执行您的文件复制代码。你必须自己关心授权。
  4. 最后但并非最不重要
    为什么你必须将文件复制到服务器的文件系统呢?你是否需要在服务器上进行物理操作,或者这只是暂时的(正如人们可以通过路径猜测的那样)。