Bloquear/serialización cuando se utiliza el componente de InProc (DLL) desde ASP

Seleccione idioma Seleccione idioma
Id. de artículo: 216580 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando se llama a una página Active Server página (ASP) que crea una instancia de un componente de proceso (DLL) desde varios clientes, el usuario verá bloqueo/serialización; es decir, todos los clientes tener que esperar a otros usuarios a fin. Si el componente de inproc es o apartamento multiproceso debe comportarse de esta forma.

Causa

A continuación se enumeran las razones más comunes para este comportamiento.

La configuración de IIS para el directorio virtual puede tener los indicadores de depuración de aplicación establecidos. Si está activada la depuración de aplicaciones, hará que las solicitudes de todos a este directorio virtual para estar en un único subproceso.

Otro motivo habitual es que las solicitudes diferentes podrían ejecutar en el mismo identificador de sesión y, por lo tanto, se serializarán. Normalmente es el caso si las pruebas de varias ventanas de explorador en un solo equipo.

Otras razones que pueden explicar este comportamiento son principalmente código relacionado con. Siguientes son dos snipplets de código (Visual Basic y Visual C++) para poder probar y vea si trabaja con un problema de codificación (es decir, el código de ejemplo funciona bien con no serialización), o con un problema de configuración (es decir, el código de ejemplo muestra el mismo comportamiento como se describió anteriormente).

Solución

Desactivar la depuración de aplicaciones del nivel de directorio virtual:
  1. Para abrir MMC, haga clic en el menú Inicio y seleccione programas , Windows NT 4.0 Option Pack y Microsoft Internet Information Server . Haga clic en Administrador de servicios Internet .
  2. Seleccione el Directorio Virtual y seleccione Propiedades .
  3. En la mitad inferior de las propiedades del directorio virtual (panel de Configuración de la aplicación ), haga clic en configuración .
  4. En la ficha Depuración de aplicaciones , haga clic para desactivar las siguientes casillas de verificación depuración:
    • depuración de secuencia de comandos habilitar ASP del servidor
    • depuración de secuencia de comandos a cliente habilitar ASP

Estado

Este comportamiento es por diseño.

Más información

Pasos para reproducir el comportamiento

Escribir el siguiente módulo de clase en Visual Basic:
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Function ThreadWait(nSeconds As Long) As Long
    Sleep nSeconds * 1000
    ThreadWait = GetCurrentThreadId
End Function
				

O escriba el siguiente código en Visual c++ / ATL:
STDMETHODIMP CThreadTest::ThreadWait(int n, long *threadid)
{
    DWORD nthreadId;
    nthreadId = GetCurrentThreadId();
    Sleep (n * 1000);
    *threadid = nthreadId;
    return S_OK;
}
				

Y en la siguiente declaración IDL:
    [id(1), helpstring("method ThreadWait")] HRESULT ThreadWait([in] int n, [out, retval] long* threadid);
				

Asegúrese de que el ClassID se denomina " ThreadWaitProject.ThreadTest ." Compile el archivo DLL.

Escribir la secuencia de comandos siguiente de Active Server (ASP):
<%
  Dim objTest
  Set objTest = Server.CreateObject("ThreadWaitProject.ThreadTest")
  Response.Write "<TABLE border =1><TR><TD colspan=2 align=center><H3>InProc VB DLL<BR> ThreadWait 5 seconds</H3></TD></TR>"
  Response.Write "<TR><TD>StartTime: </TD><TD>" & Now & "</TD></TR>"
  Response.Write "<TR><TD>ThreadID: </TD><TD>" & objTest.ThreadWait(5) & "</TD></TR>"
  Response.Write "<TR><TD>EndtTime: </TD><TD>" & Now & "</TD></TR>"
  Response.write "<TR><TD>Session ID: </TD><TD>" & Session.SessionId & "</TD></TR></TABLE>"
  Set objTest = Nothing
%> 
				


Para correctamente probar este código ASP, tendrá que iniciar esta página ASP desde dos o más clientes diferentes (equipos)

Nota : no ejecutar las pruebas con varias instancias de Internet Explorer en un equipo único.

Para saber que si la prueba se ejecutó correctamente, debe observar las siguientes diferencias en los resultados en los clientes diferentes:
  • Horas de inicio/final deben se superpongan
  • Identificadores de subproceso deben ser diferentes
  • Identificadores de sesión deben ser diferentes

Propiedades

Id. de artículo: 216580 - Última revisión: domingo, 23 de febrero de 2014 - Versión: 3.2
La información de este artículo se refiere a:
  • Microsoft Internet Information Server 4.0
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual C++ 6.0 Professional
Palabras clave: 
kbnosurvey kbarchive kbmt kbintldev kbprb KB216580 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 216580

Kontaktieren Sie uns, um weitere Hilfe zu erhalten

Kontaktieren Sie uns, um weitere Hilfe zu erhalten
Wenden Sie sich an den Answer Desk, um professionelle Hilfe zu erhalten.