我的 Web 应用程序项目中有一个 ASP.NET 通用 Web 处理程序 (*.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)检查版本控制。就像我之前说的,处理程序大约一天前工作正常。我检查了文件历史的版本控制以查看是否有任何更改,但实际上没有。
(3)应用程序池。我检查了 IIS 7 中的应用程序池,它运行正常ASP.NET v4.0
。
(4)已验证的构建操作。我验证了IPNListener.ashx
's build action 设置为Content
,并且IPNListener.ashx.cs
's build action 设置为Compile
。
(5)已验证 DLL 完整性。我使用 IL Disassembler 验证了该类型Portal.Services.PayPal.IPNListener
确实存在于编译的 DLL 文件中。
(6)虚拟应用目录。该文件夹/Services/PayPal
不是一个虚拟应用程序,我从来不需要让它成为一个通用处理程序的工作,但我还是尝试了它,仍然产生了同样的错误。
(7)清洁重建。我试过清理解决方案,然后重建。没有编译器错误。然后继续发布Web应用程序,一切都很好。
(8)检查依赖项。我检查以确保所有必需的文件和依赖项都已部署。一切都检查出来。
我真的不知道为什么这会停止工作。一切都经过测试,准备好今天发布我的第一个软件产品的所有内容,当我在支付服务上进行最后一次测试运行时,它返回了 500 内部服务器错误,进一步调查表明这是由这个问题。
我真的很难过。我在 StackOverflow 以及整个网络上搜索了有关 ASHX 处理程序和此问题的所有其他帖子,但发现对我的特定问题没有任何用处。
这可能是我忽略的非常简单的事情,但我似乎无法理解它。
(更新)2012 年 5 月 29 日晚上 10:57。离开Ray Cheng
的评论和我的评论,我意识到该服务曾经居住在/PayPal/IPNListener.ashx
,并已移至/Services/PayPal/IPNListner.ashx
。移动完成后,所有命名空间和类位置都在 ASHX 文件中更新。
出于好奇,我将处理程序复制到/PayPal/IPNListener.ashx
,更新了 ASHX 文件中的命名空间和类,然后导航到该位置,服务运行良好。
本质上
/Services/PayPal/IPNListener.ashx
由于Could not create type
, 和
/PayPal/IPNListener.ashx
工作得很好。那么,为什么将处理程序设置为一个文件夹层次结构会影响工作呢?