2009-12-04 43 views
6

Tôi đang cố gắng cải thiện thông tin được cung cấp để phản hồi lại lỗi được xử lý trong ứng dụng.500 Lỗi máy chủ nội bộ khi sử dụng HttpWebRequest, làm cách nào tôi có thể gặp lỗi thực?

Đây là mã:

Try 
     httpRequestObj = HttpWebRequest.Create(strRequest) 
     httpRequestObj.Method = "GET" 
     httpRequestObj.UseDefaultCredentials = True 
*  httpResponse = httpRequestObj.GetResponse 
     Using reader As StreamReader = New StreamReader(httpResponse.GetResponseStream()) 
      strXML = reader.ReadToEnd() 
     End Using 
    Catch ex As WebException 
     'do something with ex 
    End Try 

Các WebException được ném trên dòng *

Hiện nay tất cả những gì nhìn thấy trong ngoại lệ là "Các máy chủ từ xa trở về một lỗi: (500) Lỗi máy chủ nội bộ ". Tôi đã nhìn vào ngoại lệ trong gỡ lỗi nhưng thông tin tôi cần là không có-tôi đoán phản ứng sẽ cần phải được đọc trong để xem thông tin đó nhưng nó không bao giờ được rằng đến nay.

Nhược bằng tôi lấy yêu cầu và dán nó vào trình duyệt của tôi trực tiếp tôi có thể xem chi tiết lỗi trong định dạng XML được trả về từ API Tôi đang gọi điện thoại, thông tin như:

<Error> 
    <description>info I want to get to here</description> 
    <detail /> 
    <code>info I want to get to here</code> 
    <source /> 
    <category>info I want to get to here</category> 
    <file>info I want to get to here</file> 
    <line>info I want to get to here</line> 
    <pad /> 
</Error> 

Có cách nào Tôi có thể thay đổi mã này để tôi có thể vượt qua lỗi 500 và xem phản hồi thực tế, tôi muốn có thể phân tích cú pháp xml này để tìm ra vấn đề thực sự cho sự cố.

Lưu ý: Ngoại lệ có ex.Response (System.Net.HttpWebResponse), nhưng tôi không thể xem thông tin tôi cần ở đó, chỉ tải thông tin Header.

Trả lời

17

Bạn có thể nhận được phản ứng lỗi từ ngoại lệ ....

try 
{ 
.... 
} catch(Exception e) { 
    if (e is WebException && ((WebException)e).Status==WebExceptionStatus.ProtocolError) 
    { 
     WebResponse errResp = ((WebException)e).Response; 
     using(Stream respStream = errResp.GetResponseStream()) 
     { 
     // read the error response 
     } 
    } 
} 
+0

Chỉ cần xem xét điều này ngay bây giờ. Vấn đề đầu tiên nhấn với mã này là "ResponseError" không xuất hiện là một phần của WebExceptionStatus enum http://msdn.microsoft.com/en-us/library/system.net.webexceptionstatus.aspx – DannykPowell

+3

Đánh dấu điều này là chính xác trong mặc dù vậy, vì câu trả lời này đã giúp tôi có được một giải pháp. Mã của tôi (vb.net) trông giống như: Bắt đầu như WebException Sử dụng trình đọc Như StreamReader = New StreamReader (ex.Response.GetResponseStream()) strXML = reader.ReadToEnd() Kết thúc bằng cách sử dụng – DannykPowell

+0

Xin lỗi về điều đó, nó nên thực sự là WebExceptionStatus.ProtocolError. Trong trường hợp này, đối tượng phản hồi sẽ có luồng lỗi. Bây giờ, hãy kiểm tra điều này, nếu luồng lỗi của bạn trống, thì điều đó có nghĩa là máy chủ không gửi bất kỳ điều gì hoặc có lỗi ở đâu đó. Bạn có thể nhận được một tracelog bằng cách sử dụng http://ferozedaud.blogspot.com/2009/08/tracing-with-systemnet.html? That willl hiển thị nếu máy chủ đã gửi một thực thể phản hồi hay không. – feroze

2

Hãy thử sử dụng Fiddler. Đó là gỡ lỗi proxy, sẽ hiển thị cho bạn tất cả dữ liệu gửi giữa máy khách và máy chủ. Bạn sẽ có thể xem tất cả các tiêu đề và ngữ cảnh.

+0

ý tưởng hay và cảm ơn câu trả lời nhanh – DannykPowell

+0

@DannykPowell: Điều này phải có cho nhà phát triển web. –

+0

lol, vâng tôi cũng quen. Và tôi đồng ý – DannykPowell

3
 System.Net.WebResponse response = null; 
     try 
     { 
      response = wreq.GetResponse(); 
     } 
     catch (WebException e) 
     { 
      if (e.Status == WebExceptionStatus.ProtocolError) 
      { 
       string error = new System.IO.StreamReader(e.Response.GetResponseStream()).ReadToEnd(); 
      } 
     } 
     catch (Exception e) 
     { 
     } 

đơn giản như này, bạn sẽ nhận được toàn bộ phản ứng trong các lỗi chuỗi.

+0

+1 Bắt WebException thực tế tốt hơn là bắt ngoại lệ chung nếu không bạn về cơ bản sẽ bỏ qua tất cả những thứ khác. – iGanja

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