Comment l'erreur " le Client a trouvé le contenu de la réponse de type 'text/html'.. être interprété
Je suis à l'aide de C# et de la connexion à un Service web par le biais d'un auto-générés C# proxy de l'objet. La méthode que je vais appeler peut être longue et parfois du temps. Je reçois les différentes erreurs de retour, j'ai parfois l' System.Net.WebException
ou un System.Web.Services.Protocols.SoapException
. Ces exceptions ont des propriétés que je peux interroger pour trouver le type d'erreur spécifique à partir de laquelle je peux afficher un humain-version imprimable de l'utilisateur.
Mais parfois je viens d'obtenir un InvalidOperationException
, et il a le Message suivant. Est-il possible que je peux interpréter ce que c'est sans creuser par le biais de la chaîne de choses que je reconnais, c'est une sensation très sale, et n'est pas internationalisation agnostique, le message d'erreur pourrait revenir dans une langue différente.
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:
J'ai un try-catch autour de la méthode sur le serveur web. J'ai débogué, et le serveur web méthode retourne (après une minute ou deux), sans aucune exception. J'ai aussi ajouté un gestionnaire d'exceptions non gérées dans le service web, et un point d'arrêt, il n'y avait pas touché. Dès que le service web renvoie, j'obtiens cette erreur dans le client et non pas le résultat que j'attendais.
Vous devez vous connecter pour publier un commentaire.
Ce qui se passe, car il y a une exception non gérée dans votre service Web, et la .NET est de cracher son HTML jaune de l'écran de la mort, erreur de serveur/vidage exception de la page, au lieu de XML.
Car le consommateur de votre service Web m'attendais à un texte/xml-tête et au lieu eu text/html, il jette l'erreur.
Vous devez vous adresser à la cause de vos délais d'attente (peut-être une longue requête SQL?).
Aussi, la caisse ce blog sur Jeff Atwood blog qui explique la mise en œuvre globale gestionnaire d'exceptions non gérées et à l'aide de SAVON exceptions.
Qui signifie que le consommateur s'attend à XML à partir de la webservice mais le webservice, que votre erreur indique, renvoie HTML car il est défectueux en raison d'un dépassement de délai.
De sorte que vous devez parler à la distance d'un webservice fournisseur pour faire savoir que c'est à défaut de prendre des mesures correctives. Sauf si vous êtes le fournisseur du service web dans ce cas, vous devez attraper les exceptions et retour XML dire le consommateur qui erreur s'est produite (le "fournisseur distant" devrait probablement faire ainsi).
Si vous êtes en utilisant .NET version 4.0. le validateRequestion est activée par défaut pour toutes les pages. dans les précédentes versions 1.1 et 2.0 c'était uniquement pour la page aspx. Vous pouvez activer la validation par défaut off. Dans ce cas, vous devez effectuer la diligence raisonnable et assurez-vous que les données sont propres. Utiliser HtmlEncode. Procédez comme suit pour activer la validation hors
Dans le web.config
ajoutez les lignes suivantes pour le système.web
et
Vous pouvez lire plus sur ce http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes
aussi http://msdn.microsoft.com/en-us/library/ff649310.aspx
Espère que cette aide.
Le serveur retourne un code d'erreur http 500. Ces erreurs se produisent généralement lorsque une exception dans jetés sur le serveur et il n'y a pas de logique de l'attraper, alors qu'il crache une erreur http 500. Vous pouvez généralement résoudre le problème en plaçant des blocs try-catch dans votre code.
J'ai eu cette se produire en raison d'une erreur de configuration dans le web.config. La vérification de la chaîne de connexion, etc pourrait être la réponse pour le moment.
Supprimer web.le fichier de configuration et l'insérer de nouveau. http://forums.asp.net/post/916808.aspx
Est votre webservice configuré correctement dans IIS? La piscine de son utilisation, la version de ASP.NET (2.0) est réglé? Pouvez-vous parcourir la .asmx?
Parler d'exceptions près, essayer de mettre un bloc try-catch dans la ligne d'accès de votre webservice. Mettre et catch(Système d'.Web.Services.Protocolos.SoapException).
Aussi, vous pouvez définir un Délai d'attente pour votre webservice objet.
J'avais eu cette erreur après le changement du web service de type de retour et SoapDocumentMethod.
Au départ, c'était:
J'ai décidé de faire fire and forget type comme ceci:
Dans de tels cas, la mise à jour de la référence web aidé.
Pour mettre à jour un service web de référence:
Le problème que j'avais était liée à la version SOAP. Le
asmx
service a été configuré pour accepter les deux versions 1.1 et 1.2, donc je pense que quand vous consommez le service, le client ou le serveur ne sais pas de quelle version résoudre.Pour corriger cela, il est nécessaire d'ajouter:
Où
wsWebService
est le nom de la classe générée comme une référence.