Programación con ISAPI

22/12/2004 - 21:25 por FGF | Informe spam
Hola a todos:

1. ¿Se puede llenar un formulario HTML guardado en disco con datos
procedentes de una extensión ISAPI?
2. ¿Se puede desde código C++ avanzar o retroceder páginas cargadas en el
Explorer?
3. ¿Alguien sabe de un buen manual para programar con ISAPI?

Un saludo a toda la comunidad de programadores VC++.

Preguntas similare

Leer las respuestas

#1 Isidro Muñoz
24/12/2004 - 10:24 | Informe spam
Hola Felix,

1. ¿Se puede llenar un formulario HTML guardado en disco con datos
procedentes de una extensión ISAPI?


No la entiendo esta pregunta.

2. ¿Se puede desde código C++ avanzar o retroceder páginas cargadas en el
Explorer?


Si lo que quieres es que mediante el ISAPI puedas avanzar y retroceder
páginas en el Explorer del cliente te digo que no.
Un Isapi solo se ejecuta en el servidor web ( igual que si fuera ASP ), lo
único que ocurre que es un módulo win32 que el servidor web ejecuta y este
módulo le devuelve al servidor web la información que tiene que devolver al
navegador del cliente.
para avanzar y retroceder las páginas en el código que devuelves al servidor
web tendrás que poner algún javascript o vscript que te haga eso.

Digamos si un cliente pone http://www.paginaweb.com/prueba.html el servidor
web buscará el ficheor prueba.html y se lo devolverá al navegador del
cliente que ha hecho petición. Si pone
http://www.paginaweb.com/pruebaisapi.dll el servidor web cargará la dll
llamará a una función exportada que siempre es la misma y en un puntero a
cadena pruebaisapi.dll grabará los datos que el servidor web tiene que
devolver si por ejemplo graba:
<html><head></head><body>Hola mundo</body></html>
Esto es lo que le llegará al navegador del cliente.
Si grabas:
Hola mundo
esta cadena le llegará al navegador del cliente pero claro esto el navegador
del cliente esto no lo va a entender.

3. ¿Alguien sabe de un buen manual para programar con ISAPI?



El fundamento de ISAPI es un filtro en el servidor web.
Es una dll que exporta una función que tiene un formato y un nombre fijo
siempre.

Imaginemos que creas un isapi que se llama isapi.dll, lo tendrás que colocar
normalmente en un directorio con permiso de ejecución y no de escritura.

Cuando un usuario acceda a él mediante:

http://www.paginaweb.com//isapi.dll...or1=valor2

El IIS cargará la dll ( si no la tiene ya cargada ) y llamará a su función
exportada, le pasará un montón de información y un puntero a una cadena. En
dicha cadena tendrás que poner todo el código que el IIS devolverá al
navegador que ha hecho la petición anterior.

Lo normal es que devuelvas código del tipo http. Pero por ejemplo, puedes
devolver un fichero .gif. Imaginate que tienes que web que tiene una imagen
en el centro que visualiza una estadisticas de las ventas de la empresa. Si
no quieres estar creando continuamente y grabando el .gif en el IIS, puedes
hacer que el isapi.dll consulte la base de datos averigue los datos de la
gráfica, y genere la información en fichero .gif ( pero en memoria no en
disco ) y ahora tú devolverás lo mismo que devolvería el IIS si cogiera ese
fichero del disco del servidor Web.

Basicamente es eso, que ocurre que el código html que devuelves normalemtne
son pagina html que están almacenadas en el servidor web y mediante unas
etiquetas especificas las cargas en memoria le cambias las etiquetas y le
devuelves al cliente la pagina transformada.

Tambien lo que se hace es coger un fichero .xml y hacerle una transformacion
para que cree otro .xml con formato HTML y eso se devuelve al cliente.

Comentar que un isapi es una dll que carga el IIS solo una vez y por cada
petición que se haga a la dll el servidor web crea un thread nuevo.Si hay 40
navegadores haciendo peticiones al isapi, la dll se estará ejecutando en 40
thread a la vez, que quiere decir esto que hay que tener mucho cuidado con
usar variables globales en la dll, sincronización de datos, etc.etc.

De todos modos para saber más ya sabes MSDN busca ISAPI.

Saludos.
Isidro.
Respuesta Responder a este mensaje
#2 AVCL
24/12/2004 - 14:39 | Informe spam
Gracias Isidro por tu ayuda.
En cuanto a la pregunta nº 1, lo que quiero decir es que si igual que
recogemos datos de un formulario Html y los enviamos a una función de la dll
podemos hacer eso mismo pero al revés; es decir, enviar datos desde una
función situada en la dll hacia un formulario Html previamente diseñado por
nosotros.


"Isidro Muñoz" <imunoz@()daipro.net> escribió en el mensaje
news:
Hola Felix,

1. ¿Se puede llenar un formulario HTML guardado en disco con datos
procedentes de una extensión ISAPI?


No la entiendo esta pregunta.

2. ¿Se puede desde código C++ avanzar o retroceder páginas cargadas en el
Explorer?


Si lo que quieres es que mediante el ISAPI puedas avanzar y retroceder
páginas en el Explorer del cliente te digo que no.
Un Isapi solo se ejecuta en el servidor web ( igual que si fuera ASP ), lo
único que ocurre que es un módulo win32 que el servidor web ejecuta y este
módulo le devuelve al servidor web la información que tiene que devolver
al
navegador del cliente.
para avanzar y retroceder las páginas en el código que devuelves al
servidor
web tendrás que poner algún javascript o vscript que te haga eso.

Digamos si un cliente pone http://www.paginaweb.com/prueba.html el
servidor
web buscará el ficheor prueba.html y se lo devolverá al navegador del
cliente que ha hecho petición. Si pone
http://www.paginaweb.com/pruebaisapi.dll el servidor web cargará la dll
llamará a una función exportada que siempre es la misma y en un puntero a
cadena pruebaisapi.dll grabará los datos que el servidor web tiene que
devolver si por ejemplo graba:
<html><head></head><body>Hola mundo</body></html>
Esto es lo que le llegará al navegador del cliente.
Si grabas:
Hola mundo
esta cadena le llegará al navegador del cliente pero claro esto el
navegador
del cliente esto no lo va a entender.

3. ¿Alguien sabe de un buen manual para programar con ISAPI?



El fundamento de ISAPI es un filtro en el servidor web.
Es una dll que exporta una función que tiene un formato y un nombre fijo
siempre.

Imaginemos que creas un isapi que se llama isapi.dll, lo tendrás que
colocar
normalmente en un directorio con permiso de ejecución y no de escritura.

Cuando un usuario acceda a él mediante:

http://www.paginaweb.com//isapi.dll...or1=valor2

El IIS cargará la dll ( si no la tiene ya cargada ) y llamará a su función
exportada, le pasará un montón de información y un puntero a una cadena.
En
dicha cadena tendrás que poner todo el código que el IIS devolverá al
navegador que ha hecho la petición anterior.

Lo normal es que devuelvas código del tipo http. Pero por ejemplo, puedes
devolver un fichero .gif. Imaginate que tienes que web que tiene una
imagen
en el centro que visualiza una estadisticas de las ventas de la empresa.
Si
no quieres estar creando continuamente y grabando el .gif en el IIS,
puedes
hacer que el isapi.dll consulte la base de datos averigue los datos de la
gráfica, y genere la información en fichero .gif ( pero en memoria no en
disco ) y ahora tú devolverás lo mismo que devolvería el IIS si cogiera
ese
fichero del disco del servidor Web.

Basicamente es eso, que ocurre que el código html que devuelves
normalemtne
son pagina html que están almacenadas en el servidor web y mediante unas
etiquetas especificas las cargas en memoria le cambias las etiquetas y le
devuelves al cliente la pagina transformada.

Tambien lo que se hace es coger un fichero .xml y hacerle una
transformacion
para que cree otro .xml con formato HTML y eso se devuelve al cliente.

Comentar que un isapi es una dll que carga el IIS solo una vez y por cada
petición que se haga a la dll el servidor web crea un thread nuevo.Si hay
40
navegadores haciendo peticiones al isapi, la dll se estará ejecutando en
40
thread a la vez, que quiere decir esto que hay que tener mucho cuidado con
usar variables globales en la dll, sincronización de datos, etc.etc.

De todos modos para saber más ya sabes MSDN busca ISAPI.

Saludos.
Isidro.


Respuesta Responder a este mensaje
#3 Isidro Muñoz
28/12/2004 - 10:31 | Informe spam
Me imagino que lo que quieres hacer es crear un FORM en HTML cuyos campos
vayan inicializados

¿es eso?

Supongamos que en html un formulario inicializado con datos es:

<form>
<input type="k,,,,," data=",,,," >
<intput type="" data="">
.
.
.
</FORM>

Este código es figurado y no es exactamente como es en HTML, es para
entendernos.

Donde data son los valores de inicialización pues el ISAPI el codigo HTML
que generé será ese mismo

¿me he explicado?

Saludos.
Isidro.

"AVCL" escribió en el mensaje
news:
Gracias Isidro por tu ayuda.
En cuanto a la pregunta nº 1, lo que quiero decir es que si igual que
recogemos datos de un formulario Html y los enviamos a una función de la


dll
podemos hacer eso mismo pero al revés; es decir, enviar datos desde una
función situada en la dll hacia un formulario Html previamente diseñado


por
nosotros.


"Isidro Muñoz" <imunoz@()daipro.net> escribió en el mensaje
news:
> Hola Felix,
>
>> 1. ¿Se puede llenar un formulario HTML guardado en disco con datos
>> procedentes de una extensión ISAPI?
> No la entiendo esta pregunta.
Respuesta Responder a este mensaje
#4 FGF
28/12/2004 - 13:49 | Informe spam
Gracias Isidro, pero no es eso lo que preguntaba. Lo que quiero decir es si
desde una función de una dll podemos iniciar un formulario html. Algo así
como cuando desde una base de datos cargamos un diálogo cuyo recurso nos ha
porporcionado VC++. Por ejemplo:

CMiExtensionIsapi::EnviarDatos(CHttpServerContext *pCtxt, CString strDato1,
CString strDato2, CString strDaton)
{
CargarDatos(Formulario.htm, strDato1, strDato2, strDaton);
*pCtxt << Formulario.htm;
}

Formulario.htm es la página donde tenemos el formulario html. Se supone que
debe estar creada antes y guardada en nuestro disco duro.
CargarDatos es una función que refleja mi pregunta y que hace lo que yo no
sé hacer (si es que se puede hacer).

"Isidro Muñoz" <imunoz@()daipro.net> escribió en el mensaje
news:OVbA$$
Me imagino que lo que quieres hacer es crear un FORM en HTML cuyos campos
vayan inicializados

¿es eso?

Supongamos que en html un formulario inicializado con datos es:

<form>
<input type="k,,,,," data=",,,," >
<intput type="" data="">
.
.
.
</FORM>

Este código es figurado y no es exactamente como es en HTML, es para
entendernos.

Donde data son los valores de inicialización pues el ISAPI el codigo HTML
que generé será ese mismo

¿me he explicado?

Saludos.
Isidro.

"AVCL" escribió en el mensaje
news:
Gracias Isidro por tu ayuda.
En cuanto a la pregunta nº 1, lo que quiero decir es que si igual que
recogemos datos de un formulario Html y los enviamos a una función de la


dll
podemos hacer eso mismo pero al revés; es decir, enviar datos desde una
función situada en la dll hacia un formulario Html previamente diseñado


por
nosotros.


"Isidro Muñoz" <imunoz@()daipro.net> escribió en el mensaje
news:
> Hola Felix,
>
>> 1. ¿Se puede llenar un formulario HTML guardado en disco con datos
>> procedentes de una extensión ISAPI?
> No la entiendo esta pregunta.




Respuesta Responder a este mensaje
#5 Isidro Muñoz
31/12/2004 - 13:52 | Informe spam
Buenas,

Actualmente no sé como VC++ suporta está utilidad. Existen varias formas:

1.- El formulario.htm que sea un xml, y ahora le aplicas un xslt ( me parece
que se escribe así ). La idea es que tienes un documento xml y lo
transformar en el que a tí te interesa inicializandole los datos del html.

2.- En otro entorno de desarrollo de c++ que yo tambien trabajo como se hace
es:
a) En el documento formulario.htm creas unas etiquetas del tipo <#var1>,
pones en el documento todas las etiquetas de este tipo que quieras.
b) Existe una clase que la inicializas con el documento formulario.htm,
al ejecutar un método de esta clase, recorre todo el documento htm
y por cada pestaña del tipo <#var1> genera un evento que es
intercepta por una función tuya y tú dependiendo del valor sustituyes el
valor por lo que tú quieras. Yo lo que hago es que esa variable se
llame igual que el campo en el base de datos y luego solo tengo que
sustituirla.
Esto componentes se llaman Producers.

Como bien te digo no sé que librerías u objetos existen en VC++ para hacer
esto.

De todos modos si te sirve de ayuda construye una clase que haga lo que te
he expuesto antes.

Si has captado la idea no creo que te sea muy dificil de implementar, ya
sabes le pones unas etiquetas al htm, lo cargas lo lees y vas sustituyendo y
luego eso es lo que devuelves.

Saludos.
Isidro.

"FGF" escribió en el mensaje
news:
Gracias Isidro, pero no es eso lo que preguntaba. Lo que quiero decir es


si
desde una función de una dll podemos iniciar un formulario html. Algo así
como cuando desde una base de datos cargamos un diálogo cuyo recurso nos


ha
porporcionado VC++. Por ejemplo:

CMiExtensionIsapi::EnviarDatos(CHttpServerContext *pCtxt, CString


strDato1,
CString strDato2, CString strDaton)
{
CargarDatos(Formulario.htm, strDato1, strDato2, strDaton);
*pCtxt << Formulario.htm;
}

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida