我在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值,但它仍然超时。
导致这种情况发生的原因是什么?如何解决?
答案 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完全归功于此帖。