2011-10-30 41 views
6

Tôi đang chạy ASP cổ điển cùng với ASP.net 4.0 trên IIS 7.5.Lỗi ASP cổ điển với yêu cầu XMLHTTP

Trong mã ASP cổ điển của tôi là mã này:

' Process @ alerts 
Dim objHttp 
set objHttp = Server.CreateObject("Microsoft.XMLHTTP") 

objHttp.open "POST", strSiteRoot & "handlers/forumalerts.ashx?", false 
objHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded" 
objHttp.Send "topicID=" & lngTopicID & "&threadID=" & lngLastPostID 

set objHttp = nothing 

này đang gửi một yêu cầu đến một handler ASP.net ASHX. Khi nó chạy, nó được treo trong một thời gian dài trước khi cuối cùng gửi thông báo lỗi:

msxml3.dll lỗi '800c0008'

Tải xuống tài nguyên quy định đã thất bại.

/forum/new_post.asp, dòng 1036

Tôi đã kiểm tra URL nó gửi bài đến và nó tồn tại và đang hoạt động. Dữ liệu được gửi cũng chính xác.

Trước khi tôi cài đặt Windows 7 mới, nó hoạt động tốt. Kể từ khi cài đặt lại nó tươi, và thiết lập IIS một lần nữa bit này của mã không, dẫn tôi tin rằng nó là một quyền hạn/nhận dạng lỗi.

Có ai cho tôi biết điều gì có thể gây ra điều này không? Tôi có 3 hồ bơi ứng dụng:

ASP.net v4.0 (Integrated) (ApplicationPoolIdentity) 
ASP.net v4.0 Classic (Classic) (ApplicationPoolIdentity) 
DefaultAppPool (Integrated) (NetworkService) 

Cảm ơn bạn đã trợ giúp!

Edit: Tôi tìm thấy lỗi này trong các bản ghi:

Event code: 3005 
Event message: An unhandled exception has occurred. 
Event time: 02/11/2011 14:55:42 
Event time (UTC): 02/11/2011 14:55:42 
Event ID: 4e550d910b934d2781707701f833e18e 
Event sequence: 39 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/1/ROOT-2-129647191892089824 
    Trust level: Full 
    Application Virtual Path:/
    Application Path: C:\inetpub\wwwroot\ScirraNew\ 
    Machine name: TOM-PC 

Process information: 
    Process ID: 7980 
    Process name: w3wp.exe 
    Account name: NT AUTHORITY\NETWORK SERVICE 

Exception information: 
    Exception type: ArgumentNullException 
    Exception message: Value cannot be null. 
Parameter name: String 
    at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) 
    at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) 
    at System.Int32.Parse(String s) 
    at forumalerts.ProcessRequest(HttpContext context) in c:\inetpub\wwwroot\ScirraNew\Handlers\forumalerts.ashx:line 13 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 



Request information: 
    Request URL: http://127.0.0.1/handlers/forumalerts.ashx 
    Request path: /handlers/forumalerts.ashx 
    User host address: 127.0.0.1 
    User: 
    Is authenticated: False 
    Authentication Type: 
    Thread account name: NT AUTHORITY\NETWORK SERVICE 

Thread information: 
    Thread ID: 39 
    Thread account name: NT AUTHORITY\NETWORK SERVICE 
    Is impersonating: True 
    Stack trace: at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) 
    at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) 
    at System.Int32.Parse(String s) 
    at forumalerts.ProcessRequest(HttpContext context) in c:\inetpub\wwwroot\ScirraNew\Handlers\forumalerts.ashx:line 13 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 


Custom event details: 

dòng 13 là request.form đầu tiên:

int TopicID = int.Parse(context.Request.Form["topicID"]); 
+1

Điều gì xảy ra khi bạn gửi yêu cầu từ phía khách hàng, ví dụ: sử dụng jQuery? Ngoài ra, điều gì xảy ra khi bạn gửi yêu cầu GET thay vì yêu cầu POST? –

Trả lời

4

Nếu tôi hiểu đúng bạn đang thực hiện một yêu cầu đến máy chủ cùng làm người gọi ..

Đọc http://support.microsoft.com/kb/316451

Sử dụng ServerXMLHTTP hoặc WinHTTP đối tượng để đưa ra yêu cầu đệ quy Hypertext Transfer Protocol (HTTP) với cùng thông tin Internet Server (IIS) máy chủ không được khuyến khích. Cụ thể hơn, việc gọi Active Server Page (ASP) không được gửi yêu cầu tới ASP trong thư mục ảo hoặc thư mục ảo khác trong cùng một hồ bơi hoặc quy trình . Điều này có thể dẫn đến hiệu suất kém do thread đói.

+0

Tôi đồng ý nhưng dường như đã sử dụng 'Microsoft.XMLHTTP' và nếu tôi nhớ chính xác' XMLHTTP' được xây dựng trên WinInet không phải WinHTTP? Tôi cũng muốn tìm hiểu xem bạn có thể giúp về điều đó không. –

+3

Bài viết này hơi cũ và việc sử dụng cụm từ "cùng một máy chủ IIS" là không may bởi vì nó gây hiểu nhầm. Nó phải nói "cùng một ứng dụng ASP". Nó chỉ khi gọi lại vào cùng một ứng dụng ASP mà vấn đề đói này thực sự phát sinh. – AnthonyWJones

4

Bước đầu tiên là ngừng sử dụng Microsoft.XMLHTTP, bạn không nên sử dụng điều đó trong kịch bản cơ sở dịch vụ. Thay vào đó hãy sử dụng MSXML2.ServerXMLHTTP.3.0 được thiết kế để sử dụng trong các dịch vụ.

Ngoài ra nếu .ashx đang được đăng, các cuộc gọi trở lại vào ứng dụng ASP gốc, sau đó là vấn đề về đói mà Gaby có thể xảy ra. Thông thường, bạn có thể thoát khỏi điều này trên một trang web có sử dụng ánh sáng. Tuy nhiên nếu bạn có ASP gỡ lỗi kích hoạt trên ứng dụng sau đó gọi lại vào ứng dụng ASP chắc chắn sẽ treo. Lưu ý điều này không áp dụng trong ASP đơn giản cho kịch bản ASHX.

Nếu vấn đề của bạn vẫn tồn tại (mà nó có lẽ sẽ) thì: -

  • cài đặt một bản sao của fiddler trên máy tính của bạn.
  • cháy lên Fiddler
  • Trong một Command Prompt nhập >netsh
  • Vấn đề lệnh >winhttp set proxy 127.0.0.1:8888
  • Cố gắng để sử dụng trang ASP của bạn, bạn sẽ thấy POST bắt cáy
  • Khôi phục cài đặt WinHTTP proxy với >winhttp reset proxy

Bây giờ kiểm tra yêu cầu/phản hồi của POST trong điều này, điều này có thể tiết lộ một số manh mối về vấn đề thực sự nằm ở đâu.

0

Tôi là người mới trong ASP cổ điển.

Nhưng có thể trang được yêu cầu gửi phản hồi đến trang đầu tiên và đợi trang đó nhận được, trang đầu tiên không nhận được, vì vậy lỗi xảy ra.

Cố gắng sử dụng sau đây sau khi objHttp.Send:

objHttp.ResponseText

Ooh, vừa tìm thấy những sai lầm có thể xảy ra trong dòng này:

objHttp.open "POST", strSiteRoot & "handlers/forumalerts.ashx?", false

Hãy thử sử dụng chuỗi "handlers/forumalerts.ashx?" không có "?" đến cuối cùng.

0

Tôi có thay thế: Server.CreateObject("MSXML2.XMLHTTP") bởi Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")

và sau đó là lỗi không bao giờ thể hiện lên một lần nữa.

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