- PR -

フロントコントローラについて

1
投稿者投稿内容
HYK-N
会議室デビュー日: 2004/07/12
投稿数: 2
投稿日時: 2004-07-13 11:53
はじめまして。
ASP.NET(C#)歴2年のひろぱぱと申します。
よろしくお願いします。

現在、Microsoftのpatterns&practicesにあるフロント コントローラについて
調査を行っています。
IHTTPHandlerインターフェースを実装し、ここで着信HTTP要求を処理してから
各ページに制御を移すといったものです。
サンプルを作成したのですが、エラーが発生してしまい、調査が滞っている状態です。

実行(開発)環境:
Windows2000 Pro
IIS 5.0
.NET Framework 1.0

■テストサイト(サイト名:TEST)
WebForm1.aspx
WebForm2.aspx
※各ページには処理の実装はありません。
※Web.Configには、以下の設定を行いました。
コード:
     <httpHandlers>
	<add verb="*" path="*.aspx" type="Handler,FrontController"></add>
     </httpHandlers>


■フロント コントローラ
コード:
   public class Handler : IHttpHandler
   {
      public void ProcessRequest(HttpContext context)
      {
         context.Server.Transfer("/TEST/WebForm2.aspx");
      }

      public bool IsReusable
      {
         get
	 {
	    return true;
	 }
      }
   }


エラー内容:
ブラウザより、TEST/WebForm1.aspx を入力するとWebForm2.aspxが表示されると
思っていたのですが以下のエラーが context.Server.Transfer にて発生してしまっています。

[HttpException (0x80004005): /TEST/WebForm2.aspx の子の要求を実行中にエラーが発生しました。]
System.Web.HttpServerUtility.ExecuteInternal(String path, TextWriter writer, Boolean preserveForm) +1692
System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm) +24
System.Web.HttpServerUtility.Transfer(String path) +77
Handler.ProcessRequest(HttpContext context) in c:/visual studio projects/frontcontroller/handler.cs:14
System.Web.CallHandlerExecutionStep.Execute() +179
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +87

やってみた事:
的を外しているかも知れませんが...

  • IISの設定にて、TESTサイトのディレクトリ セキュリティの匿名アクセスのチェックを外す。
  • Inetpub/wwwroot/testディレクトリにASPNETユーザのフルアクセス権限を設定。


長くなってしまい申し訳ありません。
対処方法などご存知の方がいらっしゃいましたらご教授お願いします。

以上 よろしくお願いします。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-07-13 13:40
引用:

ひろぱぱさんの書き込み (2004-07-13 11:53) より:
IHTTPHandlerインターフェースを実装し、ここで着信HTTP要求を処理してから
各ページに制御を移すといったものです。
サンプルを作成したのですが、エラーが発生してしまい、調査が滞っている状態です。


あんまり詳しくないんですが、単純に考えて永久に転送を続けてしまいませんか?
HYK-N
会議室デビュー日: 2004/07/12
投稿数: 2
投稿日時: 2004-07-13 14:24
なちゃさん、レスありがとうございます。
私の認識が間違っていましたら、ご指摘お願いします。

context.Server.Transferですが、動作としては以下の様に考えています。

1:ブラウザより/TEST/WebForm1.aspxを入力
2:context.Server.Transferにて/TEST/WebForm2.aspxに移動
3:1:の応答として、/TEST/WebForm2.aspxがかえる
※このときのブラウザのアドレスバーには、/TEST/WebForm1.aspxが表示されている。
...と考えていたので、永久に転送されることはないと思っていました。

ちなみに、Redirectでも実行しましたが、これについては
なちゃさんのご指摘通り、永久に転送を続けてしまいました...

さらに、Transferをコメントアウトして実行した場合は、ブラウザで指定した
ページは表示されず、HTML、HEAD、BODYタグのみが送信されていました。
該当ページまで処理が届いていませんでした。

そこでTransferを実装しました。

そもそも、このやり方に問題があるのでしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)