2012-03-31 8 views
5

Estoy usando una API de puerta de enlace de pago en mi aplicación ASP.Net. Cuando se prueba en MonoDevelop con XSP, la aplicación funciona. Cuando lo configuro para ejecutar en apache2 con mod_mono, el código sigue fallando con un error de tiempo de espera.Mono Apache2 HttpWebRequest se bloquea con "La solicitud agotó el tiempo de espera"

No estoy seguro de qué podría cambiar con el alojamiento en Apache en lugar de XSP. De todas formas a continuación es el código que se el tiempo de espera:

private string SubmitXml(string InputXml) 
{ 
    HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(_WebServiceUrl); 
    webReq.Method = "POST"; 

    byte[] reqBytes; 

    reqBytes = System.Text.Encoding.UTF8.GetBytes(InputXml); 
    webReq.ContentType = "application/x-www-form-urlencoded"; 
    webReq.ContentLength = reqBytes.Length; 
    webReq.Timeout = 5000; 
    Stream requestStream = webReq.GetRequestStream(); 
    requestStream.Write(reqBytes, 0, reqBytes.Length); 
    requestStream.Close(); 

    HttpWebResponse webResponse = (HttpWebResponse)webReq.GetResponse(); 
    using (StreamReader sr = new StreamReader(webResponse.GetResponseStream(), System.Text.Encoding.ASCII)) 
    { 
     return sr.ReadToEnd(); 
    } 
} 

El código se bloquea en la línea: Stream requestStream = webReq.GetRequestStream();

El error devuelto es:

La solicitud timed out

Descripción : HTTP 500. Solicitud de procesamiento de error.

Seguimiento de la pila:

System.NET.WebException: La solicitud ha caducado en System.Net.HttpWebRequest.GetRequestStream() [0x0005f] en /private/tmp/monobuild/build/BUILD/mono 2.10.9/mcs/class/System/System.Net/HttpWebRequest.cs: 746 en TCShared.PxPay.SubmitXml (System.String InputXml) [0x00048] en /Users/liam/Projects/techcertain/techcertaincsharp/Components/TCShared/PaymentGateways/Client/PxPay.cs: 85 en TCShared.PxPay.GenerateRequest (entrada TCShared.RequestInput) [0x00015] en /Users/liam/Projects/techcertain/techcertaincsharp/Components/TC Shared/PaymentGateways/cliente/PxPay.cs: 69

En mi Web.Config tengo el siguiente como la solicitud de tiempo de espera:

<httpRuntime executionTimeout="43200" maxRequestLength="104856" requestValidationMode="2.0" /> 

He intentado cambiar el valor de tiempo de espera en el HttpWebRequest pero todavía está saliendo el tiempo.

¿Qué está causando esto y cómo puedo solucionarlo?

Respuesta

8

Me las arreglé para descubrir por qué estaba experimentando este problema. No tiene ninguna relación con el uso de Apache.

Estoy usando Npgsql para acceder a la base de datos de Postgresql. Npgsql viene con dos dlls (Npgsql.dll y Mono.Security.dll). Por algún motivo desconocido, Mono.Security.dll hace que HttpWebRequest expire el tiempo de espera cuando se ejecuta en Mono.

Anyways Mono.Security.dll no es necesario cuando se ejecuta en Mono porque ya está incluido en el marco de Mono. Entonces, después de eliminar el dll Mono.Security de mi directorio bin, HttpWebRequest está trabajando.

El crédito completo va a este post aquí http://mono.1490590.n4.nabble.com/The-request-timed-out-at-HttpWebRequest-EndGetResponse-td2218213.html.

+0

Hola, estoy teniendo el mismo problema que tú, solo que eliminar Mono.Security no me lo arregló. Esto es consistente en dos instalaciones de linux diferentes y mono on win también. ¿Tienes alguna idea de qué más debería probar? – Pablote

+0

Hola, podrías intentar usar una versión diferente de Mono. Estoy usando la versión 2.10.8 en mi mac y HttpWebRequest está funcionando. Cuando actualicé mono a la versión 2.10.9, HttpWebRequest dejó de funcionar, por lo que tuve que volver a degradar a 2.10.8. – startupsmith

+1

Eliminando Mono.Security.dll me arregló esto, pero necesita asegurarse de que lo elimine tanto de la carpeta en la que tenga el dll de origen (los puntos de referencia del proyecto) como su carpeta Bin/Debug | Release, ya que se habría copiado allí desde la compilación anterior . – t9mike

Cuestiones relacionadas