Web アプリケーション プロジェクトに ASP.NET Generic Web Handler (*.ashx) があります。Web サーバー上のパスは/Services/PayPal/IPNListener.ashx
.
IPNListener.ashx
<%@ WebHandler Language="C#"
CodeBehind="IPNListener.ashx.cs"
Class="Portal.Services.PayPal.IPNListener" %>
IPNListener.ashx.cs
//-----------------------------------------------------------------------------
// <copyright file="IPNListener.cs" company="DCOM Productions">
// Copyright (c) DCOM Productions. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Web;
using Portal.PayPal;
namespace Portal.Services.PayPal
{
/// <summary>
/// Summary description for IPNListener
/// </summary>
public class IPNListener : IHttpHandler
{
/// <summary>
/// Receives the HttpWebRequest via an HttpContext and processes the request
/// </summary>
public void ProcessRequest(HttpContext context) {
// I gutted this, because it still produces the same error
context.Response.Write("Hello World!");
}
/// <summary>
/// Gets a System.Boolean value that indicates whether the generic handler may be reused
/// </summary>
public bool IsReusable {
get {
return false;
}
}
}
}
ハンドラーに移動しようとすると、次のエラーが表示されます。
Parser Error
Description: An error occurred during the parsing of a resource required to service
this request. Please review the following specific parse error details
and modify your source file appropriately.
Source Error
Line 1: <%@ WebHandler Language="C#"
CodeBehind="IPNListener.ashx.cs"
Class="Portal.Services.PayPal.IPNListener" %>
Source File: /portal/services/paypal/ipnlistener.ashx Line: 1
これが私がこれまでに行ったことです:
(1)ハンドラーの内臓。Hello World
コードでエラーが発生する可能性を排除するために、投稿したコードに見られるように、単純なハンドラーに分解しました。ハンドラーは以前は問題なく動作していましたが、実際には何が原因で動作を停止したのかわかりません。
(2)バージョン管理を確認しました。前に言ったように、ハンドラーは 1 日かそこら前まで問題なく動作していました。ファイルの履歴のバージョン管理をチェックして、何かが変更されたかどうかを確認しましたが、変更されていません。
(3)アプリケーションプール。IIS 7 でアプリケーション プールを確認したところ、正常に実行ASP.NET v4.0
されています。
(4)検証済みのビルド アクション。IPNListener.ashx
のビルド アクションが に設定されていることContent
、およびそのIPNListener.ashx.cs
ビルドアクションが に設定されていることを確認しましたCompile
。
(5) DLL の完全性を検証。IL 逆アセンブラーを使用Portal.Services.PayPal.IPNListener
して、コンパイルされた DLL ファイルに型が存在することを確認しました。
(6)仮想アプリケーション ディレクトリ。フォルダー/Services/PayPal
は仮想アプリケーションではなく、汎用ハンドラーが機能するようにする必要はありませんでしたが、とにかく試してみましたが、同じエラーが引き続き生成されます。
(7)クリーン リビルド。ソリューションをクリーニングしてから再構築してみました。コンパイル エラーはありません。次に、Web アプリケーションの公開に進みます。すべて問題ありません。
(8)依存関係を確認しました。必要なすべてのファイルと依存関係がデプロイされていることを確認しました。すべてがチェックアウトします。
なぜこれが機能しなくなったのか、私にはまったくわかりません。私の最初のソフトウェア製品のすべてがテストされ、今日すべてをライブで公開する準備が整いました。支払いサービスで最後のテストを実行したとき、500 内部サーバー エラーが返されました。さらに調査したところ、原因がこの問題。
私は実際には本当に困惑しています。ASHX ハンドラーに関する他のすべての投稿と、StackOverflow でのこの問題、および Web 全体を検索しましたが、ここでの特定の問題に役立つものは何も見つかりませんでした。
私が見落としているのは本当に単純なことかもしれませんが、指を置くことができないようです。
(更新) 2012 年5 月 29 日午後 10 時 57 分。Ray Cheng
さんのコメントと私のコメントから離れて、サービスが に住んでいて/PayPal/IPNListener.ashx
、 に移動したことに気付きました/Services/PayPal/IPNListner.ashx
。移動が完了すると、すべての名前空間とクラスの場所が ASHX ファイルで更新されました。
好奇心から、ハンドラーを にコピーし/PayPal/IPNListener.ashx
、ASHX ファイルの名前空間とクラスを更新し、その場所に移動したところ、サービスは正常に動作しました。
本質的に
/Services/PayPal/IPNListener.ashx
が原因で 500 内部サーバー エラーが発生しCould not create type
、
/PayPal/IPNListener.ashx
うまく動作します。では、なぜハンドラーを 1 フォルダー階層上に置くと、作業に違いが生じるのでしょうか?