4

過去 2 日間、カスタム HTTP ハンドラーを機能させようとしていますが、結果はありません。次のエラーが表示されます。

タイプ「AlarmHandler」をロードできませんでした。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.Web.HttpException: タイプ 'AlarmHandler' を読み込めませんでした。

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

私はいくつかのチュートリアルに従いましたが、小さなものが欠けていると思います。次の構成を使用しています。

  • IIS7.5
  • DefaultPool は統合モードに設定されています
  • すべてのファイルはルート ディレクトリ (C:\inetpub\wwwroot) にあります。
  • NO IIS7.5 で定義されたハンドラー マッピング
  • Web プロジェクト

AlarmHandler.ashx.cs :

using System.Web;
public class AlarmHandler : IHttpHandler
{
    // Constructor.
    public AlarmHandler() { }


    public void ProcessRequest(HttpContext context)
    {
        HttpRequest Request = context.Request;
        HttpResponse Response = context.Response;

        // Test code.
        Response.Write("<html>");
        Response.Write("<body>");
        Response.Write("<h1>Hello from a synchronous custom HTTP handler.</h1>");
        Response.Write("</body>");
        Response.Write("</html>");
    }


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

alarms.ashx :

<% @ WebHandler language="C#" class="AlarmHandler" codebehind="AlarmHandler.ashx.cs" %>

web.config :

<configuration>
    <system.webServer>
        <handlers>
            <add name="AlarmHandler" path="*.ashx" verb="*" type="IHttpHandler" />
        </handlers>
    </system.webServer>
</configuration>
4

2 に答える 2

3

私のために働いたのは変化していました:

<% @ WebHandler language="C#" class="AlarmHandler" codebehind="AlarmHandler.ashx.cs" %>

に:

<% @ WebHandler language="C#" class="Namespace.AlarmHandler" codebehind="AlarmHandler.ashx.cs" %>

宣言さNamespaceれている名前空間はどこにありますか。AlarmHandler

これを念頭に置いて、ハンドラー登録をこれに変更することは良い考えかもしれないと思います:

<add name="AlarmHandler" path="*.ashx" verb="*" type="Namespace.AlarmHandler" />

余談ですが、私はHTTPハンドラーを何度も使用していて、それらを登録するのに苦労したことはありません(私の場合、Ajaxを介して明示的に呼び出す傾向があります)ので、この行は必要ないかもしれません。

編集:

この場合、Visual Studioを使用していないため、binディレクトリがないという点で少し異なります。そのため、ハンドラーを使用して少し異なる方法で処理する必要があります。

現時点では、ハンドラーはASHXファイルとCSファイルに分割されています。通常はこれで問題ありませんが、あなたの場合はそれらを組み合わせる必要があります。

これはファイルの内容であるAlarms.ashx必要があります(ファイルはもう必要ありAlarmHandler.ashx.csません):

<% @ WebHandler language="C#" class="AlarmHandler" %>

using System.Web;

public class AlarmHandler : IHttpHandler
{
    // Constructor.
    public AlarmHandler() { }

    public void ProcessRequest(HttpContext context)
    {
        HttpRequest Request = context.Request;
        HttpResponse Response = context.Response;

        // Test code.
        Response.Write("<html>");
        Response.Write("<body>");
        Response.Write("<h1>Hello from a synchronous custom HTTP handler.</h1>");
        Response.Write("</body>");
        Response.Write("</html>");
    }

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

余談ですが、これまでのチュートリアルでは、ほぼ確実にVisual Studioを使用していると想定していたため、発生した問題の一部が説明されている可能性があります。

于 2012-11-12T09:14:37.350 に答える