6

問題を単純化するために、サンプル プロジェクトを作成しました。私はこの単純なハンドラーを持っています:

public class HandleThis : IHttpHandler, IRequiresSessionState
{

    public void ProcessRequest( System.Web.HttpContext context )
    {
        // Score.aspx just says "success"
        context.Response.Redirect( "Score.aspx" );
    }

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

次に、私の設定では、これがあります:

<httpHandlers>
<add verb="*"
path="Survey"
type="HttpHandlerTest.HandleThis, HttpHandlerTest" />

http://server/Surveyにアクセスすると、ハンドラーが起動します。

プロジェクトを IIS 6 で実行するように変更すると、起動しません (404)。次の方法で IIS にハンドラーを手動で追加しようとしました。

IIS が (非常に便利に) 「.」を追加していることに気付きました。拡張機能の前にあるので、「b.Survey」でサイトにアクセスしました。まだ404です。

IIS 6 にハンドラーを追加することは本当に可能ですか?

4

2 に答える 2

6

「次の方法で IIS にハンドラーを手動で追加しようとしました。

間違った「実行可能」パスを使用しているようです。実行可能パスは、HttpHandler 実装を含む dll ではなく、aspnet isapi dll を指す必要があります。

.aspx 拡張子がマップされているのと同じパスを使用してみてください (多くの場合、これは c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll です)。

于 2009-06-05T15:38:47.273 に答える
3

Cassini では、統合モードで使用しようとするとサーバー内のプログラミングで例外がスローされますが、すべてが開発サーバーを経由します。

IIS7 では、アプリケーションを統合モードで実行している場合に機能します。

IIS6 では、ASPNET_ISAPI.dll に path="*" を割り当ててから、上記と同じ引用符で囲まれたコードを web.config に含めるか、ハンドラーのパスに拡張子を割り当てる必要があります。

IIS6 で aspnet isapi を * として追加するのに問題がある場合は、Google で「extensionless IIS6」またはステップバイステップのチュートリアルに類似したものを検索してください。

于 2009-06-05T14:51:19.793 に答える