it-swarm-eu.dev

Jak může být chyba 'Klient nalezen typ obsahu odpovědi' text/html '.. být interpretován

Používám C # a připojuji se k WebService přes automaticky generovaný C # proxy objekt. Metoda, kterou volám, může být dlouhá a někdy i mimo. Dostanu různé chyby, někdy dostanu System.Net.WebException nebo System.Web.Services.Protocols.SoapException. Tyto výjimky mají vlastnosti, které mohu zjistit, abych našel konkrétní typ chyby, ze které můžu uživateli zobrazit verzi, která je přátelská k lidem.

Někdy ale dostanu jen InvalidOperationException a má následující zprávu. Existuje nějaký způsob, jak mohu interpretovat, co to je, bez toho, abych prokopal řetězec pro věci, které poznávám, které jsou velmi špinavé, a ne internacionalizované agnostiky, chybová zpráva se může vrátit v jiném jazyce.

Client found response content type of 'text/html; charset=utf-8', but expected 'text/xml'.
The request failed with the error message:
--
<html>
    <head>
    <title>Request timed out.</title>
                        <style>
         body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;} 
         p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
         b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
         H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
         H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
         pre {font-family:"Lucida Console";font-size: .9em}
         .marker {font-weight: bold; color: black;text-decoration: none;}
         .version {color: gray;}
         .error {margin-bottom: 10px;}
         .expandable { text-decoration:underline; font-weight:bold;     color:navy;         cursor:hand; }
        </style>
    </head>

    <body bgcolor="white">

            <span><H1>Server Error in '/PerformanceManager' Application.<hr     width=100% size=1 color=silver></H1>

            <h2> <i>Request timed out.</i> </h2></span>

            <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">

            <b> Description: </b>An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

            <br><br>

            <b> Exception Details: </b>System.Web.HttpException: Request timed out.<br><br>

            <b>Source Error:</b> <br><br>

            <table width=100% bgcolor="#ffffcc">
               <tr>
                  <td>
                      <code>

An unhandled exception was generated during the execution of the current web request. Information regarding the Origin and location of the exception can be identified using the exception stack trace below.</code>

                  </td>
               </tr>
            </table>

            <br>

            <b>Stack Trace:</b> <br><br>

            <table width=100% bgcolor="#ffffcc">
                   <tr>
                  <td>
                      <code><pre>

[HttpException (0x80004005): Request timed out.]
</pre></code>

                  </td>
               </tr>
            </table>

            <br>

            <hr width=100% size=1 color=silver>

            <b>Version Information:</b> Microsoft .NET Framework Version:2.0.50727.312; ASP.NET Version:2.0.50727.833

            </font>

    </body>
</html>
<!-- 
[HttpException]: Request timed out.
-->
--.

Edit: Na web-serveru mám metodu try-catch. Odladil jsem ji a metoda webového serveru vrátí (po minutě nebo tak) bez výjimky. Přidal jsem také neošetřenou obsluhu výjimek ve webové službě a bod zlomu nebyl zasažen. Jakmile se webová služba vrátí, dostanu tuto chybu v klientovi namísto očekávaného výsledku.

25
Scott Langham

Děje se to proto, že ve webové službě existuje neošetřená výjimka a runtime rozhraní .NET vypouští stránku XML žluté stránky chyby serveru smrti/výpisu výjimek místo XML.

Vzhledem k tomu, že spotřebitel vaší webové služby čekal text/xml záhlaví a místo toho dostal text/html, vyvolá tuto chybu.

Měli byste se zabývat příčinou vašeho časového limitu (možná dlouhý dotaz SQL?).

Také, pokladna tento blog post na blogu Jeffa Atwooda, který vysvětluje implementaci globální neošetřené obsluhy výjimky a použití SOAP výjimky.

40
Seibar

To znamená, že váš spotřebitel očekává, že XML z webu webservice, ale webservice, jak se zobrazuje chyba, vrátí HTML, protože to selhává z důvodu časového limitu. 

Musíte se tedy obrátit na poskytovatele vzdáleného webového servisu, abyste věděli, že selhává a přijme nápravná opatření. Pokud nejste poskytovatelem služby webservice, v takovém případě byste měli zachytit výjimky a vrátit XML uživateli, která chyba se vyskytla („vzdálený poskytovatel“ by to měl také udělat).

9
Vinko Vrsalovic

Pokud používáte .NET verze 4.0. validateRequestion je standardně zapnut pro všechny stránky. v předchozích verzích 1.1 a 2.0 to bylo pouze pro stránku aspx. Výchozí ověření můžete vypnout. V takovém případě musíte provést náležitou péči a zajistit, aby údaje byly čisté. Použijte HtmlEncode. Vypněte ověření platnosti následujícím způsobem

Do web.config Přidejte následující řádky pro system.web

 <httpRuntime requestValidationMode="2.0" />

 <pages validateRequest="false" />

Další informace o tomto http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes Naleznete také http://msdn.Microsoft.com/en-us /library/ff649310.aspx

Snad to pomůže.

5
Mhoque

Mělo se to stát v důsledku chyby konfigurace v souboru web.config. Odpověď na časový limit by mohla být kontrola připojovacího řetězce atd.

4
oekstrem

Webový server vrací chybový kód http 500. Tyto chyby se obvykle dějí, když výjimka v hozený na webserver a není tam žádná logika chytit, takže to vyplivne chybu http 500. Problém lze obvykle vyřešit umístěním bloků try-catch do kódu.

4
bastos.sergio

Odstraňte soubor web.config a vložte jej znovu. http://forums.asp.net/post/916808.aspx

3
aolmez

Tuto chybu jsem dostal po změně webové služby návratového typu a SoapDocumentMethod .

Původně to bylo:

[WebMethod]
public int Foo()
{
    return 0;
}

Rozhodl jsem se, že typ ohně a zapomeň na typ takto:

[SoapDocumentMethod(OneWay = true)]
[WebMethod]
public void Foo()
{
    return;
}

V takových případech pomohla aktualizace webového odkazu.

Aktualizace odkazu na webovou službu:

  • Rozbalte Průzkumník řešení
  • Vyhledat Webové odkazy - bude viditelné pouze tehdy, pokud jste do projektu přidali odkaz na webovou službu
  • Klikněte pravým tlačítkem myši a klikněte na odkaz Aktualizovat webový odkaz
1
student

Je vaše webová služba správně nakonfigurována ve službě IIS? Je používán fond, který používá verzi ASP.NET (2.0)? Můžete procházet .asmx?

Pokud jde o výjimky, zkuste v řádku, který přistupuje k webové službě, umístit blok try-catch. Put a catch (System.Web.Services.Protocolos.SoapException).

Také můžete nastavit časový limit pro objekt webservice.

1
Erup

Problém, který jsem měl, se týkal verze SOAP. Služba asmx byla nakonfigurována tak, aby přijímala obě verze 1.1 a 1.2, takže si myslím, že když spotřebujete službu, klient nebo server neví, jakou verzi vyřeší.

Chcete-li to opravit, je nutné přidat:

using (wsWebService yourService = new wsWebService())
{
    yourService.Url = "https://myUrlService.com/wsWebService.asmx?op=someOption";
    yourService.UseDefaultCredentials = true; // this line depends on your authentication type
    yourService.SoapVersion = SoapProtocolVersion.Soap11; // asign the version of SOAP
    var result = yourService.SomeMethod("Parameter");
}

Kde wsWebService je název třídy generované jako reference.

0
Phi