2011-10-30 17 views
6

Estoy ejecutando ASP clásico junto con ASP.net 4.0 en IIS 7.5.Error clásico de ASP con la solicitud XMLHTTP

En mi código ASP clásico es este código:

' 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 

Este es el envío de una petición a un controlador de ASP.net ASHX. Cuando es ejecutado, se cuelga por un largo tiempo antes de enviar finalmente el mensaje de error:

error msxml3.dll '800c0008'

La descarga del recurso especificado ha fallado.

/forum/new_post.asp, línea 1036

he comprobado la URL que está a publicar y que existe y está funcionando. Los datos que se envían también son correctos.

Antes de instalar Windows 7 estaba funcionando bien. Desde que lo volví a instalar, y configurando IIS nuevamente, este bit de código falla, lo que me lleva a creer que se trata de un error de permisos/identidad.

¿Alguien puede decirme qué podría estar causando esto? Tengo 3 grupos de aplicaciones:

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

¡Gracias por la ayuda!

Editar: Encontré este error en los registros:

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: 

la línea 13 es la primera request.form:

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

¿Qué sucede cuando envía la solicitud desde el lado del cliente, p. usando jQuery? Además, ¿qué sucede cuando envía la solicitud GET en lugar de la solicitud POST? –

Respuesta

4

Si he entendido bien que usted está haciendo una solicitud para el mismo servidor como el que se llama ..

Leer http://support.microsoft.com/kb/316451

Usando ServerXMLHTTP o WinHTTP objetos para hacer peticiones recursiva de hipertexto Transfer Protocol (HTTP) a la misma información de Internet Server no se recomienda (IIS). Más específicamente, la llamada a la página del servidor activo (ASP) no debe enviar solicitudes a una ASP en el mismo directorio virtual ni a otro directorio virtual en el mismo grupo o proceso . Esto puede provocar un rendimiento deficiente debido a la falta de hilo .

+0

Estoy de acuerdo, pero parece que se usa 'Microsoft.XMLHTTP' y si recuerdo correctamente' XMLHTTP' construido sobre WinInet no WinHTTP? También quiero aprender si puedes ayudar con eso. –

+3

El artículo es un poco antiguo y su uso de la frase "mismo servidor IIS" es desafortunado porque es engañoso. Debería decir "la misma aplicación ASP". Es solo cuando se vuelve a llamar a la misma aplicación ASP donde realmente surge este problema de falta de hilo. – AnthonyWJones

4

El primer paso es dejar de usar Microsoft.XMLHTTP, no debería utilizarlo en una situación de base de servicios. En su lugar, use MSXML2.ServerXMLHTTP.3.0 que está diseñado para usar en servicios.

Además, si el .ashx se publica en las llamadas entrantes en la aplicación ASP de origen, entonces puede aparecer el problema de falta de hilo que Gaby alude. Por lo general, puede salirse con la suya en un sitio que tiene un uso ligero. Sin embargo, si tiene habilitada la depuración de ASP en la aplicación, la llamada a la aplicación ASP definitivamente se bloqueará. Tenga en cuenta que esto no se aplica en el escenario simple de ASP a ASHX.

Si el problema persiste (que probablemente lo hará) a continuación: -

  • instalar una copia del fiddler en su máquina.
  • fuego hasta Fiddler
  • En un símbolo del sistema introduce >netsh
  • La ejecute el comando >winhttp set proxy 127.0.0.1:8888
  • intento de utilizar la página ASP, debería ver el POST capturado por el violinista
  • Restaurar la configuración winhttp proxy con >winhttp reset proxy

Ahora examine la Solicitud/Respuesta del POST en el violín, esto puede revelar algunas pistas sobre dónde se encuentra el problema real.

0

Soy nuevo en ASP classic.

Pero probablemente la página solicitada envíe una respuesta a la primera página y la espere para recibir, la primera página no la recibe, por lo que se produce un error.

intenta utilizar el siguiente después de objHttp.Send:

objHttp.ResponseText

Ooh, que se encuentra ahora el probable error en esta línea:

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

Pruebe utilizar la cadena "handlers/forumalerts.ashx?" sin "?" en el final.

0

que tienen reemplazar: Server.CreateObject("MSXML2.XMLHTTP") por Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")

y luego el error no se muestra de nuevo.