2012-03-31 14 views
5

Sto utilizzando un'API gateway di pagamento nella mia applicazione ASP.Net. Quando si esegue il test in MonoDevelop con XSP, l'applicazione funziona. Quando lo configuro per funzionare in apache2 con mod_mono il codice continua a bloccarsi con un errore di timeout.Mono Apache2 HttpWebRequest si blocca con "Timeout della richiesta"

Sono perplesso su cosa potrebbe cambiare con l'hosting in Apache anziché XSP. Comunque sotto è il codice che è timeout:

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(); 
    } 
} 

Il codice si blocca sulla linea: Stream requestStream = webReq.GetRequestStream();

L'errore riscontrato è:

La richiesta è scaduta

Descrizione : HTTP 500. Errore durante l'elaborazione della richiesta.

dello stack:

System.Net.WebException: La richiesta è scaduta a System.Net.HttpWebRequest.GetRequestStream() [0x0005f] in /private/tmp/monobuild/build/BUILD/mono 2.10.9/mcs/class/System/System.Net/HttpWebRequest.cs: 746 a TCShared.PxPay.SubmitXml (System.String InputXml) [0x00048] in /Users/liam/Projects/techcertain/techcertaincsharp/Componenti/TCShared/PaymentGateways/Client/PxPay.cs: 85 a TCShared.PxPay.GenerateRequest (input TCShared.RequestInput) [0x00015] in /Users/liam/Projects/techcertain/techcertaincsharp/Components/TC Condiviso/PaymentGateways/cliente/PxPay.cs: 69

Nel mio web.config ho il seguente come il timeout di richiesta:

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

Ho provato a cambiare il valore di timeout sul HttpWebRequest ma sta ancora scadendo.

Che cosa sta causando questo e come posso risolverlo?

risposta

8

Sono riuscito a scoprire perché stavo vivendo questo problema. Non è completamente correlato all'uso di Apache.

Sto utilizzando Npgsql per l'accesso al database Postgresql. Npgsql viene fornito con due dll (Npgsql.dll e Mono.Security.dll). Per qualche motivo sconosciuto, Mono.Security.dll causa il timeout di HttpWebRequest durante l'esecuzione su Mono.

Anyways Mono.Security.dll non è necessario quando è in esecuzione su Mono perché è già incluso nel framework Mono. Quindi, dopo aver rimosso la DLL di Mono.Security dalla mia directory bin, HttpWebRequest ora funziona.

Credito completo va a questo post qui http://mono.1490590.n4.nabble.com/The-request-timed-out-at-HttpWebRequest-EndGetResponse-td2218213.html.

+0

Hey, sto avendo lo stesso problema che hai avuto, solo che l'eliminazione di Mono.Security non l'ha risolto per me. Questo è coerente in due diverse installazioni linux e mono su win. Hai qualche idea di cos'altro dovrei provare? – Pablote

+0

Ciao, potresti provare a utilizzare una versione diversa di Mono. Sto usando la versione 2.10.8 sul mio Mac e HttpWebRequest sta funzionando. Quando ho aggiornato la versione mono alla versione 2.10.9 HttpWebRequest ha smesso di funzionare, quindi ho dovuto eseguire il downgrade alla 2.10.8. – startupsmith

+1

Eliminazione di Mono.Security.ho risolto questo problema per me, ma devi assicurarti di cancellarlo da qualsiasi cartella in cui hai la DLL di origine (il riferimento del progetto rimanda a) più la tua cartella Bin/Debug | Release, dato che sarebbe stata copiata da quella precedente . – t9mike

Problemi correlati