«System.Web.HttpContext не может быть сериализован, потому что у него нет конструктора без параметров». - PullRequest
6 голосов
/ 12 ноября 2009

Я создал веб-сервис, который другие сайты могут использовать для хранения ошибок в моей базе данных. Затем они могут зайти на мой сайт, чтобы просмотреть свои ошибки, выполнить поиск ошибок, отфильтровать ошибки и т. Д. Однако я получаю следующую ошибку для своего веб-сервиса:


System.Web.HttpContext не может быть сериализован, поскольку у него нет конструктора без параметров.

Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.InvalidOperationException: System.Web.HttpContext не может быть сериализовано, поскольку у него нет конструктора без параметров.


Веб-сервис содержит следующую функцию:

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

Внешний сайт, который использует веб-службу для регистрации исключений, содержит следующий код в файле global.asax:

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

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

Как я могу получить HttpContext с их сайта в мою функцию через веб-сервис?

Ответы [ 2 ]

9 голосов
/ 12 ноября 2009

Вы не сможете сериализовать HttpContext. Лучше всего было бы создать собственный класс для инкапсуляции нужной информации из HttpContext и передачи ее в ваш WebMethod.

0 голосов
/ 12 ноября 2009

Вам нужно будет создать сериализуемый класс, предназначенный для хранения информации, которую вы хотите собрать. Затем создайте метод Static для этого класса, который создаст новый экземпляр класса и соберет необходимую информацию.

Это будет новый класс, который будет передан в LogError.

...