Question

Je reçois le type de contenu de réponse redouté de "Texte de la réponse" de "Text / html", mais prévu "Test / XML", mais après un googling, j'ai trouvé cet article sur la façon de retourner une impression SOAPEXEXE.

Alors je suis allé de l'avant et j'ai mis en œuvre cela, mais maintenant je reçois toujours la même erreur. Existe-t-il des changements que je dois faire sur le côté client pour pouvoir accepter la SoapException (je ne le pense pas, tout ne fait que hériter d'exception, non?)

Pourquoi est-ce que je reçois toujours cette réponse redoutée du côté du client?

    [WebMethod]
    [SoapHeader("authenticationHeader")]
    [WebServiceAuthentication(AuthenticationRequired = false)]
    public DataSet GetConversionErrors()
    {
        try
        {
            return Components.PWD.GetConversionErrors();
        }
        catch (Exception ex)
        {
            PublishingManager.Publish(ex, HttpContext.Current.User.Identity.Name);
            throw Components.SoapException.GenerateSoapException(ex, Context);
        }
    }

Edit: Je sais que l'exception dans ce bloc de capture est exactement ce que j'ai besoin de voir, mais je reçois toujours le système.InvalidoperationException sur le côté client.

Edit2: Je me connecte aux webservices via une différence (appelant un fichier * .asmx) si cela aide / importe.

Edit3: Voici ce qui est écrit à notre côté Server Exceptionnel (dans la publicationMangerager.Publish () appel). Ma pensée était que cela devrait être ce qui est retourné au client ...

Exception Details:
Exception Type: System.Exception
Message: Test the text/html text/xml message. 
Method: PWD.Components.PWD.GetConversionErrors 
Username: xxxxxx Created 5/22/2012 4:20:53 PM 
Application: xxxx Application Identity: NT AUTHORITY\IUSR 
Source: xxxx Severity 2 
Machine: xxxxxxxxx IP Address 127.0.0.1 
AppDomain /LM/W3SVC/1/ROOT-1-129821937733610609 
Stack Trace    at PWD.Components.PWD.GetConversionErrors() in C:\Vault\Development-New\Web\Main_Logging\PWD\Components\PWD.cs:line 73 
   at PWD.PWD.GetConversionErrors() in C:\Vault\Development-New\Web\Main_Logging\PWD\PWD.asmx.cs:line 44 
Additional Information:
  +System.Exception: 
    Message: Test the text/html text/xml message. 
    Data: System.Collections.ListDictionaryInternal 
    InnerException:  
    TargetSite: System.Data.DataSet GetConversionErrors() 
    StackTrace:    at PWD.Components.PWD.GetConversionErrors() in C:\Vault\Development-New\Web\Main_Logging\PWD\Components\PWD.cs:line 73 
   at PWD.PWD.GetConversionErrors() in C:\Vault\Development-New\Web\Main_Logging\PWD\PWD.asmx.cs:line 44 
    HelpLink:  
    Source: xxxx 
     UserName: xxxxxxx 
     TypeName: PublishingManager 
     MachineName: xxxxxxxxx 
     TimeStamp: 5/22/2012 4:20:54 PM 
     FullName: Services.Publishing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=null 
     AppDomainName: /LM/W3SVC/1/ROOT-1-129821937733610609 
     ThreadIdentity:  
     WindowsIdentity: NT AUTHORITY\IUSR 
     Severity: 2 
     MachineIPAddress: 127.0.0.1 

Edit3: Je veux juste jeter ce morceau de code supplémentaire pour que les gens voient comment je teste ces exceptions (et peut-être que c'est la mauvaise façon de tester ...). Dans mon premier chunk de code, j'ai l'appel à l'intérieur du bloc d'essai pour "retourner des composants.pwd.getconversionerrors ();", voici cette méthode:

    public static DataSet GetConversionErrors()
    {
        DB db = new DB();

        try
        {
            //return db.ExecuteDataset(Configuration.GenericConfig.AppConnectionString, CommandType.Text, spGetConversionErrors);
            throw new Exception("Test the text/html text/xml message.");
        }
        catch
        {
            throw;
        }
    }

Comme vous pouvez le constater, j'ai commenté l'appel réel et je viens de lancer dans ma propre ligne qui organisera une exception à chaque fois à des fins de test ...

Edit4: @gbvb Voici la nouvelle méthode:

    [WebMethod]
    [SoapHeader("authenticationHeader")]
    [WebServiceAuthentication(AuthenticationRequired = false)]
    public DataSet GetConversionErrors()
    {
        try
        {
            return Components.PWD.GetConversionErrors();
        }
        catch (Exception ex)
        {
            //PublishingManager.Publish(ex, HttpContext.Current.User.Identity.Name);
            //throw Components.SoapException.GenerateSoapException(ex, Context);

            System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
            System.Xml.XmlNode detailNode = xmlDoc.CreateNode(System.Xml.XmlNodeType.Element, System.Web.Services.Protocols.SoapException.DetailElementName.Name, System.Web.Services.Protocols.SoapException.DetailElementName.Namespace);
            detailNode.InnerText = ex.ToString();

            throw new System.Web.Services.Protocols.SoapException(ex.Message, System.Web.Services.Protocols.SoapException.ClientFaultCode, System.Web.HttpContext.Current.Request.Url.AbsoluteUri, detailNode, ex.InnerException);
        }
    }

EDIT5: Qu'est-ce que Fiddler2 a vu:

HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Wed, 23 May 2012 19:25:56 GMT
Content-Length: 1208

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>500 - Internal server error.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
  <h2>500 - Internal server error.</h2>
  <h3>There is a problem with the resource you are looking for, and it cannot be displayed.</h3>
 </fieldset></div>
</div>
</body>
</html>

Si quelqu'un sait à bien formater cette section, veuillez faire:)

Était-ce utile?

La solution

Alors, je l'ai eu pour travailler.Voici ce que j'ai découvert:

Lors de la visualisation des propriétés de mon site Web dans IIS, choisissez "Modules", il existe une entrée appelée "CustomERrormodule" qui tente de traiter les erreurs qui sont lancées par le site web / Web.

Le correctif est de supprimer cette entrée "CustomERormodule" ou mettez à jour mon fichier de configuration de:

<httpErrors errorMode="Custom" existingResponse="Replace">

à:

<httpErrors errorMode="Custom" existingResponse="Auto">

Merci à tout le monde de l'aide, cela m'a dirigé dans la bonne direction.(BTW, je mette à jour le fichier de configuration afin que je n'ai pas à vous désordre avec le module Stuff)

Aussi, Voici un lien Expliquer cette situation.

Autres conseils

Juste pour des rires, pouvez-vous essayer de lancer explicitement une nouvelle soapexception () avec la SoapException.ClientfaultCode comme type de cet appel?De toute évidence, vous avez plusieurs couches qui pourraient échouer dans le code que vous présentez ci-dessus et il est facile de gâcher (croyez-moi, je sais :)).Et ne pas appeler les autres méthodes telles que Publisher.Publish .. Cela indiquera s'il s'agit de la déclaration de message (I.e. Infrastructure ASMX) ou est-ce que votre code qui joue avec l'exception ..

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top