2012-03-31 30 views
5

Tôi đang sử dụng API cổng thanh toán trong ứng dụng ASP.Net của mình. Khi thử nghiệm trong MonoDevelop với XSP, ứng dụng hoạt động. Khi tôi cấu hình nó để chạy trong apache2 với mod_mono mã giữ crashing với một lỗi timeout.Mono Apache2 HttpWebRequest gặp sự cố với "Yêu cầu đã hết thời gian"

Tôi bối rối về những gì có thể thay đổi với lưu trữ trong Apache thay vì XSP. Dù sao dưới đây là đoạn code mà là thời điểm ra:

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

Mã này bị rơi trên đường: Stream requestStream = webReq.GetRequestStream();

Lỗi được thông báo là:

Các yêu cầu time out

Mô tả : HTTP 500. Lỗi xử lý yêu cầu.

Stack Trace:

System.Net.WebException: Các yêu cầu time out tại System.Net.HttpWebRequest.GetRequestStream() [0x0005f] trong /private/tmp/monobuild/build/BUILD/mono 2.10.9/mcs/class/System/System.Net/HttpWebRequest.cs: 746 tại TCShared.PxPay.SubmitXml (System.String InputXml) [0x00048] trong /Người dùng/liam/Dự án/techcertain/techcertaincsharp/Components/TCShared/PaymentGateways/Client/PxPay.cs: 85 tại TCShared.PxPay.GenerateRequest (đầu vào TCShared.RequestInput) [0x00015] trong /Người dùng/liam/Projects/techcertain/techcertaincsharp/Components/TC Chia sẻ/PaymentGateways/Client/PxPay.cs: 69

Trong Web.Config của tôi, tôi đã sau khi thời gian chờ yêu cầu:

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

Tôi đã cố gắng thay đổi giá trị Timeout trên HttpWebRequest nhưng nó vẫn là thời gian.

Điều gì gây ra điều này xảy ra và làm cách nào để khắc phục sự cố?

Trả lời

8

Tôi đã tìm hiểu lý do tại sao tôi gặp sự cố này. Nó hoàn toàn không liên quan đến việc sử dụng Apache.

Tôi đang sử dụng Npgsql để truy cập cơ sở dữ liệu vào Postgresql. Npgsql đi kèm với hai dlls (Npgsql.dll và Mono.Security.dll). Đối với một số lý do không rõ Mono.Security.dll khiến HttpWebRequest hết thời gian chờ khi chạy trên Mono.

Anyways Mono.Security.dll không cần thiết khi chạy trên Mono vì nó đã được bao gồm trong khung Mono. Vì vậy, sau khi loại bỏ các dll Mono.Security từ thư mục bin HttpWebRequest của tôi đang làm việc.

Toàn bộ tín dụng được chuyển đến bài đăng này tại đây http://mono.1490590.n4.nabble.com/The-request-timed-out-at-HttpWebRequest-EndGetResponse-td2218213.html.

+0

Xin chào! Tôi đang gặp sự cố tương tự mà bạn gặp phải, chỉ xóa Mono.Security đã không sửa nó cho tôi. Điều này là phù hợp trong hai cài đặt Linux khác nhau và mono trên chiến thắng quá. Bạn có ý tưởng gì khác tôi nên thử không? – Pablote

+0

Xin chào, bạn có thể thử sử dụng phiên bản Mono khác. Tôi đang sử dụng phiên bản 2.10.8 trên mac của tôi và HttpWebRequest đang làm việc. Khi tôi nâng cấp mono lên phiên bản 2.10.9 HttpWebRequest ngừng hoạt động vì vậy tôi phải hạ cấp xuống 2.10.8. – startupsmith

+1

Xóa Mono.Security.dll cố định điều này cho tôi, nhưng bạn cần đảm bảo rằng bạn xóa nó cả từ bất kỳ thư mục nào bạn có dll nguồn trong (dự án tham chiếu đến) cộng với thư mục Bin/Debug | Release của bạn, vì nó sẽ được sao chép ở đó từ bản dựng trước . – t9mike

Các vấn đề liên quan