Domanda

Mi stava ottenendo il temuto "client ha trovato il tipo di contenuto di risposta del testo di" Testo / HTML "ma previsto" Test / XML ", ma dopo alcuni googling ho trovato Questo post su come restituire una excexception.

Così sono andato avanti e ho implementato che, ma ora sto ancora ottenendo lo stesso errore. Ci sono cambiamenti che ho bisogno di fare sul lato del cliente per poter accettare l'eccesso di sapone (non lo penserei, tutto semplicemente eredita da eccezione, giusto?)

Perché sto ancora ottenendo quella temuta risposta sul lato 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);
        }
    }
.

Modifica: so che l'eccezione in questo blocco di cattura è esattamente ciò che devo vedere, ma sto ancora ricevendo il sistema.invalidoperationException sul lato client.

Edit2: mi sto connettendo ai servizi Web tramite un Webbreference (chiamando un file * .asmx) se questo aiuta / conta.

Edit3: Ecco cosa viene scritto nel nostro lato server di eccezione (nella chiamata PublishingManager.Publish ()). Il mio pensiero era che questo dovrebbe essere ciò che è tornato al cliente ...

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: Vuoi solo lanciare questo codice extra codice in modo che le persone vedano come sto testando queste eccezioni (e forse è il modo sbagliato per testare ...). Nel mio primo codice Chunk, ho la chiamata all'interno del blocco Try per "restituire componenti.pwd.getconversionerrors ();", ecco questo metodo:

    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;
        }
    }
.

Come puoi vedere, ho commentato la chiamata effettiva, e ho appena lanciato la mia linea che getterà un'eccezione ogni volta che fa il test ...

Edit4: @GBVB Ecco il nuovo metodo:

    [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: Che Fiddler2 ha visto:

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>
.

Se qualcuno sa come formato bene questa sezione, per favore fai :)

È stato utile?

Soluzione

Allora, l'ho capito.Ecco cosa ho scoperto:

Durante la visualizzazione delle proprietà del mio sito Web in IIS, scegliendo "Moduli", c'è una voce chiamata "PersonerRoRORRORORRODULO" che sta tentando di elaborare gli errori che vengono lanciati dal sito web / servizio Web.

La correzione è rimuovere quella voce "PersonerRoRORRORORRODULE" o aggiornare il mio file di configurazione da:

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

A:

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

Grazie a tutti per l'aiuto, mi ha guidato nella giusta direzione.(BTW, sto aggiornando il file di configurazione in modo da non dover scherzare con il modulo del modulo)

anche, Ecco un link spiegando questa situazione.

Altri suggerimenti

Solo per le risatine, puoi provare esplicitamente la nuova soapexception () con Saplexception.ClientFaultCode come il tipo da quella chiamata?Ovviamente, hai diversi livelli che potrebbero non riuscire nel codice che si mostra sopra ed è facile da confondere (credimi, lo so :)).E non chiamare gli altri metodi come Publisher.Publish .. che indicherà se è la dichiarazione dei messaggi (I.e. Asmx infrastruttura) o è il tuo codice che sta scherzando con l'eccezione ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top