Comment Gérer WebFaultException de retour CustomException?

J'ai fait mon exception personnalisée qui sera lancée à l'intérieur try-catch chaque fois qu'une erreur est survenue:

[Serializable]
public class CustomException : Exception
{
    public CustomException() { }

    public CustomException(string message)
        : base(message) { }

    public CustomException(string message, Exception innerException)
        : base(message, innerException) { }
}  

J'ai deux services, REST et SOAP. Pour le SAVON services, je n'ai pas de problème sur le lancement de mon personnalisée d'exception.
Mais dans le RESTE, j'ai rencontré beaucoup de difficultés.

Voici la méthode pour lancer un WebFaultException:

    public static WebFaultException RestGetFault(ServiceFaultTypes fault)
    {
        ServiceFault serviceFault = new ServiceFault();
        serviceFault.Code = (int)fault;
        serviceFault.Description = ConfigAndResourceComponent.GetResourceString(fault.ToString());
        FaultCode faultCode = new FaultCode(fault.ToString());
        FaultReasonText faultReasonText = new FaultReasonText(serviceFault.Description);
        FaultReason faultReason = new FaultReason(faultReasonText);
        WebFaultException<ServiceFault> webfaultException = new WebFaultException<ServiceFault>(serviceFault, HttpStatusCode.InternalServerError);

        throw webfaultException;
    }  

ServiceFault est une classe où il a certaines propriétés qui je utiliser pour mettre toutes les informations dont j'ai besoin.

J'utilise cette méthode lève une exception à l'intérieur de REPOS de service:

    public static CustomException GetFault(ServiceFaultTypes fault)
    {
        string message = fault.ToString();
        CustomException cusExcp = new CustomException(message, new Exception(message));
        throw cusExcp;
    }  

Un échantillon de Service REST (journal de la méthode):

    [WebInvoke(UriTemplate = "Login", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    public Session Login(ClientCredentials client, LogCredentials loginfo)
    {
        try
        {
            //Login process
            return copied;
        }
        catch (LogicClass.CustomException ex)
        {
            LogicClass.RestGetFault(LogicClass.EnumComponent.GetServiceFaultTypes(ex.Message));
            throw ex;
        }
    }  

Le MVC partie:

Contrôleur:

    [HttpPost]
    public ActionResult Login(LoginCredentials loginfo)
    {
        try
        {
            string param = "{\"client\":" + JSonHelper.Serialize<ClientAuthentication>(new ClientAuthentication() { SessionID = Singleton.ClientSessionID })
                           + ", \"loginfo\":" + JSonHelper.Serialize<LoginCredentials>(loginfo) + "}";

            string jsonresult = ServiceCaller.Invoke(Utility.ConstructRestURL("Authenticate/Login"), param, "POST", "application/json");
            UserSessionDTO response = JSonHelper.Deserialize<UserSessionDTO>(jsonresult);

        }
        catch (Exception ex)
        {
            return Json(new
            {
                status = ex.Message,
                url = string.Empty
            });
        }

        return Json(new
        {
            status = "AUTHENTICATED",
            url = string.IsNullOrWhiteSpace(loginfo.r) ? Url.Action("Index", "Home") : loginfo.r
        });
    }  

- Je utiliser ServiceCaller.Appeler pour appeler l'API REST et récupérer la réponse:
ServiceCaller.cs

public class ServiceCaller
{
public static string Invoke(string url, string parameters, string method, string contentType)
{
string results = string.Empty;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url));
request.Method = method;
request.ContentType = contentType;
if (!string.IsNullOrEmpty(parameters))
{
byte[] byteArray = Encoding.UTF8.GetBytes(parameters);
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
}
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (HttpStatusCode.OK == response.StatusCode)
{
Stream responseStream = response.GetResponseStream();
int length = (int)response.ContentLength;
const int bufSizeMax = 65536;
const int bufSizeMin = 8192;
int bufSize = bufSizeMin;
if (length > bufSize) bufSize = length > bufSizeMax ? bufSizeMax : length;
byte[] buf = new byte[bufSize];
StringBuilder sb = new StringBuilder(bufSize);
while ((length = responseStream.Read(buf, 0, buf.Length)) != 0)
sb.Append(Encoding.UTF8.GetString(buf, 0, length));
results = sb.ToString();
}
else
{
results = "Failed Response : " + response.StatusCode;
}
}
catch (Exception exception)
{
throw exception;
}
return results;
}
}  

Je m'attends à ce que le RESTE de retour de ce côté client:

Comment Gérer WebFaultException de retour CustomException?

Mais à la fin, il retourne toujours à ceci:

Comment Gérer WebFaultException de retour CustomException?

Que dois-je faire? S'il vous plaît aider.

MODIFIER

Voici un exemple de réponse lorsque vous appelez le service soap:

[FaultException: InvalidLogin]
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +9441823  

Avez-vous vu le InvalidLogin" ? C'est ce que je veux voir sur la réponse de REPOS servivce.
Exemple de réponse de REPOS:

[WebException: The remote server returned an error: (500) Internal Server Error.]
System.Net.HttpWebRequest.GetResponse() +6115971  

Je jette un WebFaultException mais je reçois un WebException.
Si je ne vais pas être en mesure de récupérer le message d'erreur exact sur le RESTE, je vais aller pour le SAVON.
Merci pour les réponses.

pas de réponse? hmm... 🙁
Est-ce un service WCF et si oui, est votre configuration mis en place pour les erreurs de retour pour le client?
Je suis à la recherche pour le même type de réponse...je n'arrive pas à comprendre comment faire un REPOS, comme gestionnaire, qui lève une exception significative. En fait j'ai juste à régler avec mon code JavaScript à l'aide de la textStatus comme une réussite ou d'échec.

OriginalL'auteur fiberOptics | 2012-05-29