2011-01-14 2 views
2

У меня есть веб-служба ASP.NET, а некоторые из полей в запросе определяются как перечисления. При вводе пустой или недопустимое значение, то ответ возвращается как:Захват исключений во время разбора запроса

Parameter name: type ---> System.ArgumentException: Must specify valid information for parsing in the string. 
    at System.Enum.Parse(Type enumType, String value, Boolean ignoreCase) 
    at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type) 
    --- End of inner exception stack trace --- 
    at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type) 
    at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection) 
    at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request) 
    at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters() 
    at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest() 

Можно ли захватить ошибки, как это и возвращает ответ XML на основе вместо этого?

ответ

-1

Конечно, это будет выглядеть примерно так:

try 
{ 
    Enum.Parse(Type enumType, String value, Boolean ignoreCase) 
} 
catch (ArgumentException e) 
{ 
    //Serialise exception information from 'e' into XML 
    //(not shown here) and set it as the response 
    Response.Write(xmlMessage); 
    Response.End(); 
} 
+0

Нет, это исключение выбрасывается обработчиком веб-сервисов и не является кодом земли пользователя. Поэтому вы не можете поместить вокруг нее обертку. –

+0

Даже не в global.asax? –

+1

Нет, если вы прикрепляете обработчик ошибок в global.asax, он не срабатывает. –

2

Нет, нет никакого способа, чтобы сделать это с помощью веб-служб ASMX.

Естественно, вы можете сделать это с помощью WCF.

Конечно, было бы лучше, если бы ваш клиент отправил действительные данные. Возможно, вам захочется выяснить, почему они не являются.

Смежные вопросы