2012-05-30 2 views
3

웹 응용 프로그램 프로젝트에 ASP.NET 일반 웹 처리기 (* .ashx)가 있습니다. 웹 서버의 경로는 /Services/PayPal/IPNListener.ashx입니다.파서 오류 : ASP.NET 일반 웹 처리기에서 'xyz'형식을 만들지 못했습니다.

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의 빌드 동작이 Content으로 설정되었고 IPNListener.ashx.cs의 빌드 동작이 Compile으로 설정되어 있는지 확인했습니다.

(5) 확인 된 DLL 무결성. 컴파일 된 DLL 파일에 Portal.Services.PayPal.IPNListener 유형이 있다는 것을 IL 디스어셈블러를 사용하여 확인했습니다.

(6) 가상 응용 프로그램 디렉터리. /Services/PayPal 폴더는 가상 응용 프로그램이 아니기 때문에 Generic Handler가 작동하도록 만들 필요가 없었지만 어쨌든 시도했지만 동일한 오류가 여전히 발생했습니다.

(7) 깨끗한 재구성. 솔루션을 청소 한 다음 다시 작성하려고했습니다. 컴파일러 오류가 없습니다. 그런 다음 웹 응용 프로그램을 게시하면 모든 것이 정상입니다.

(8) 확인 된 종속성. 필자는 필요한 모든 파일과 종속물이 배포되었는지 확인했습니다. 모든 것이 체크 아웃됩니다.

나는 왜 이것이 작동을 멈추었는지 전혀 알지 못합니다. 모든 것이 테스트를 마쳤으며 첫 번째 소프트웨어 제품에 대한 모든 내용을 게시 할 준비가되었습니다. 지불 서비스에 대한 마지막 테스트를 한 경우 500 내부 서버 오류가 반환되었습니다.이 오류로 인해 추가 조사를 통해 이 문제.

저는 실제로 정말 엉망입니다. 나는 ASHX 핸들러와 이슈에 관한 다른 모든 글들을 StackOverflow에서 검색했다. 여기에는 웹 전체가 포함되어 있었고 여기서 나의 특별한 문제에 도움이되지 않았다.

내가 간과하고있는 것이 정말 간단 할 수도 있지만, 내 손가락을 넣을 수는 없습니다.

(업데이트) 5/29/2012 10:57 PM. Ray Cheng 님의 댓글 및 광산에서 벗어나 서비스가 /PayPal/IPNListener.ashx에 살고 있으며 /Services/PayPal/IPNListner.ashx으로 옮겨 졌음을 알았습니다. 이동이 끝나면 모든 네임 스페이스와 클래스 위치가 ASHX 파일에서 업데이트되었습니다.

호기심에서 벗어난 곳에서 핸들러를 /PayPal/IPNListener.ashx으로 복사하고 ASHX 파일의 네임 스페이스와 클래스를 업데이트 한 다음 위치로 이동하면 서비스가 정상적으로 작동합니다.

는 기본적으로

/Services/PayPal/IPNListener.ashx 

Could not create type로 인해 500 내부 서버 오류를 생산하고

/PayPal/IPNListener.ashx 

작품 잘. 그렇다면 왜 핸들러를 하나의 폴더 계층 구조로 만드는 것이 효과가 있습니까?

+0

소스가 변경되지 않으면 IIS 구성시 또는 서버에 게시하는 동안 잘못된 것이 틀림 없습니다. 배포 방법은 무엇입니까? –

+0

배포 할 서버가 2 대 있습니다. 첫 번째는'File System Deploy'를 사용하는 로컬 IIS7 서버입니다. 두 번째는'FTP Deploy'를 사용하는 라이브 원격 서버 (또한 IIS7)입니다. 두 서버 모두 똑같은 문제가 발생합니다. 퍼블리싱은 파일을 서버로 가져오고 파일을 복사하는 것 이외에는 퍼블리싱 중에 특별한 작업을 수행하지 않습니다. 내가 생각할 수있는 유일한 또 다른 점은 이전에'/ Services/PayPal/IPNListener.ashx' 대신에'/ PayPal/IPNListener.ashx'에 있던 서비스 였지만 ASHX에서는 웹상의 어떤 경로라도 설정해야한다는 것입니다. config 또는 뭐니 뭐니해도 ... –

+0

ashx 파일을 구문 분석 할 때 기본적으로 리소스/파일/어셈블리가 없다는 오류 메시지가 누락되었습니다. 게시하기 전에 대상 서버가 비어 있는지 확인하십시오.또한, 나는 당신이'Portal.PayPal'을 사용하고'네임 스페이스 Portal.Services.PayPal '을 가지고있는 것을 보았습니다. 네임 스페이스가 충돌하지 않는지 확인하십시오. –

답변

1

문제는 간단합니다. IIS 7 서버 2 대가 로컬 테스트 용이고 다른 서버는 인터넷에 있습니다.

로컬 IIS 서버의 부모 디렉터리 /Services이 가상 응용 프로그램으로 설정되어 있습니다. 나는 어딘가에 제너릭 핸들러의 경로에 가상 애플리케이션을 가지고 있으면 ASP 엔진이 핸들러 타입을 생성하지 못하는 것을 발견했다. 이는 이전 경로가 가상 응용 프로그램이 아니고 후자가 처리기를 중단했기 때문에 /PayPal/IPNHandler.ashx에서 /Services/PayPal/IPNHandler.ashx으로 서비스를 옮기는 것이 왜 잘못되었는지 설명합니다.

/Services에 대한 가상 응용 프로그램을 제거하면 테스트 서버에서 문제가 해결되고 예상대로 작동합니다.

어쨌든 가상 응용 프로그램이 존재하지는 않지만이 핸들러 이상에서는 /Services이 사용 되었기 때문에 감독이었습니다.

라이브 서버의 문제는 처리기에서 사용 된 WCF 서비스의 서비스 주소가 localhost 별칭을 사용하는 테스트 서버를 가리키고있어 잘못된 주소임을 확인했습니다. 라이브 서버는 가상 응용 프로그램 구성 또는 아무 문제가 없었지만 잘못된 주소였습니다.

잘못된 주소를 업데이트하면 500 내부 서버 오류가 해결되었습니다. 이것은 파싱 오류를 일으키는 처리기의 원래 문제와 관련이 없지만 모든 것이 작동 할 수 있기 전에 발견되고 해결 된 두 번째 문제였습니다.

관련 문제