web-dev-qa-db-fra.com

La demande a échoué avec le statut HTTP 417: Échec de l'attente - Utilisation des services Web

il y a quelques minutes, je travaillais sur un projet dans Visual Studio 2010 et tout à coup mon PC a été redémarré.
après le redémarrage, j'ai eu l'erreur ci-dessous lors de la navigation sur ce site Web sur la machine locale:

La demande a échoué avec l'état HTTP 417: Échec de l'attente.

Description: une exception non gérée s'est produite lors de l'exécution de la demande Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.Net.WebException: la demande a échoué avec l'état HTTP 417: échec de l'attente.

le nom de mon site Web est: MyWebSite
J'ai un service Web sur un serveur distant (un vps) que MyWebSite l'utilise et cette erreur est en relation avec lui.

Line 172:        [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/MyWebSiteEnable", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
Line 173:        public bool MyWebSiteEnable() {
Line 174:            object[] results = this.Invoke("MyWebSiteEnable", new object[0]);
Line 175:            return ((bool)(results[0]));
Line 176:        }

tout est ok avec ce service web.
Alors, quelle est cette erreur et comment puis-je la corriger?
il y a juste une méthode booléenne simple à l'intérieur de ce service Web qui renvoie vrai.
et j'utilise ce service Web en code-behind comme ci-dessous:

private void CheckForPageExpiration()
{
    MyService service = new MyService();
    if (service.MyWebSiteEnable())
    {
    }
    else
    {
        Response.Redirect("~/blank.aspx");
    }
}

j'ai supprimé ce service Web et l'ajoute à nouveau, mais j'ai toujours cette erreur!
qu'est-ce qui ne va pas?

merci d'avance

22
SilverLight

This suggère que le problème est un serveur proxy qui ne prend pas en charge une réponse 100-continue du serveur et affiche le code pour le résoudre. Cela expliquerait pourquoi cela fonctionne sur un autre réseau.

Étant donné qu'il est peu probable que vous convainciez votre FAI de changer sa pratique (aucun mal dans une demande), vous devez désactiver le comportement d'envoi d'un 100-Continue comme le suggère le lien:

Mettre ce code avant une requête web:

System.Net.ServicePointManager.Expect100Continue = false;

Ou, en ajoutant les lignes suivantes au fichier de configuration des applications en tant qu'enfant de <configuration> tag:

<system.net>
    <settings>
        <servicePointManager expect100Continue="false" />
    </settings>
</system.net>
45
Michael

Ajoutez la ligne de code ci-dessous dans votre fichier de configuration.

<system.net>
    <defaultProxy useDefaultCredentials="true" >
    </defaultProxy>
</system.net>
0
Armaan