質問者
IIS + ASP.net で要求を無視する方法

質問
すべての返信
-
外池と申します。ご質問の文面を直に受け止めれば、原理的に出来ないことを仰っていると思います。
「IIS+ASP.netで特定の要求に対して」となれば、何らかの形でクライアントから送信されたhttpのrequestをサーバーで受信することが前提になり、そのrequestの中身によって動作を切り替えることかと思います。しかし、この時点で既に、tcpレベルではサーバーは何らかの応答をしてしまっています。つまり、httpでクライアントのrequestをサーバーで受信すること自体が、tcpの要求と応答で組み立てられているということです。httpレベルでresponseを一切しないことは可能だと思います。
- 編集済み 外池 2016年9月24日 1:32
-
皆様ご回答下さりありがとうございます。
・ ASP.NET のプラットフォーム種類についてはここでは意識しません。
どのような事が可能なのか、いろいろとパターンを探っておきたいのです。
IISモジュール、ハンドラ、構成ファイルなど、直接ASPと関わらない方法でも構いません。・ 特定の要求とは、 URL、Cookie、 IPなど、リクエスト要求の内容に応じて、応答するしないを
プログラムによって動的に判断させる、ということです。
すべての要求を無視するのであれば、IISのサービスを止めれば良いのですが、そういうことではありません。・ TCPレベル、という質問では、ご指摘の通り不可能だという結論になると思います。
では、HTTPレベルでは、どのような方法がありますでしょうか?例えば、サーバーに高負荷がかかり、無応答状態になってしまったような状況をシミュレート出来るとベストです。
async await Task を使ってCometパターン的なものであればすぐに出来そうですが
応答まで長時間にする、ということでなく、サーバー側では何もため込まない状態にしたいです。
上記の通り、いろいろパターンを知っておきたいと考えています。
よろしくお願い致します。
- 編集済み CharAzurable 2016年9月24日 8:05
-
イベントベースのWebプログラミングにおいて、httpのresposeが返されるより前のイベントが何か? ということに帰着される問題だと思った次第。ご紹介さしあげたページの一番最後に「アプリケーションイベントとセッションイベント」という項があります。requestの内容次第で処理を一切打ち切ってresponseを戻さなければよいのだと思いますが。
一方で、この線で進めると、asp.netと絡まないrequestの場合は、IISがコード404でresponseしてしまうこともあるわけで、一切httpでresponseしないという要求には沿えない可能性が高いです。IIS単独でhttpのrequestに応じてresponseするかどうかの処理を分岐させる方法は、小生は存じません。 -
旧ASP.net の場合、パイプライン中の17種ある全てのイベントは、Responseの前に発生していて
最初のBeginRequestの時点で既に、HttpContextに対してHttpRequestとHttpResponseの両方が生成されていると理解しています。
HttpResponseを生成しない、もしくはHttpResponseを返さない?という、方法は存在していないのではないかと理解していますので今回の質問をさせていただきましたが
もしそのような方法をご存知の方いらっしゃいましたら、ご教示いただきたくお願い致します。
- 編集済み CharAzurable 2016年9月24日 11:15
-
HttpResponse.Flush()された時点で応答ストリームに対して書き込みが始まり、クライアントへの応答が始まるものと理解しています。
可能性としては、HttpResponseや応答ストリームに対してなんらかの処理を行えば、表題に対する回答となるかもしれないとは感じています。
- 編集済み CharAzurable 2016年9月24日 11:39