GOOGLE ADS

miércoles, 4 de mayo de 2022

asp consumiendo un servicio web, ¿qué hacer con el objeto del conjunto de registros?

Actualmente ejecuto una página web ASP clásica (antigua) con un objeto de conjunto de registros que se usa directamente en el viejo código Spagethi incorrecto.

Estoy pensando en implementar una capa de datos en asp.net como servicio web para mejorar la capacidad de administración. Este es también un primer paso para actualizar el sitio web a asp.net. El sitio en sí sigue siendo ASP por el momento...

¿Alguien puede recomendar una buena manera de reemplazar el tipo de objeto del conjunto de registros con un tipo compatible con el servicio web (como una matriz o algo así)? ¿Con qué reemplazo a continuación?:

set objRS = oConn.execute(SQL)
while not objRS.eof
...
name = Cstr(objRS(1))
...
wend

y también se pueden reemplazar varios conjuntos de registros? Yo estoy hablando:

 set objRS = objRs.nextRecordset 

¿Alguien pasó por esto y puede recomendar?

@AdditionalInfo - lo pediste:-)

Dejame empezar por el principio.
La situación existente es: tengo un sitio web ASP antiguo con contenido jerárquico clásico (encabezado, sección, subsección, contenido) extraído de la base de datos a través de procedimientos almacenados y las páginas de contenido también están en la base de datos (un enlace a un archivo html).

Ahora lo malo es que el código ASP en todas partes se distribuye en muchos archivos.asp, todos haciendo sus propias conexiones de base de datos, leyendo, escribiendo (tienes que registrarte para el contenido). Recientemente tuvimos problemas con los ataques de inyección SQL, así que me llamaron para solucionarlo.

Podría cambiar todas las páginas.asp para evitar la inyección de sql, pero sería una locura. Así que pensé en crear una capa de datos: todas las páginas que usan esta capa para acceder a la base de datos. Una vez colocado para corregir y actualizar el código de acceso a la base de datos.

Al tomar esa decisión, pensé que la actualización de asp.net no estaba muy lejos, ¿por qué no comenzar a usar asp.net para la capa de datos? De esta manera, se puede reutilizar al actualizar el sitio.

¡Eso me lleva a las preguntas anteriores!


Solución del problema

Primero, mi consejo favorito de esta semana: no trate su servicio web como si fuera un objeto local o pagará un precio de rendimiento muy alto. Esencialmente, no haga cosas como esta en su aplicación web:

MyDataWebService ws = new MyDataWebService();
foreach(DataItem item in myData)
{
ws.Insert(item);
}

Siempre debe preferir minimizar las llamadas a su servicio web (y SQL):

MyDataWebService ws = new MyDataWebService();
ws.Insert(myData); // Let the web service process the whole set at once.

Ahora, en cuanto al tipo de datos a usar para las llamadas de su servicio web, básicamente tiene dos opciones:


  • conjunto de datos

  • Todo lo demás (matriz)


La mayoría de las colecciones devueltas por un servicio web (como List<MyData>) en realidad se convierten en una matriz durante la invocación del servicio web. Recuerde que los servicios web no devuelven objetos (datos + comportamiento) sino solo estructuras de datos (o una secuencia de). Por lo tanto, hay poca distinción entre una Lista y una Matriz.

Los conjuntos de datos son clases más complejas; usan su propio serializador personalizado y prácticamente se recrean por completo en la aplicación de llamada. Hay un costo en el rendimiento a pagar por el uso de conjuntos de datos como ese, por lo que generalmente no lo recomiendo para la mayoría de los escenarios. El uso de matrices para pasar datos de un lado a otro tiende a ser más eficiente y, francamente, es más fácil de hacer.

Tu caso es un poco diferente; debido a que está convirtiendo un sitio existente que ya usa ADO, un DataSet de ADO.NET podría ser su mejor ruta de actualización. ADO.NET y ADO son lo suficientemente similares como para que una actualización directa sea más fácil de esa manera. Depende de cómo esté construido su sitio web.

Para la última parte de su pregunta, DataSets admite múltiples conjuntos de registros similares al Recordset de ADO. Se llaman tablas de datos. Cada DataSet tiene al menos un DataTable y puede leerlos en cualquier orden.

Buena suerte.

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...