Настраиваемая исключительная ситуация WebFaultException при отказе сериализации отдыха WCF? - PullRequest
1 голос
/ 24 августа 2010

С таким объектом:

[DataContract]
public class SampleItem
{              
    private int _id;

    [DataMember(IsRequired = true)]
    public int Id
    {
        get { return _id; }
        set { _id = value; }
    }

    private string _stringValue;

    [DataMember()]
    public string StringValue
    {
        get { return _stringValue; }
        set { _stringValue = value; }
    }

И вызов REST вот так:

[WebInvoke(UriTemplate = "", Method = "POST")]        
public SampleItem Create(SampleItem instance)
{
    if (instance == null)
        throw new WebFaultException<string>("The SampleItem returned wasn't correctly formatted.",
                                            HttpStatusCode.BadRequest);               

    return instance;
}        

Если я позвоню с недопустимым SampleItem, произнесите что-нибудь без идентификатора, например:

<SampleItem xmlns="http://schemas.datacontract.org/2004/07/UserWebServices" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><StringValue>SingleItem</StringValue></SampleItem>

Затем сервер возвращает мне 400 (правильно) без полезной информации об ошибке (все, что я получаю, это: сервер обнаружил ошибку при обработке запроса. Дополнительные сведения см. В журналах сервера). В идеале я хочу сказать, что требуется что-то вроде ID.

Как мне перехватить место, где генерируется эта ошибка, и выдать свое собственное исключение WebFaultException?

1 Ответ

0 голосов
/ 24 августа 2010

Проверьте WebProtocolException из REST Start Kit .Затем вы можете отправить свое сообщение об ошибке в вашем исключении, например:

catch (Exception ex)
        {
            throw new WebProtocolException(HttpStatusCode.InternalServerError, "Unexpected Error.", new ServiceFault { ExceptionDetail = "Your custom error message here" }, null);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...