22

IIS 7 共有ホスティング環境に Web サイトがあります。.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);
}
4

6 に答える 6

14

.bat ファイルを作成し、次のコマンドを入力してファイルを実行します。既存のすべての Web サーバー プロセスを強制終了し、問題を解決する必要があります。私は同じ問題を抱えていましたが、うまくいきました。どうもありがとう

taskkill  /fi "imagename eq webdev.webserver40.exe" 
于 2012-12-18T15:13:06.477 に答える
13

以下のリンクから修正を見つけました:

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()


}
于 2013-11-19T19:48:05.147 に答える
3

私たちの環境でこの問題を解決しました。偽装を有効にし、アプリケーション プールを ApplicationPoolIdentity として実行しています。

問題は、偽装されたユーザーがファイルへのアクセス権を持っていたにもかかわらず、アプリ プール ID がソース ファイルへの読み取りアクセス権を持っていないことが原因でした。これを解決するのが難しいのは、ユーザー プールとアプリ プールの両方にアクセス権がない場合、アクセス許可エラーが発生することです。

于 2015-08-17T13:21:35.270 に答える
2

私の場合、このファイルに読み書きしようとしていました:

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");
于 2014-03-26T14:46:28.987 に答える
2

編集: 最初はページの読み込みに関する部分を見逃していました。クエリ文字列から何が渡されているのか正確にはわかりませんが、Server.MapPath を使用してみましたか? だから代わりに

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

あなたが持っている

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

それが役立つかどうか教えてください。

于 2011-10-12T18:24:02.700 に答える
0

私の場合、これは特定のユーザーのログインに対してのみ発生しました。他のすべてのユーザーはそれを機能させました。

この問題は、ユーザーの LoginEmail の余分な空白でした。

これは、Asp.net ID と偽装を使用してホスティング サーバー上のディレクトリから Excel ファイルをダウンロードする MVC アプリケーションで発生しました。

奇妙なもの!

于 2018-04-06T14:57:13.630 に答える