C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 外部サイトの応答の取得方法


(過去ログ 102 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■61077 / inTopicNo.1)  外部サイトの応答の取得方法
  
□投稿者/ にゅ (1回)-(2011/08/01(Mon) 12:15:15)

分類:[ASP.NET (C#)] 

現在、ASP.NETのページから、外部ダウンロードサーバ(IIS)へResponse.RedirectすることでファイルをDLする動作を行っています。
(Response.Redirect("http://domain/filename.zip")のような感じ)
このとき、DLに失敗したり、ファイルがなかった場合、画面を切り替えたいと思っています。

外部サーバ(IIS)のHTTPステータスコードや、sc-win32-statusを取得する方法があれば
、それで対処ができるのではないかと考えていますが、そういった事は可能でしょうか。
DL成功、DL中断、ファイルがない場合、それぞれ区別したいと考えています。

目的としては、外部サーバからDLでき、失敗したときに画面を切り替えられれば良いので、
Response.Redirectにこだわる必要はないです。
「ダウンロードの仕方から違うよ!」という場合は、その方法も合わせてご教授願いたいと思います。

よろしくお願いします。
引用返信 編集キー/
■61078 / inTopicNo.2)  Re[1]: 外部サイトの応答の取得方法
□投稿者/ 魔界の仮面弁士 (2279回)-(2011/08/01(Mon) 13:02:23)
No61077 (にゅ さん) に返信
> 現在、ASP.NETのページから、外部ダウンロードサーバ(IIS)へResponse.RedirectすることでファイルをDLする動作を行っています。
> (Response.Redirect("http://domain/filename.zip")のような感じ)
> このとき、DLに失敗したり、ファイルがなかった場合、画面を切り替えたいと思っています。

HttpWebRequest 等でファイルをダウンロードして、それを返却してみるとか。
http://www.xtremevbtalk.com/showthread.php?t=263275
引用返信 編集キー/
■61079 / inTopicNo.3)  Re[2]: 外部サイトの応答の取得方法
□投稿者/ にゅ (2回)-(2011/08/01(Mon) 15:15:42)
No61078 (魔界の仮面弁士 さん) に返信
> HttpWebRequest 等でファイルをダウンロードして、それを返却してみるとか。
> http://www.xtremevbtalk.com/showthread.php?t=263275

HttpWebRequestとHttpWebResponseでDLができることや、HTTPステータスコードが取得できることがわかりました。
ありがとうございました。

しかしDL先のIISのログを見てみたところ、HTTPステータスコードは、
ファイルが無いときは404(Not Found)ですが、ダウンロードが成功したとき・失敗(中断)したとき、ともに200(OK)を吐いています。
sc-win32-statusは、DL成功時に0(正常終了)、中断時に995(I/O処理中止)のコードを吐きます。
DL成功失敗を区別したいため、sc-win32-statusをなんとか取得したいと思いますが、可能でしょうか。
引用返信 編集キー/
■61084 / inTopicNo.4)  Re[3]: 外部サイトの応答の取得方法
□投稿者/ 魔界の仮面弁士 (2280回)-(2011/08/01(Mon) 16:41:45)
No61079 (にゅ さん) に返信
> しかしDL先のIISのログを見てみたところ、HTTPステータスコードは、
> ファイルが無いときは404(Not Found)ですが、ダウンロードが成功したとき・失敗(中断)したとき、ともに200(OK)を吐いています。
ダウンロードが中断されたのであれば、HTTP ヘッダに記載されている Content-Length が
実際のファイルサイズと異なる結果になるように思えますが、そこから判定できないでしょうか。


> sc-win32-statusは、DL成功時に0(正常終了)、中断時に995(I/O処理中止)のコードを吐きます。
> DL成功失敗を区別したいため、sc-win32-statusをなんとか取得したいと思いますが、可能でしょうか。
通常、サーバーの Win32 状態は外部に公開されていないと思いますので(多分)、
ファイル公開元の IIS 側に中継用の ASP.NET を仕込むなどして対処できないでしょうか。
たとえば、HTTP ヘッダで該当ファイルの MD5 なり SHA1 なりも返すようにするとか。
引用返信 編集キー/
■61086 / inTopicNo.5)  Re[4]: 外部サイトの応答の取得方法
□投稿者/ にゅ (3回)-(2011/08/01(Mon) 17:56:39)
No61084 (魔界の仮面弁士 さん) に返信
> 通常、サーバーの Win32 状態は外部に公開されていないと思いますので(多分)、
> ファイル公開元の IIS 側に中継用の ASP.NET を仕込むなどして対処できないでしょうか。
> たとえば、HTTP ヘッダで該当ファイルの MD5 なり SHA1 なりも返すようにするとか。
Win32はあくまで内部状態である可能性が高いということですね。
ハッシュを使うというのも、今回できるかはわかりませんが、参考になります。

> ダウンロードが中断されたのであれば、HTTP ヘッダに記載されている Content-Length が
> 実際のファイルサイズと異なる結果になるように思えますが、そこから判定できないでしょうか。
ASP側からそのときダウンロードしたファイルサイズを取得できるものでしょうか。
HttpWebResponse.GetResponseStream()からストリームに書きこむやり方であれば、
処理中断の例外なりをキャッチできそうですね。

ひとまずこれで試してみたいと思います。
アドバイスありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -