2009-11-12 8 views
6

다른 사이트에서 내 데이터베이스에 오류를 저장하는 데 사용할 수있는 웹 서비스를 만들었습니다."System.Web.HttpContext에는 매개 변수없는 생성자가 없기 때문에 직렬화 할 수 없습니다."


은 System.Web.HttpContext 될 수 없습니다 : 그런 다음 그러나, 나는 내 웹 서비스에 대한 다음과 같은 오류를 받고 있어요 등 오류, 필터 오류를 검색, 자신의 오류를 볼 수 내 사이트에 올 수 매개 변수없는 생성자가 없으므로 직렬화됩니다.

설명 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 시작된 위치에 대한 자세한 정보는 스택 추적을 검토하십시오.

예외 정보 : System.InvalidOperationException : System.Web.HttpContext에는 매개 변수없는 생성자가 없기 때문에 직렬화 할 수 없습니다.

 
void Application_Error(object sender, EventArgs e) 
{ 
    // Code that runs when an unhandled error occurs 

    WebService.Errors.ErrorHandler.LogError(HttpContext.Current, Server.GetLastError(), "NOLDFHOI"); 
} 
:

 
[WebMethod] 
public static void LogError(HttpContext context, Exception exception, string APIKey) 
{ 
    //Log the error 
} 

예외를 기록하는 웹 서비스를 사용하는 외부 사이트 Global.asax 파일에 다음 코드를 포함


웹 서비스는 다음과 같은 기능을 포함

웹 서비스의 HttpContext를 자신의 사이트에서 가져올 수 있습니까?

답변

0

수집하려는 정보를 보관할 수 있도록 직렬화 가능한 클래스를 만들어야합니다. 그런 다음 클래스의 새 인스턴스를 만들고 필요한 정보를 수집 할 해당 클래스에 정적 메서드를 만듭니다.

LogError에 전달되는이 새 클래스가됩니다.

+0

해당 클래스는 내 웹 서비스 또는 외부 사이트에 포함됩니까? 나는 클라이언트에게 더 많은 코드를 추가하라고 말할 필요가 없다. –

+0

외부 사이트에 있어야하며 컨텍스트에 대한 액세스 권한이 있어야합니다. – AnthonyWJones

8

HttpContext를 직렬화 할 수 없습니다. 최선의 방법은 HttpContext에서 원하는 정보를 캡슐화하고이를 WebMethod에 전달하는 맞춤 클래스를 만드는 것입니다.

+0

+1 정확히 -이 방법은 호출자가 ASP.NET 응용 프로그램에서 가져 오지 않은 호출자에게도 메소드를 엽니 다. Winforms 앱은 HttpContext를 가지고 있지 않으므로이 "LogError"메서드를 절대 호출 할 수 없습니다. 디자인 측면에서 최선의 선택은 아닙니다 ... –

+0

@Joseph :이 사용자 정의 클래스는 어떻게 생깁니 까? 어떤 종류의 매개 변수를 찾고 있습니까? '정보를 캡슐화'한다는 것이 정확히 무엇을 의미합니까? – GobiasKoffi

+0

@rohanbk 원하는 정보가 들어있는 속성을 가진 POCO 클래스가됩니다. HttpContext를 통해 속성을 설정 한 다음 와이어를 통해 해당 클래스를 사용합니다 (POCO를 Serializable로 표시 할 수 있어야하므로) – Joseph

관련 문제