Quelle est la meilleure façon pour les erreurs de retour à partir d'un service WCF dans une bonne voie?

À l'aide de la WCF dans une bonne voie semble grand. Je suis un grand fan de la grosse artillerie comme la simplicité et la flexibilité, mais j'aime aussi la façon dont l'Url a l'air. Ce que je peux dire, je suis un programmeur.

L'API simple pour la récupération et modification des ressources est compensée par une presque aussi simple ensemble de réponses d'erreur possibles, et je peux pas m'empêcher de penser que, pour en rester à une “pure” approche RESTful j'ai peut-être la coupe de mon nez hors de dépit en face, ou plus précisément, le nez de mon web service consommateurs. J'ai peut-être tort, mais il ne semble pas être très nombreux codes d'erreur Http que je peux utiliser, et aucun moyen de passer de nouveau un message d'erreur personnalisé.

Pour préciser, je parle de la bonne exceptionnel erreurs et ne devrait pas les erreurs. Je veux communiquer un problème à l'utilisateur pour les aider à identifier ce qu'ils doivent faire pour la corriger.

Des options possibles, je suis en considérant...

  1. Suffit d'utiliser les codes d'erreur Http – Ce sembler comme il serait trop restrictif de ce que je suis en mesure d'exprimer, et ne me permet pas de fournir un message personnalisé. S'il vous plaît(!) corrigez-moi si je me trompe.

  2. Toujours de retour Http Succès, mais le retour d'erreur personnalisés objets – de toute Évidence, la plus flexible, mais certainement pas le plus Reposant.

Je serais vraiment reconnaissant si quelqu'un pouvait partager certains de l'expérience réelle de ce problème particulier.


Mise à jour

Merci pour la suggestion de l'utilisation de la StatusDescription propriété de la OutgoingWebResponseContext objet. Il semblait à première vue être quelque chose que je pourrais utiliser.

Je suis venu à la conclusion que mon deuxième option ci-dessus n'est pas pour moi. Je veux coller à la ce Http peut me donner.

Je vais avoir des problèmes pour la faire fonctionner, cependant. Quelle que soit la valeur que je l'approvisionnement pour cette propriété, il n'est pas retourné dans la réponse.

Mon service méthode ressemble à ce

public MyType GetMyTypes(string criteria)
{
    try
    {
        return GetMyTypes();
    }
    catch (Exception ex)
    {
        OutgoingWebResponseContext response = WebOperationContext.Current.OutgoingResponse;
        response.StatusCode = HttpStatusCode.Forbidden;
        response.StatusDescription = "A Big fat error occurred";
        return null;
    }
}

Et voici les premières message de réponse. Il n'y a aucune mention de la coutume message...

HTTP/1.1 403 Forbidden

Serveur: ASP.NET Serveur de Développement/9.0.0.0

Date: Wed, 07 Jan 2009 14:01:20 GMT

X-AspNet-Version: 2.0.50727

Cache-Control: private

Content-Length: 0

Connection: Close

C'est pas comme si j'ai juste besoin d'accéder à la propriété correcte sur le client. L'information n'est tout simplement pas envoyé à travers le lien.

Qu'est-ce StatusDescription bien faire réellement?


Mise à jour

Je n'ai jamais trouvé comment configurer le StatusDescription de la propriété. J'ai pas de message d'erreur, et d'aller uniquement avec les codes d'état Http. J'ai choisi de présenter à la fois le Savon de repos et de points de terminaison pour mes services, et afin que les clients peuvent choisir qui ils préfèrent utiliser – le simple Reposant messages ou le plus riche des messages Soap.