none
IIS + ASP.net で要求を無視する方法 RRS feed

  • 質問

  • IIS + ASP.net で、特定の要求に対して、全くの無応答とする方法はありますか?

    ・空応答 (EmptyResult)

    ・ステータスコードを設定したレスポンスエラー応答

    等ではなく、TCPレベルで応答しない方法があるのか知りたいです。

    よろしくお願いいたします。

    2016年9月23日 21:06

すべての返信

  • > IIS + ASP.net で、特定の要求に対して、全くの無応答とする方法はありますか?

    「特定」とは具体的にどういうことですか? 何を持って「特定」と判断するのでしょう?

    ASP.NET は何でしょう? Web Forms? MVC? Web API? その他?

    > TCPレベルで応答しない方法があるのか知りたいです。

    「TCPレベルで応答しない」というのは TCP セッションも張らないようにするということですか? 多分違うと思うのですが、違うのであればどういうことか説明願います。

    2016年9月24日 0:32
  • 外池と申します。ご質問の文面を直に受け止めれば、原理的に出来ないことを仰っていると思います。

    「IIS+ASP.netで特定の要求に対して」となれば、何らかの形でクライアントから送信されたhttpのrequestをサーバーで受信することが前提になり、そのrequestの中身によって動作を切り替えることかと思います。しかし、この時点で既に、tcpレベルではサーバーは何らかの応答をしてしまっています。つまり、httpでクライアントのrequestをサーバーで受信すること自体が、tcpの要求と応答で組み立てられているということです。

    httpレベルでresponseを一切しないことは可能だと思います。



    • 編集済み 外池 2016年9月24日 1:32
    2016年9月24日 1:13
  • 皆様ご回答下さりありがとうございます。

    ・ ASP.NET のプラットフォーム種類についてはここでは意識しません。 
     どのような事が可能なのか、いろいろとパターンを探っておきたいのです。
     IISモジュール、ハンドラ、構成ファイルなど、直接ASPと関わらない方法でも構いません。

    ・ 特定の要求とは、 URL、Cookie、 IPなど、リクエスト要求の内容に応じて、応答するしないを
     プログラムによって動的に判断させる、ということです。
     すべての要求を無視するのであれば、IISのサービスを止めれば良いのですが、そういうことではありません。

    ・ TCPレベル、という質問では、ご指摘の通り不可能だという結論になると思います。
     では、HTTPレベルでは、どのような方法がありますでしょうか?

    例えば、サーバーに高負荷がかかり、無応答状態になってしまったような状況をシミュレート出来るとベストです。

    async await Task を使ってCometパターン的なものであればすぐに出来そうですが

    応答まで長時間にする、ということでなく、サーバー側では何もため込まない状態にしたいです。

    上記の通り、いろいろパターンを知っておきたいと考えています。

    よろしくお願い致します。

     





    2016年9月24日 7:18
  • https://msdn.microsoft.com/ja-jp/library/y3bwdsh3(v=vs.80).aspx

    あたりが参考になるのではないかと。

    2016年9月24日 8:50
  • ご回答ありがとうございます。

    ご提示いただいたURLにつきまして

    記載内容は理解できますが、今回の質問内容との関連性が良く分かりません。

    可能であればもう少し具体的にご提示いただけるとありがたいです。

    よろしくお願い致します。

    2016年9月24日 9:49
  • イベントベースのWebプログラミングにおいて、httpのresposeが返されるより前のイベントが何か? ということに帰着される問題だと思った次第。ご紹介さしあげたページの一番最後に「アプリケーションイベントとセッションイベント」という項があります。requestの内容次第で処理を一切打ち切ってresponseを戻さなければよいのだと思いますが。

    一方で、この線で進めると、asp.netと絡まないrequestの場合は、IISがコード404でresponseしてしまうこともあるわけで、一切httpでresponseしないという要求には沿えない可能性が高いです。IIS単独でhttpのrequestに応じてresponseするかどうかの処理を分岐させる方法は、小生は存じません。
    2016年9月24日 10:59
  • 旧ASP.net の場合、パイプライン中の17種ある全てのイベントは、Responseの前に発生していて
    最初のBeginRequestの時点で既に、HttpContextに対してHttpRequestとHttpResponseの両方が生成されていると理解しています。
    HttpResponseを生成しない、もしくはHttpResponseを返さない?という、方法は存在していないのではないかと理解していますので今回の質問をさせていただきましたが
    もしそのような方法をご存知の方いらっしゃいましたら、ご教示いただきたくお願い致します。




    2016年9月24日 11:14
  • サーバーにおいて、ASP.netでHttpResponseのインスタンスが作られることと、httpのresponseがサーバに向けて送信されることは同義じゃないと思います。

    • 編集済み 外池 2016年9月24日 11:22
    2016年9月24日 11:18
  • HttpResponse.Flush()された時点で応答ストリームに対して書き込みが始まり、クライアントへの応答が始まるものと理解しています。

    可能性としては、HttpResponseや応答ストリームに対してなんらかの処理を行えば、表題に対する回答となるかもしれないとは感じています。



    2016年9月24日 11:38
  • Flushされた、というより、Flushする、しないを決めるプログラムにすればいいわけですよね?

    HttpResponseのメンバーをざっと調べたら、自動でresponse送信するか、明示的にFlushしたときのみresponse送信するか、選べるようですが?
    2016年9月24日 12:35