c# - practice - La solicitud falló con el estado HTTP 417: Expectativa fallida-Uso de servicios web
try catch web api (2)
Agregue la siguiente línea de código en su archivo de configuración.
<system.net>
<defaultProxy useDefaultCredentials="true" >
</defaultProxy>
</system.net>
Hace unos minutos estaba trabajando en un proyecto en Visual Studio 2010 y, de repente, reinicié mi PC.
después de reiniciar, recibí el siguiente error al explorar ese sitio web en una máquina local:
La solicitud falló con el estado HTTP 417: Falló la expectativa.
Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.
Detalles de la excepción: System.Net.WebException: la solicitud falló con el estado HTTP 417: se produjo un error en la expectativa.
el nombre de mi sitio web es: MyWebSite
Tengo un servicio web en un servidor remoto (un vps) que MyWebSite lo está utilizando y ese error está relacionado con él.
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: }
Todo está bien con ese servicio web.
Entonces, ¿qué es este error y cómo puedo solucionarlo?
solo hay un método bool simple dentro de ese servicio web que devuelve true.
y estoy usando ese servicio web en código detrás como el siguiente:
private void CheckForPageExpiration()
{
MyService service = new MyService();
if (service.MyWebSiteEnable())
{
}
else
{
Response.Redirect("~/blank.aspx");
}
}
Quité ese servicio web y lo agregué nuevamente, ¡pero aún tengo ese error!
¿Qué hay de malo en eso?
gracias por adelantado
This sugiere que el problema es un servidor proxy que no admite una respuesta de 100 continuos del servidor y muestra el código para resolverlo. Esto explicaría por qué funciona en otra red.
Ya que es poco probable que convenza a su ISP para que cambie su práctica (aunque no hay daño en una solicitud), debe desactivar el comportamiento de enviar un 100-Continuar como lo sugiere el enlace:
Poner este código antes de una solicitud web:
System.Net.ServicePointManager.Expect100Continue = false;
O, agregando las siguientes líneas al archivo de configuración de aplicaciones como un elemento secundario de la etiqueta <configuration>
:
<system.net>
<settings>
<servicePointManager expect100Continue="false" />
</settings>
</system.net>