【问题标题】:The handle is invalid. (Exception from HRESULT: 0x80070006 (E_HANDLE))句柄无效。 (来自 HRESULT 的异常:0x80070006 (E_HANDLE))
【发布时间】:2011-10-12 11:43:47
【问题描述】:

我在 IIS 7 共享主机环境中有一个网站。它正在运行 .NET 3.5。我有一个下载按钮,可以从服务器下载文件。

当我将此应用程序本地部署到 IIS 6 时,它运行良好。在 IIS 7 共享主机服务器上,发生异常。

句柄无效。 (来自 HRESULT 的异常:0x80070006 (E_HANDLE)) 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
System.Runtime.InteropServices.COMException:句柄无效。 (来自 HRESULT 的异常:0x80070006 (E_HANDLE))
COMException (0x80070006):句柄无效。 (来自 HRESULT 的异常:0x80070006 (E_HANDLE))] [HttpException (0x80004005):与远程主机通信时出错。错误代码为0x80070006。]

如何解决?

string strRequest = Convert.ToString(Request.QueryString.Get("file"));
System.IO.FileInfo file = new System.IO.FileInfo(strRequest);
if (file.Exists)
{
    Response.Clear();
    Response.ContentType = ReturnExtension(System.IO.Path.GetExtension(file.Name));
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + file.Name);
    Response.TransmitFile(strRequest);
    Response.End();
    HttpContext.Current.ApplicationInstance.CompleteRequest();
    //DownloadFile(file.FullName, file.Name);
}

【问题讨论】:

  • An error occurred while communicating with the remote host. The error code is 0x80070006.
  • 我猜这是因为您的共享主机的权限问题。
  • 请告诉我应该授予什么权限?

标签: c# asp.net iis-7 shared-hosting httpexception


【解决方案1】:

创建一个 .bat 文件,输入以下命令并运行该文件。它将杀死所有现有的网络服务器进程并应该解决问题。我有同样的问题,它对我有用。非常感谢

taskkill  /fi "imagename eq webdev.webserver40.exe" 

【讨论】:

  • webdev.webserver40.exe 是 Visual Studio 内置的开发网络服务器,不是吗?这有什么帮助?
  • 是的,完成服务对我也有帮助。我手动完成了。对我来说,真正的原因是“不允许跨线程操作”。 Visual Studio 的开发服务器在此状态下失败。我认为不止一个服务运行并发生跨线程问题。
  • 我重新启动了我的网络服务器,这阻止了异常的发生。不过,我仍然不确定如何防止此错误。
【解决方案2】:

我从下面的链接中找到了解决方法:

http://forums.asp.net/t/1387967.aspx?How+to+create+a+flipcart+like+panel+for+showing+products+in+gridview

if (file.Name == fileName)

{
     Response.ClearContent();
     Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
     Response.AddHeader("Content-Length", file.Length.ToString());
     Response.TransmitFile(file.FullName);
     //Response.End(); Will raise that error. this works well locally but not with IIS
     Response.Flush();//Won't get error with Flush() so use this Instead of End()


}

【讨论】:

  • 请注意,页面执行完成时会自动调用 Response.End(),因此即使您没有显式调用 Response.End(),此答案也可能适用。另请注意,在没有 Response.Flush() 的情况下使用 Response.TransmitFile() 将在 Visual Studio 中工作,但在 IIS 上部署时将无法工作。
  • 确实,上面的代码在几乎没有其他工作的情况下仍然有效。我正要与生产服务器上的 IIS 用户一起思考,该服务器有许多运行良好的活动用户(谁知道与用户混淆可能会破坏)希望我能给你更多的 UpVotes!
【解决方案3】:

我刚刚在我们的环境中解决了这个问题。我们打开了模拟,并让应用程序池作为 ApplicationPoolIdentity 运行。

问题是由于应用程序池标识没有对源文件的读取权限,即使模拟用户确实有权访问该文件。解决这个棘手的问题是,如果用户和应用程序池都没有访问权限,则会出现访问权限错误。

【讨论】:

    【解决方案4】:

    编辑:最初错过了有关页面加载正常的部分。我不确定从您的查询字符串中传递了什么,但是您是否尝试过使用 Server.MapPath?所以不是

    System.IO.FileInfo file = new System.IO.FileInfo(strRequest);
    

    你有

    System.IO.FileInfo file = new System.IO.FileInfo(Server.MapPath(strRequest));
    

    如果有帮助,请告诉我。

    【讨论】:

    • 不,它不是版本问题,我认为如果它是版本问题,整个站点都会给出相同的错误,但事实并非如此,除此之外,一切都正常,我会进一步调查问题,我发现当我使用 Page.Redirect("download.aspx");我尝试了另一种方法,我在 javascript 弹出窗口中打开了一个 download.aspx,它工作正常。我仍然无法理解这个问题,这种方法只能在 Internet Explorer 中的 firefox 中正常工作,只弹出打开并且不出现下载对话框:(
    【解决方案5】:

    在我的例子中,我试图写入和读取这个文件:

    var path = System.IO.Path.GetTempFileName();
    

    我使用了下面的代码并且成功了。我认为 IIS 用户缺少写入或读取临时文件的权限。

    var path = Server.MapPath(@"~\App_Data\Stats");
    Directory.CreateDirectory(path);
    path = Path.Combine(path, String.Format("{0}.csv", Guid.NewGuid()));
    
    using (var streamWriter = new StreamWriter(path))
    using (var csvWriter = new CsvHelper.CsvWriter(streamWriter))
    {
        csvWriter.Configuration.Delimiter = csvWriter.Configuration.CultureInfo.TextInfo.ListSeparator;
    
        csvWriter.WriteRecords(rounds);
    }
    
    return File(path, "text/csv", "Stats.csv");
    

    【讨论】:

      【解决方案6】:

      就我而言,这仅发生在特定用户登录时。每个其他用户都可以正常工作。

      问题是用户的 LoginEmail 中有一个额外的空白。

      这发生在一个 MVC 应用程序中,该应用程序使用 Asp.net Identity 和 Impersonation 从托管服务器上的目录下载 excel 文件。

      奇怪的东西!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-27
        • 2011-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多