- - PR -
ASP.NETでの閲覧者情報
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-07-23 15:34
通常の方法では上がってこないでしょう。っつうか、だから、投げっぱなしのプロトコルでって言っているんですし。。。「投げっぱなし」の意味が通じてないのかな? できるとしたら、ASP.NET みたいな上の方ではなく、もっと下の方でしょう。 http://www.ascii.jp/pb/msdn/article/a30_0050.html この記事の一番下辺り? http://ja.gotdotnet.com/quickstart/aspplus/doc/httphandlers.aspx
この辺もおもしろいんですよね。 ・厳密に同一人物か判定する必要はない ・10分もすればダウンロードは終了する だったら特に1人が複数を禁止しなくても、全体のトラフィックを制限すれば、結局一緒じゃない。
のあたりを、もう一度考えてみませんか。 > 私が言っている仕様を理解していないだけとしか思えませんが? これ、受け手側だけの問題ではないですよね?発信側に、全く落ち度がない、そう胸を張って言えますか? 私には、HTTP では無理なことをおっしゃっていると思います。HTTP 以外のプロトコルを使うなら、あるいは可能でしょう。また、ActiveX でなくても、“ノータッチデプロイメント”というキーワードを既に出しています。CodeZine に、Windows Form を IE でホストする方法がありますから、それを利用する方法もあります。IE に限定してしまって良いのなら、これを応用することで、かなり近いことができるでしょう。同じようなものは、ここでも既出なので、というか、私が2002〜2003年に質問しまくってますから、探してください。 _________________ | ||||||||||||
|
投稿日時: 2005-07-23 15:36
HTTPでは出来ないっていう批判は的外れではないでしょうか。HTTPで出来ないことと、HTTPを実装しているMicrosoft ASP.NETで出来ないということは違います。
また、ちなみに、IPをチェックする目的は、接続情報の共有ではなく過剰接続の排斥にあるわけですから、接続妨害の可能性はあっても、ハイジャックの危険性があるようには僕には思えません。僕はあまり詳しくないので、問題を理解していないのかもしれませんが、セッションハイジャックを問題視している方々が、具体的にどういう危険性を懸念しているのか、教えていただけると参考になります。 さて、余談はその程度にしておいて。 で、何も自分で確認したわけではありませんが、HttpContext(aspxページならPage.Contextプロパティ)にはErrorやAllErrorsといったプロパティがあるので、レスポンス処理を始める前にエラーが無かったものが(ClearError()なんてのもあるみたいです)、「処理が完了した」時点でエラーになっていたら、ダウンロードが失敗したと見なせるんじゃないかと思います。ここにはSocketExceptionなどが格納されるんじゃないかと推測します。 「処理が完了した」かどうかをチェックするには、HttpContextのResponse.OutputStream.CanWriteがfalseになっているかどうかで(少なくとも概ね)判断出来そうな気がします。 以上の推測が正しいとしたら、ダウンロード処理を開始する時点で、HttpApplicationの中に、HttpContextのリストを格納しておけば良いと思います(ちなみにこのチェックを走らせれば、同時に走っているダウンロードの「みなし」数も計測できそうな気がします)。このリストは、DL要求が開始されるたびに、またダウンロード数の検出が必要な場面で、あるいはThreading.Timer(ApplicationStart/Endで開始/終了)などを使って、随時行い、「完了した」要求があれば、「ダウンロード成功数」を+1して、リストから削除します(そうしないと大変なことになるのでw)。 ダウンロードのレジュームが、どのような仕様に基づいて実現されている機能なのかは、僕には分かりません… 単なる思いつきなので、上手くいかなかったらごめんなさい。HttpContextのインスタンスをずっと生存させておくのは、基本的には邪道だと思います。 | ||||||||||||
|
投稿日時: 2005-07-23 16:34
Jitta氏
投げっぱなし? HTTPはTCP/IPなのですから投げっぱなしという事は無いですよね? ASP.NETで情報は取れないでしょうが、下層では分かるはずです。 ならば、下層の情報を何かの方法でASP.NETから取得できないものか。 こういった情報が欲しい訳です。
これは考え方の違いだと思います。 1人または特定の人間のせいで全体にトラフィックを掛ける。 これは、誰か特定の人間のせいで全員にとばっちりが来るということです。 これでは不公平ですよね? ならば、1人1つずつのダウンロードに制限し、ルールも設ける。 ルールを破った人間が迷惑かかろうが、それはルールを破った人間の自業自得。 こういった考えの元に仕様が決まりました。 全体のトラフィックも最終的には掛けますが、これはダウンロード制限などを実装し、 ある程度の期間様子をみてからユーザにストレスの掛からない程度に掛けるつもりです。
ですから、何度も書いていますが、無理なら無理でかまわないのです。 HTTP以外の技術で何とかならないか。 またHTTPでもある程度の前提条件が伴えば、それなりの精度のものが作れればいいのです。 | ||||||||||||
|
投稿日時: 2005-07-23 17:08
んー・・・なんっつーかね。
ざっと見てみた限り、理解してるつもりになってるだけのよーな気がする。
勉強しなおしてきて下さい。
.NETに関して勉強しておらんので確かじゃないけど、恐らくAtsushi.Enoさんが答えてらっしゃる事が該当すると思います。 (で、Atsushi.Enoさんの答えをJavaに当てはめた時の答えが、masaさんがおっしゃっている事に該当するのだと思います。)
新しいプロトコルでも作るつもりなんでしょうか? (なんっつーか・・・なんとなくここらへんの所が頭に浮かんだ・・・) | ||||||||||||
|
投稿日時: 2005-07-23 17:19
HTTPはTCP/IP上で提供されるとは限りませんよ。http://www.ietf.org/rfc/rfc2068.txt より
[QUOTE] HTTP communication usually takes place over TCP/IP connections. The default port is TCP 80, but other ports can be used. This does not preclude HTTP from being implemented on top of any other protocol on the Internet, or on other networks. [/QUOTE] ASP.NETはTCP/IPベースで提供されていますが、HttpRuntimeをファイルベースのシステムで利用することだって可能です。(Microsoftがそういうテストツールを社内で持っていることは想像に難くありません。) もちろん、TCP/IPはUDPとは異なり、投げっぱなしということはありません。(ていうか、どうして投げっぱなしという話が出てきたのか、僕には分かりません。説明ぷりーず!) | ||||||||||||
|
投稿日時: 2005-07-23 17:38
訳がわからないことに・・・
HTTPがTCP/IP上で提供されるとは限らない。 ASP.NETはTCP/IPベースで提供されている。 TCP/IPはUDPと違い投げっぱなしではない。 ならば、我々が特に意識せず使用しているASP.NETはTCP/IPであり 投げっぱなしでは無いという事ではないのでしょうか? 私の認識が間違ってるのでしょうか?
HTTPで無理というならHTTP以外なら何でも良い訳であり、 どこかにログが取られていてそういった情報を使うとか TCP/IPでの状況がわかればなんとかなるなら、パケットモニタのような機能を作り、 そこから情報を取得するとか、なんでも良い訳です。 新しいプロトコルを作るつもりはありません。 また、返答して頂いてる方が、難しく考え過ぎている気がするのは気のせいでしょうか? | ||||||||||||
|
投稿日時: 2005-07-23 20:16
そうです。しかし
これは間違いです。(強調筆者) これで訳がわかるかと思います。 | ||||||||||||
|
投稿日時: 2005-07-23 23:17
こんばんは。
「投げっぱなしのプロトコル」の引用元が、がるがる様の以下の発言だとする ならば、ここで語られている言葉の意味は「ステートレス」であること、もし くは「ステータスをやり取りするようなことはしない」、ということを表現し たいのであって、UDPを表現する際によく使われる「投げっぱなし」とは意味 合いが違うのであろうと解釈しました。 Jitta様はどのような解釈をしたのでしょうか? 以下、がるがる様発言より引用
|