单声道Apache2 HttpWebRequest崩溃“请求超时”

时间:2012-03-31 03:13:37

标签: c# asp.net mono

我在ASP.Net应用程序中使用支付网关API。使用XSP在MonoDevelop中进行测试时,应用程序可以正常运行。当我将它配置为使用mod_mono在apache2中运行时,代码会因超时错误而崩溃。

我对在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] in   /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] in   /Users/liam/Projects/techcertain/techcertaincsharp/Components/TCShared/PaymentGateways/Client/PxPay.cs:69

在我的Web.Config中,我有以下作为请求超时:

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

我尝试更改HttpWebRequest上的Timeout值,但它仍然超时。

导致这种情况发生的原因是什么?如何解决?

1 个答案:

答案 0 :(得分:8)

我设法找出了我遇到此问题的原因。它与Apache的使用完全无关。

我正在使用Npgsql对Postgresql进行数据库访问。 Npgsql附带两个dll(Npgsql.dll和Mono.Security.dll)。由于某些未知原因,Mono.Security.dll导致HttpWebRequest在Mono上运行时超时。

无论如何在Mono上运行时不需要Mono.Security.dll,因为它已经包含在Mono框架中。因此,从我的bin目录中删除Mono.Security dll后,HttpWebRequest现在正在运行。

此信息在http://mono.1490590.n4.nabble.com/The-request-timed-out-at-HttpWebRequest-EndGetResponse-td2218213.html完全归功于此帖。