Классическая ошибка ASP с запросом XMLHTTP - PullRequest
6 голосов
/ 31 октября 2011

Я использую классический ASP вместе с ASP.net 4.0 на IIS 7.5.

В моем классическом коде ASP этот код:

' 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

Это отправка запроса наASP.net ASHX обработчик.Когда он выполняется, он долго зависает, прежде чем, наконец, отправить сообщение об ошибке:

msxml3.dll error '800c0008'

Загрузка указанного ресурса не удалась.

/ forum / new_post.asp, строка 1036

Я проверил URL, на который он публикует сообщение, и он существует и работает.Отправляемые данные также верны.

До того, как я только что установил Windows 7, он работал нормально.После переустановки и повторной настройки IIS этот фрагмент кода завершается неудачей, что заставляет меня поверить, что это ошибка прав доступа / идентификации.

Может кто-нибудь сказать мне, что может быть причиной этого?У меня есть 3 пула приложений:

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

Спасибо за любую помощь!

Редактировать: Я нашел эту ошибку в журналах:

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: 

Строка 13 является первойrequest.form:

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

Ответы [ 4 ]

4 голосов
/ 31 октября 2011

Первый шаг - прекратить использование Microsoft.XMLHTTP, его не следует использовать в сценарии базового обслуживания.Вместо этого используйте MSXML2.ServerXMLHTTP.3.0, который предназначен для использования в сервисах.

Также, если .ashx, отправляемый inturn, обращается обратно к исходному приложению ASP, тогда может возникнуть проблема с истощением потока, о которой Gaby говорит.Обычно вы можете сойти с рук на этом сайте, который имеет легкое использование.Однако если в приложении включена отладка ASP, обратный вызов приложения ASP обязательно зависнет.Обратите внимание, что это не относится к простому сценарию ASP to ASHX.

Если ваша проблема сохраняется (что, вероятно, будет), то: -

  • установите копию fiddler на вашем компьютере.
  • Запустите Fiddler
  • В командной строке введите >netsh
  • Введите команду >winhttp set proxy 127.0.0.1:8888
  • Попыткаиспользуйте страницу ASP, вы должны увидеть POST, захваченный fiddler
  • Восстановить настройки прокси winhttp с помощью >winhttp reset proxy

Теперь рассмотрим запрос / ответ на POST в fiddler,это может выявить некоторые подсказки относительно того, где находится настоящая проблема.

4 голосов
/ 31 октября 2011

Если я правильно понимаю, вы делаете запрос на тот же сервер, что и вызывающий ..

Чтение http://support.microsoft.com/kb/316451

Использование ServerXMLHTTP *Не рекомендуется использовать объекты 1009 * или WinHTTP для выполнения рекурсивных запросов по протоколу передачи гипертекста (HTTP) к одному и тому же серверу IIS.В частности, вызывающая страница Active Server (ASP) не должна отправлять запросы ASP в тот же виртуальный каталог или в другой виртуальный каталог в том же пуле или процессе.Это может привести к снижению производительности из-за истощения потоков.

0 голосов
/ 25 июля 2016

У меня есть заменить: Server.CreateObject("MSXML2.XMLHTTP") на Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")

и ошибка больше не появляется.

0 голосов
/ 29 июня 2015

Я новый в ASP classic.

Но, вероятно, запрашиваемая страница отправляет ответ на первую страницу и ожидает его получения, первая страница не получает его, поэтому возникает ошибка.

Попробуйте использовать следующее после objHttp.Send:

objHttp.ResponseText

Ооо, нашел только что вероятную ошибку в этой строке:

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

Попробуйте использовать строку "handlers/forumalerts.ashx?" без "?" в конце концов.

...