Mono Apache2 HttpWebRequest аварийно завершает работу с «Истекло время ожидания запроса» - PullRequest
5 голосов
/ 31 марта 2012

Я использую API платежного шлюза в своем приложении ASP.Net. При тестировании в MonoDevelop с XSP приложение работает. Когда я настраиваю его для запуска в apache2 с mod_mono, код продолжает падать с ошибкой тайм-аута.

Я поставлен в тупик относительно того, что может измениться с хостингом в Apache вместо XSP. В любом случае ниже приведен код тайм-аута:

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

Код сбой на линии: Stream requestStream = webReq.GetRequestStream();

Возвращенная ошибка:

Время ожидания запроса истекло

Описание: HTTP 500. Ошибка обработки запроса.

Трассировка стека:

System.Net.WebException: время ожидания запроса истекло в System.Net.HttpWebRequest.GetRequestStream () [0x0005f] в /private/tmp/monobuild/build/BUILD/mono-2.10.9/mcs/class/System/System.Net/HttpWebRequest.cs:746 в TCShared.PxPay.SubmitXml (System.String InputXml) [0x00048] в /Users/liam/Projects/techcertain/techcertaincsharp/Components/TCShared/PaymentGateways/Client/PxPay.cs:85 в TCShared.PxPay.GenerateRequest (вход TCShared.RequestInput) [0x00015] в /Users/liam/Projects/techcertain/techcertaincsharp/Components/TCShared/PaymentGateways/Client/PxPay.cs:69

В моем Web.Config время ожидания запроса следующее:

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

Я попытался изменить значение Timeout в HttpWebRequest, но оно все еще истекло.

Что вызывает это, и как я могу это исправить?

1 Ответ

8 голосов
/ 31 марта 2012

Мне удалось выяснить, почему у меня возникла эта проблема.Это совершенно не связано с использованием Apache.

Я использую Npgsql для доступа к базе данных Postgresql.Npgsql поставляется с двумя библиотеками (Npgsql.dll и Mono.Security.dll).По какой-то неизвестной причине Mono.Security.dll вызывает тайм-аут HttpWebRequest при запуске в Mono.

В любом случае Mono.Security.dll не требуется при запуске в Mono, поскольку он уже включен в платформу Mono.Таким образом, после удаления dll Mono.Security из моего каталога bin теперь работают HttpWebRequest.

Полный кредит идет к этому сообщению здесь http://mono.1490590.n4.nabble.com/The-request-timed-out-at-HttpWebRequest-EndGetResponse-td2218213.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...