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...
-
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.
-
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.
- désolé, je suis hors du temps, mais peut-être que ce lien robbagby.com/rest/effective-error-handling-with-wcf-rest pourrait être utile.
Vous devez vous connecter pour publier un commentaire.
Envoyer le bon code de réponse et vous pouvez fournir le message d'erreur personnalisé dans le corps de la réponse.
Avec .net 4, jeter un
WebFaultException<T>
(T errorDetail,
HttpResponseCode
code)
Ici, vous définissez votre type de réponse à un autre type d'objet, qui fait sens, et aussi vous définissez la
ResponseCode
que vous voulez.La
errorDetail
doivent être sérialisableshttp://blogs.msdn.com/b/endpoint/archive/2010/01/21/error-handling-in-wcf-webhttp-services-with-webfaultexception.aspx
- Je ajouter le code d'erreur à la fois comme ci-dessus (dans la description) et dans le corps de la page dans mon REPOS des services comme:
Voir ce fil pour une question similaire.
En un mot, je crois que vous pouvez définir le code d'état HTTP (pour l'un des codes d'erreur), et de fournir votre message personnalisé dans la StatusDescription propriété:
Je ne sais pas beaucoup au sujet de la prévalence de cette technique dans le monde réel malheureusement.
Cela peut être un défaut. Comme de 9/22/2011, la question est examinée par l'équipe de produit:
http://connect.microsoft.com/VisualStudio/feedback/details/690162/wcf-rest-custom-outgoingwebresponsecontext-statusdescription-not-returned-in-response