“Plataforma Microsoft .NET.
Conceptos, Partes Componentes
y Programación”
Profesor: Prof. Julio César Camps
Breve descripción del
Framework .NET y su lenguaje
estrella “C#”
Contenido





Análisis retrospectivo
Descripción del framework .NET
Breve descripción del C#
Sumario
Preguntas
Bibliografía

[1] .NET Framework SDK
http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpguide/html/cpconcommontypesystemoverview.asp

[2] Common Language Runtime Overview
http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpguide/html/cpconcommontypesystemoverview.asp

[3] MSDN Magazine Content September 2000
http://msdn.microsoft.com/msdnmag/issues/0900/default.aspx

[4].NET Development
http://msdn.microsoft.com/NET/


[5] Building Distributed Applications. ASP.NET Web Services or
.NET Remoting
(MSDN Library Abril de 2003.)
[6] Project MONO
http://www.go-mono.com/

[7] ASP.NET Web. The Official Microsoft ASP.NET Site
http://www.asp.net
Sección 1. Retrospectiva



Desafíos para los desarrolladores
Desafíos para los clientes
Aplicaciones y servicios
Desafíos para los desarrolladores

Desarrollo
1. Elección del sistema operativo y el lenguaje.

Distribución
1. CD-ROM: producción, empaquetamiento y transporte.
2. La entrega electrónica requiere de la intervención humana.

Estabilidad
1. Problemas de compatibilidad de DLLs.

Mantenimiento
1. Los mismos que para la distribución
Desafíos para el cliente 1/2

Difusión o despliegue
1. La instalación requiere tiempo y
personal.
2. Pruebas para garantizar la
compatibilidad con aplicaciones y S.O.
preexistentes.
3. Manejo de licencias
Desafíos para el cliente

2/2
Estabilidad y seguridad
1. Requiere aun mas pruebas
2. Brechas de seguridad
3. Posibilidad de desestabilización a otros procesos,
por procesos no amistosos e inclusive al mismo S.O.

Mantenimiento
1. Todos los problemas anteriormente relacionados
Aplicaciones y Servicios

Aplicaciones como soluciones de
servicios
1. Las soluciones de hoy dan servicio como aplicaciones.
2. Las soluciones del mañana serán servicios, no aplicaciones.

Servicios en internet actuales
1. Distribuidos a través de portales.
2. No son portables.
3. Dependientes del navegador y del dispositivo
Qué es .NET?
Plataforma .NET y .NET
Framework
Servicios Web
Office.Net
Componentes diseñados
...
...
Aplicaciones.NET
Servidores Enterprise
Lenguajes:
SQL Server
C#, Visual Basic, etc
BizTalk
...
Runtime
Common
Type
System
Common
Language
Runtime
Services:
.NET Framework
Sistema operativo
.NET and COM+
Plataforma .NET y .NET
Herramientas
para
Framework
desarrolladores
Servicios Web
Office.Net
Componentes diseñados
...
...
Aplicaciones.NET
Servidores Enterprise
Lenguajes:
SQL Server
C#, Visual Basic, etc
BizTalk
...
Runtime
Common
Type
System
Common
Language
Runtime
Services:
.NET Framework
Sistema operativo
.NET and COM+
Diagrama del .NET Framework
Web
Services
User
Interface
Base Classes
Common Language Runtime
Base Frame
Data & XML
Beneficios claves de .NET

Facilidad de uso


Modelo orientado a objetos
 todo es un objeto.
Los espacios de nombres y la estructura
misma del Framework
 Fácil de comprender y usar.
 Esquema de nombres de los espacios de
nombres refleja su funcionalidad
subyacente.
Beneficios claves de .NET

Libertad de elección:



Estabilidad




El lenguaje que satisface sus necesidades.
La herramienta de desarrollo con que esté más
familiarizado.
No más falta de memoria.
El recolector de “basura” administra la
memoria
Eliminados los problemas de incompatibilidad
con DLLs
Seguridad


Es imposible hacer referencia a una zona de
memoria que no pertenezca a quien la
referencia
Modelo de seguridad consistente
Beneficios claves de .NET

Distribución y mantenimiento



Distribución : el código es “ensamblado”
y ejecutado de forma “segura”.
Mantenimiento : simplificado el
mantenimiento del versionado
Experiencia unificada

Integra servicios diferentes en una
solución nueva, unificada.
Beneficios claves de .NET


Servicios Web
La Web “del modo que la quieras”



En cualquier lugar.
En cualquier momento.
En cualquier dispositivo.
Resumen

1/2
La plataforma .NET provee los medios
para:



Distribuir soluciones donde quiera, en
cualquier momento y hacia cualquier
dispositivo.
Migrar soluciones heredadas.
Desarrollar usando las herramientas y
lenguajes de tu elección.
Resumen

2/2
La plataforma .NET provee los medios
para:



Crear soluciones abiertas sobre
estandares abiertos.
Mejor desarrollo, distribución y
mantenimento de soluciones
Crear y usar servicios Web
Resumen sobre C#



Sistemas orientados a
componentes
Conceptos de componentes en
.NET
Por qué C#?
Sistemas orientadas a componentes

COM


Modelo de componentes mas exitoso
en la historia
Hace posible la integración entre
organizaciones y la rehusabilidad
1/2
Sistemas orientadas a componentes
1/2
No obstante:

Actualmente COM muestra su edad
DCOM no tiene buen desempeño sobre Internet

Más sistemas basados en componentes, más “Infierno
de las DLL"

Difícil de implementar aún con herramientas ya maduras
COM no es exactamente independiente del lenguaje

Asume determinadas caracteristicas sobre el caracter
binario de los datos.

Conceptos de componentes en .NET
1/2

Toma lo mejor de COM+



Interfaces como contratos abstractos
Los componentes implementan y
publican interfaces
Exploración dinámica de
capacidades y contratos
Conceptos de componentes en .NET
2/2

Incorpora




Verdadera orientación a objetos
Modelo nativo de eventos
Sistema de tipos y runtime independientes
del lenguaje
Extensibilidad a todos los niveles
Por qué C#?

Lenguaje orientado a componentes


Desarrollado sobre la experiencia de COM+
Soporte nativo para



Espacios de nombres
Versionado
Desarrollado manejado por atributos
Por qué C#?





Potencia de C con la facilidad de uso de
Microsoft Visual Basic®
Curva de aprendizaje mínima
Código mucho mas claro que C++
Más estructurado que Visual Basic
Mas potente que Java
Elementos de C#



Estructura y forma
Sistema de tipos de C#
Entendiendo el lenguaje C#
Forma y estructura


No posee ficheros de cabecera
“header”
C# emplea el modelo "definición
junto a declaración"


Similar a la implementación
“inline” de C++


Visual Basic, Pascal, Modula, Java
Sin implicación en la generación de
código
Compilación condicional pero sin
soporte para macros
Sistema de tipos 1/2


Desarrollado directamente sobre el
Common Type System de .NET
Framework
Acceso nativo al CTS .NET

C# fue concebido sobre .NET
Sistema de tipos 2/2

Conceptos principales:

Todo es objeto


Absolutamente todos los tipos heredan
implicitamente del System.Object
Distinción clara entre tipos por valor y
por referencia


Por Valor: Tipos Simples, Enumerados,
Estructuras
Por referencia: Interfaces, Clases, Arreglos
Tipos Simples
Tipos
enteros
 byte,
sbyte (8bit), short, ushort (16bit)
 int, uint (32bit), long, ulong (64bit)
Tipos
 float
flotantes IEEE
(precisión de 7 dígitos)
 double (precisión de 15–16 dígitos)
Tipos Simples

Tipo numéricos exactos


Tipos Caracter



decimal (28 dígitos significativos)
char (un único caracter)
string (cadena de caracteres, tipo por
referencia)
Tipo Boolean

bool (tipo distintivo, no es equivalente al
int)
Enumerados


Nombrar elementos usando
nombre en vez de números
Mejor usar "Color.Azul" que "3"



Más legible, de más fácil
mantenimiento
Tipo por valor por lo que es tan ligero
como un int
Ejemplo: enum
Color
{
Rojo,
Verde,
Azul,
};
Arreglos 1/2



Indexados a partir de Cero
Desarrollados a partir de la clase
System.Array
Declarados con tipo y formas, pero
sin tamaño límite



int[] SingleDim;
int[,] TwoDim;
int [][] Jagged; (dentados)
Arreglos 2/2

Creados usando new con límites o
inicializadores



SingleDim = new int[20];
TwoDim = new int[,]{{1,2,3},{4,5,6}};
Jagged = new int[1][];
Jagged[0] = new int[]{1,2,3};
Clases 1/2

Implementación de código y datos



Representa una unidad semántica
Implementa interfaces
No herencia múltiple
Clases 2/2

Clases pueden contener:




Campos: variables
miembros
Propiedades: valores
accesibles a través de los
pares de métodos get/set
Métodos: funcionalidad de
los objetos o clases
Especiales: eventos,
indexers, delegados
public class Person :
IPersonAge
{
private int YOB;
public Person()
{
}
public int YearOfBirth
{
get { return YOB; };
set { YOB = value; };
}
}
Estructuras

Grupos de código y datos

Similar a las clases, sin embargo:



Desarrolladores de C++


No se permite la herencia
Siempre se almacenan por valor
Estructuras no son una clase con
todos sus miembros públicos
Ejemplo:
struct Point
{
double X;
double Y;
void MoveBy(double dX, double dY)
{ X+=dX; Y+=dY; }
}
Propiedades


Unión entre campos y métodos
Se recomienda su uso en:




Implementación de miembros de solo
lectura
(omitiendo la claúsula set)
Validación durante la asignación
Valores calculados o compuestos
Ejemplo:
string Name
{
get { return name; }
set { name = value; }
}
Indices





Modo consistente para la construcción
de contenedores
Construidos sobre la filosofía de las
“propiedades”
Posibilita el acceso indizado a los
objetos
Calificador del indice puede ser de
cualquier tipo
Ejemplo:
object this[string index]
{
get { return Dict.Item(index); }
set { Dict.Add(index,value); }
}
Indices
 Convertidos por el compilador en
llamadas a métodos, para facilitar la
interoperabilidad entre lenguajes
<tipoIndizador> get_Item(<índices>)
{
<códigoLectura>
}
void set_Item(<índices>, <tipoIndizador> value)
{
<códigoEscritura>
}
Delegados

Delegados



Similares a los punteros a función de
C y C++
Fuerte chequeo de tipos, lo que
impide la confusión antes existente en
relación con los type-cast
Ejemplo:
delegate void Clicked(Element e, Point p);
Instrucciones

Similares a C, C++: control de
flujos y ciclos






if (<bool expr>) { ... } else { ... };
switch(<var>) { case <const>: ...; };
while (<bool expr>) { ... };
for (<init>;<bool test>;<modify>) { ... };
do { ... } while (<bool expr>);
Instrucciones

Diferentes a C, C++:

lock(<object>){ ... };


Sincronización de secciones críticas es
inherente al lenguaje
checked {...}; unchecked { ...};

Protección contra el “Integer overflow”
Métodos para colecciones:
foreach



Soporte directo a las iteraciones sobre las
colecciones
 Pueden ser usados por arreglos y otras
colecciones
Ademas se puede usar con cualquier otra
clase
 Implemente IEnumerable con el método
GetEnumerator()
 Devolviendo un objeto implementado de
tipo IEnumerator
Ejemplo:
Point[] Points = GetPoints();
foreach( Point p in Points )
{
MyPen.MoveTo(p.x,p.y);
}
Operadores 1/2

Similares a C:




Lógicos/condicionales: && ||
Aritméticos:
* / + - << >>
Relacionales: == != < > >= <=
No exactamente C:


Para bool: & y | son lógicos con
evaluación completa
Para integer: & y | ejecutan AND/OR
binarios
Operadores 2/2

No similares a C:



is
Prueba el tipo en tiempo de ejecución
as Convierte un valor a un tipo especificado
typeof Devuelve el tipo en tiempo de ejecución
Sobre carga de operadores



La mayor parte pueden ser redefinidos
 Aritméticos, relacionales, condicionales,
y lógicos
No permitido para
 Operadores de asignación
 Operadores especiales (sizeof, new, is,
typeof)
Ejemplo:
Public static Total operator +(int
Amount, Total t)
{
t.total += Amount;
}
Modificadores de acceso 1/2

Adopta el modelo C++

public  cualquiera puede invocarlo o
accederlo

protected  solamente los miembros
pueden accederlo

private  solo los miembros de
exactamente esta clase pueden accederlo
Modificadores de acceso 2/2

Expande el modelo de C++



sealed  No se puede usar como clase
base de una jerarquía
internal  Acceso público solamente desde
su ensamblado
protected internal  protegido dentro de su
ensamblado
“Y los punteros?”


C# soporta
 Tipo string intrínseco
 Modelo de recolección de basura
 Parámetros por referencia usando ref
 void increment(ref int value, int by)
 Parámetros de salida usando out
 bool add(int a, int b, out int c)
Punteros están disponibles para el código
marcado como unsafe
unsafe void crypt(byte[] arr)
{
byte * b = arr;
...
}
Boxing y Unboxing




Tipos por valor pueden "boxed" y "unboxed"
"Boxing" permite que los tipos por valor se
traten por referencia
Basado en el tipo objeto implicito de todos los
tipos.
Ponga el valor en una caja y referénciela
42
42
double Value;
// Boxing
object BoxedValue = Value;
// Unboxing
Value = (double)BoxedValue;
42
Boxed:
Referencia
Unboxed:
Copia
Recolección de basura

Creación nuevos objetos y arreglos de
datos





Todos son creados mediante el uso de new
El .NET runtime mantiene un registro
automatico de todo el uso de la memoria
El recolector de basura automaticamente
remueve todos los objetos que esten sin
uso
Un uso más eficiente de la memoria
Fácil de usar y “cero escapes de memoria”
Manipulación de Excepciones


Similar a C++
Ejemplo:
 try ejecuta este código
 ...si ocurre un error,
catch que puedo hacer
en ese caso ...
 ...finally me permite
realizar algun trabajo
manual de rescate
try
{
//... run code
}
catch(SomeException e)
{
//... handle
}
finally
{
//...end gracefully
}
Diferencias con C++


C# es muy parecido a C/C++
Corrige la mayoría de sus errores:



Estricto chequeo de tipos
No más"fall-through" por break en la
instrucción switch
Expresiones booleanas y las
instrucciones que las involucran son
estrictamente chequeadas.
Espacios de nombres 1/2

Toda definición debe estar
contenida en un espacio de
nombres



Impide colisiones de nombres
Organiza el código
Pueden y deben ser anidados
Espacios de nombres 2/2



Agrupa clases y tipos por semántica
Declarados con la palabra clave
namespace
Referenciados con using
Herramientas disponibles

.NET Framework SDK—todo lo
necesario para construir
aplicaciones



Compilador C#
Debugger Visual
Visual Studio.NET—the
productivity rocket



Ambiente de desarrollo optimizado
para C#
“Code wizards” y templates
Ayuda inteligente
.NET Framework SDK

Compilador de C# (+ Visual Basic,
C++, and JScript)



Visual Debugger—GuiDebug



Desarrollado sobre la tecnologia Visual
Studio.NET
Acceso completo a los metadatos en
tiempo de ejecución
Herramientas


Todas las caracteristicas del lenguaje
Ejecucion desde linea de comandos
Nmake, security, configuration, IL
Disassembler, ...
Libre para todos
Visual Studio.NET


Desarrollado para .NET Framework SDK
Reinvención del concepto de Visual
Studio®, ahora con:





Proyectos Multi-lenguajes
Un ambiente integrado de desarrollo para
todos los lenguajes y tareas
Herramientas integradas: Visual Modeler,
Database Management
Perfecta integración de la ayuda
Alta productividad para todo:


RAD Rapid application development
Proyectos de gran escala
El clásico comienzo:
"Hello World!" in C#
Hello World
namespace Sample
{
using System;
public class HelloWorld
{
public HelloWorld()
{
}
public static int Main(string[] args)
{
Console.WriteLine("Hello World!");
return 0;
}
}
}
Anatomía del “Hello World”





Contenido en su propio espacio de
nombres
Referencia otros espacios de nombres
con "using"
Declara una clase de aplicación
públicamente accesible
Punto de entrada "static int Main( ... )"
Escribe "Hello World!" en la consola
del sistema

Usa el método estático WriteLine en
System.Console
Preguntas
Actividad Orientadas

Argumente las existencia o no de la
característica multiplataforma de la
tecnología .NET
Bibliografía: Project MONO http://www.go-mono.com/
Sintaxis
switch (<expresión>)
{
case <valor1>:
case <valor2>:
...
default:
<bloque1>
<siguienteAcción>
<bloque2>
<siguienteAcción>
<bloqueDefault>
<siguienteAcción>
}
Donde <siguiente acción> puede tener los siguientes valores:
1.
goto case <valori>;
2.
goto default;
3.
break;
Regresar
ADO.NET
Contenido



Diferencias entre ADO y ADO.NET
Beneficios de ADO.NET
Conceptos y arquitectura de la base de
ADO.NET



El Modelo de Objeto de ADO.NET
DataSet y Data Views
Administración de proveedores
ADO.NET y .NET Framework
Microsoft .NET Framework
Web Services
Interface de Usuario
Data y XML
ADO.NET
XML
...
Clases Bajas
Common Language Runtime
...
ADO vs. ADO.NET 1/2

ADO




Diseñado para accesos conectados
Atado al modelo físico de los datos
El RecordSet es el contenedor central de datos
El RecordSet es una (1) tabla que contiene todos los datos





Recuperar datos desde > 1 tabla o recurso, requiere un JOIN de base de
datos
Los datos son “aplanados”: se pierden las relaciones; la navegación es
secuencial
Los tipos de datos son limitados al tipo de datos COM/COM+
Los datos se comparten mediante las vías que provee COM
Problemas con la transferencia a través de firewalls (DCOM,
binary)
ADO vs. ADO.NET 2/2

ADO.NET




Diseñado para accesos desconectados
Puede modelar los datos de forma lógica!
El DataSet reemplaza el RecordSet
DataSet puede contener varias tablas





Recuperar datos desde >1 tabla o fuente no requiere de
JOIN
Las relaciones son preservadas: la navegación es
relacional
Los tipos de datos solo son limitados por el
esquema XML
No se necesita conversiones de tipos de datos
Tanto XML, como HTML, son textos planos:
“Firewall friendly”
Beneficios de ADO.NET

Interoperabilidad a través del uso de XML





Escalabilidad a través del DataSet desconectado




Norma abierta
Texto humanamente leíble y descifrable
Los datos se describen por si mismos—asi es XML
Usado para la transferencia de todos los datos en ADO.NET
Las conexiones no se mantienen por periodos largos
La base de datos no se bloquea
E trabajo se realiza a la manera de trabajos Web: “Hit and
Run!”
Mantenimiento

Separación de la lógica de los datos y la Interfaz de usuario
Mejoras de Visual Studio.NET

Programable
 “Typed programming”, un estilo de programación




Uso de palabras end-user : Facilita leer y escribir
Completamiento de la declaración en Microsoft Visual
Studio.NET
Mas seguro: Proporciona el chequeo de compilación
Ejemplos:


Untyped:
enTable("Customer")("Jones").Column(“Balance”)
Typed:
myDataSet.Customer("Jones").Balance

Ayuda de apoyo
Conceptos principales y
Arquitectura


El Modelo de Objeto ADO.NET
 Proveedores de administración
 Objetos DataSet
Espacios de Nombres relacionados con
ADO.NET





System.Data
System.Data.ADO
System.Data.Internal
System.Data.SQL
System.Data.SQLTypes
Espacios de Nombres
relacionados con ADO.NET
ADO.NET
System.Data
.SQLTypes
.SQL
.Internal
.ADO
El Modelo de Objeto ADO.NET


DataSet
Proveedores de administración
System.Data 1/2



Contiene la base y el volumen de ADO.NET
Nombre de espacio Data-centric
Brinda los medios para el trabajo en y con los
datos!
 Clases y métodos para manipular los datos
 Capacidad para crear consultas de los
datos
 Medios para representar de forma lógica
los datos
 Permite el uso de XML para ver, compartir
y almacenar los datos
System.Data 2/2
System.Data

Contiene las clases principales de ADO.NET
DataSet

Cache In-Memory de datos
DataTable

Cache In-Memory de una tabla de BD
DataRow

Manipulación de una columna en un DataTable
DataColumn

Definicion de columnas en un DataTable
DataRelation

Relaionar 2 DataTables entre si
DataSetView

Crear una vista en un DataSet
System.Data y DataSet—Overview
DataSet
Tables
DataTable
DataView
DataRow(s)
Relations
DataRelation
DataRelation
DataColumn
Constraint(s)
DataTable
DataTable
DataSetView
System.Data—DataSet 1/3


Una cache en memoria de datos de una fuente de
datos
Forma común de representar y manipular datos



Representación lógica o física de datos; dependen
de:



El conjunto de resultados
Si DataTables y Relations existen
Diseñado para ser desconectado de la fuente de
datos


Contenedor universal de datos
No para uso justamente con base de datos
Conectar, ejecutar consulta y desconectar
XML usado para leer y escribir datos y esquemas
System.Data—DataSet 2/3


Las colecciones son utilizadas para adicionar y
eliminar tablas y relaciones
Propiedades de interés:







Tables: Devuelve una colección de objetos DataTable
Relations: Devuelve una colección de DataRelations
XML: Obtiene o coloca la definición de DataSet como XML
XMLData: Obtiene o coloca el dato DataSet’s como XML
XMLSchema: Obtiene o coloca el esquema DataSet como
XML
Namespace: Obtiene o coloca el nombre de espacio del
DataSet
Ejemplo de uso de las propiedades:

aTableCollection=aDS.Tables.Add(aTable);
System.Data—DataSet 3/3

Universal Data Container

DataSet: No es solo para Bases de Datos
System.Data—DataTable




Puede ser mapeado a una tabla física en la fuente de datos
Pueden relacionarse por medio de DataRelations
Concurrencia optimista o modelo fijo
Propiedades de interés:

Columns: Devuelve objetos ColumnsCollection de
DataColumns

Rows: Devuelve objetos DataRow como objetos
RowsCollection

ParentRelations: Devuelve un objeto RelationsCollection

Constraints: Devuelve un objeto ConstraintsCollection de las
tablas

DataSet: Devuelve un objeto DataSet de uno DataTable

PrimaryKey: Obtiene el objeto DataColumns el cual crea la
llave primaria de las tablas
System.Data—DataSet y
DataTable

Crear un objeto DataTable y adicionarlo a
uno DataSet
DataSet ds = new DataSet();
// Create DataTable object: “Customers”.
DataTable dt= new DataTable( “Customers” );
// Create and add columns to the table
// 1. Explicitly create and Add a DataColumn
DataColumn dc = new DataColumn( “CustID”, Int16 );
dt.Columns.Add( dc );
// 2. Implicitly Create and Add columns (DataColumn).
dt.Columns.Add( “First_Name”, String );
dt.Columns.Add( “Last_Name”, String );
// Add the DataTable object to the DataSet
ds.Tables.Add( dt );
System.Data—DataRelation 1/2



Usado para crear relaciones lógicas

Crea relaciones entre (2) objetos DataTable

Requiere un objeto DataColumn de cada objeto DataTable

El DataType de ambos DataColumns tiene que ser el mismo

No se puede relacionar un Int32 DataColumn con un String
DataColumn

La relación es nombrada (por usted!)

DataRelation dr=new DataRelation( “myRelation”,...)
Hace la navegación relacional posible
RelationsCollection contiene todos los objetos DataRelations

Accedido a través de las propiedades del DataSet’s Relations
System.Data—DataRelation 2/2

Como crear un objeto DataRelation:

Se obtienen los objetos DataColumn para relacionar

Crear un objeto DataRelation nombrado usando las columnas

Adicionar la relación al DataSet
// Building on the DataTable example earlier...
// Get the DataTable DataColumns we need to relate...
DataColumn parentCol, childCol;
parentCol= DataSet.Tables["Customers"].Columns["CustID"];
childCol = DataSet.Tables["Orders“].Columns["CustID"];
// Create DataRelation with the name “CustomerOrders”...
DataRelation dr;
dr = New DataRelation("CustomersOrders", parentCol,
childCol);
// Add the relation to the DataSet...
ds.Relations.Add( dr );
System.Data—DataSet y XML





DataSet puede leer y escribir XML para sus datos y/o esquemas

Significa que: Usted puede crear o modificar un objeto
DataSet usando XML!
XML-relacionado a DataSet. Métodos para leer:

ReadXml: Lee un esquema o dato XML dentro de un DataSet

ReadXmlData: Lee datos XML dentro de un DataSet

ReadXmlSchema: Lee un esquema XML dentro de un DataSet
Y para escribir: WriteXml, WriteXmlData, WriteXmlSchema
Propiedades XML-related :

Xml, XmlData, XmlSchema, y Namespace
DiffGrams
Métodos para leer y escribir XML
// Code for creating the DataSet mds and loading the
// DataSet from a data source not shown.
String oFile = “C:\\My_ADO.NET\\myXmlOutput.xsd”;
String iFile = “C:\\My_ADO.NET\\myXmlInput.xsd”;
// Write the DataSet’s XMLSchema to an XML Document
mds.WriteXmlSchema( oFile );
// Read/Upload XML Data into the DataSet
mds.ReadXmlData( iFile, true );
// Write the existing Data to an XML Document
mds.WriteXmlSchema( “C:\\My_ADO.NET\\myXmlData.txt );
// Or output the XML Data using the XmlData property!
Console.WriteLine( mds.XmlData );
System.Data—DataView



Crear múltiples vistas en un objeto DataTable
Invisible a los controles de Interfase de usuario
Propiedades de interés:





Item: Recupera una fila de datos de una tabla especifica
Table: Recupera o coloca el DataTable asociado
Sort: Obtiene o coloca la clase de columna de la tabla y el
orden de la clase
RowFilter: Obtiene o fija la expresión utilizada para filtrar
las filas
RowStateFilter: Consigue o fija el filtro del estado de la
fila

None, Unchanged, New, Deleted, ModifiedCurrent, y
otros
Ejemplo de System.Data—
DataView

Creando objetos DataView
// Code for myTable “Customers” with
// “Name” column not shown
DataView view1 = new DataView( myTable )
DataView view2 = new DataView( myTable );
// Creates Ascending view of Customers by “Name”
view1.Sort = “Name ASC”;
// Set the view to show only modified (original) rows
view2.RowStateFilter= DataViewRowState.ModifiedOriginal
// Bind to UI element(s)...
DataGrid myGrid = new DataGrid();
myGrid.SetDataBinding( view1, “Customer”);
//...
System.Data—DataSetView


Similar a un DataView pero orientado a
DataSet
Usado para crear múltiples vistas en un
DataSet


Capacidad de fijar automáticamente los filtros en
las tablas
Propiedades de interés:


TableSettings: Obtiene/fija los ajustes de las vistas
en la tabla
DataSet: Obtiene o fija el DataSet para crear la
vista

System.Data—DataSetView
Sample
Creando un objeto DataSetView usando un
DataSet
// Create the views...
DataSetView dsView1 = new DataSetView( myDS );
// Create TableSetting objects...
TableSetting ts1, ts2 ;
ts1 = new TableSetting( myDS.Tables[“Orders”],
“CustID”, “CustID<100”,
DataViewRowState.CurrentRows );
ts2 = new TableSetting( myDS.Tables[“Orders”],
“ProductId”, “ProductId>1011”,
DataViewRowState.CurrentRows );
// Add TableSettings to the DataSetView...
dsView.TableSettings.Add( ts1 );
dsView.TableSettings.Add( ts2 );
// Bind to a UI element/control...
DataSet, DataRelation,
Data…Views
DataSet
Tables
DataTable
DataView
DataSetView
DataRow(s)
TableSettings
DataColumn
Relations
Constraint(s)
DataRelation
DataRelation
TableSetting
TableSetting
DataTable
DataTable
ADO.NET y Proveedores de
Administración

Una colección de clases para el acceso a fuentes de
datos:


Microsoft SQL Server™ 2000, SQL Server 7, y MSDE
Cualquier OLE Database (OLE DB) providers



Incluyendo: Oracle, JET, y SQL OLE DB Providers
Establecer conexión entre DataSets y almacenes de datos
Dos proveedores de administración:


ADO: por medio del nombre de espacio System.Data.ADO
SQL Server: por medio del nombre de espacio
System.Data.SQL
System.Data.ADO es el proveedor de administración de
ADO.NET
System.Data—Proveedores
administrados
System.Data
.SQL
SQLCommand
SQLConnection
SQLDataReader
SQLDataSetCommand

.ADO
ADOCommand
ADOConnection
ADODataReader
ADODataSetCommand
System.Data.Internal es confiable para varias
clases heredadas
ADOConnection y SQLConnection




Representa una sesión única con una fuente de datos
Crear, abrir, cerrar una conexión a una fuente de
datos
Funcionalidad y métodos para desarrollar
transacciones
Ejemplos de ADOConnection :
String conStr="Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=NWIND_RW.MDB";
ADOConnection aConn = new ADOConnection(conStr);
aConn.Open();
// Execute Queries using ADODataSetCommand Class
aConn.Close();
Clase ADODataSetCommand 1/2

Es un puente entre un objeto DataSet y el
almacén de datos


Se hereda de la clase DataSetCommand
Es el medio de modificación del DataSet y de
la fuente de datos
Data Store
DataSetCommand
DataSet
Clase ADODataSetCommand 2/2



Propiedades de interés:

DeleteCommand: El comando delete expresado en SQL

InsertCommand: Obtener o fijar el comando insert

SelectCommand: Obtener o fijar el comando select

UpdateCommand: Obtener o fijar el comando update

TableMappings: Maps source y DataTable
ADOCommands recupera o fija mediante las propiedades
“command”
Hereda métodos de la clase DataSetCommand


public virtual int FillDataSet( DataSet dataSet );
public virtual int Update( DataSet dataSet );
Clase ADOCommand


Representa una consulta a ejecutar en la fuente de
datos
Propiedades de interés :





ActiveConnection: Obtiene o fija la conexión a la fuente de
datos
CommandText: Obtiene o fija el comando de la consulta
(texto)
CommandType: Obtiene o fija la interpretación del texto del
comando

Texto, procedimiento almacenado, o nombre de la tabla
CommandTimeout: Los segundos que faltan para terminar la
conexión
RecordsAffected: Números de records afectados por la
consulta
ADODataReader 1/2




El acceso a los datos se realiza de manera Forwardonly
Modelo de programación “Lightweight”
 Se gasta menos que al usar ADODataSetCommand
Instanciado por la clase ADOCommand con el método
Execute
Ties up the ADOCommand until it is finished reading
ADODataReader 2/2


Propiedades de interés:
 FieldCount: Devuelve el número de campos en el
resultado
 HasMoreRows: Indica si hay más filas para
devolver
 RowFetchCount: Número de filas para devolver al
mismo tiempo
 HasMoreResults: Indica que hay más resultados
Métodos para devolver datos:
 Por el tipo de la columna y el índice: GetString,
GetInt32, y otros
 Read: Lectura avanzada al próximo record
Ejemplo de ADODataReader
// Code for creating the ADOConnection “adoConn” not shown
String myQuery = “SELECT * FROM Customers”;
adoConn.Open();
ADOCommand myCmd = new ADOCommand( myQuery,adoConn );
// Declare the ADODataReader...
ADODataReader myDataReader;
// Instantiate the ADODataReader with Execute(...) ...
myCmd.Execute(out myDataReader);
// Always call Read before accessing data.
while(myDataReader.Read())
{
Console.WriteLine(myDataReader.GetString(0));
}
// Always Close the reader and the connection when done
myDataReader.Close();
adoConn.Close();
Sumario






ADO.NET es la evolución de ADO
Es un modelo centrado en Web, “desconectado”
Flexible en su capacidad de trabajar con datos
Incrementa su capacidad para organizar los datos
lógicamente
Soporte extenso para XML
 Facilita el trabajo con datos y compartiendo
datos
Interactúa con una amplia variedad de fuente de
datos
ASP.NET
Objetivos
 Introducción
al ASP.NET

Conceptos y Arquitectura interna

Características ASP.NET

ASP.NET avanzado
 ASP.NET
y el Microsoft® .NET Framework
Contenido


Sección 1: Descripción
Sección 2: Arquitectura interna


Sección 3: Características de ASP.NET


Microsoft .NET Framework y ASP.NET
Configuración
Administración, Seguridad, y Modelo de
eventos
Sección 4: ASP.NET avanzado



Web Forms
Trabajando con Datos
Migración desde ASP hacia ASP.NET
Sección 1: Descripción


“Mirando hacia atrás ...“
ASP.NET Conceptos fundamentales
Mirando atrás: Active Server
Pages

Qué es ASP?





Tecnología script del lado del servidor
Ficheros contienen HTML y código script
Accesos pedidos via HTTP
Código script es interpretado en el
servidor
Qué se podemos lograr con ASP?




Fácil y de manera inmediata podemos
crear aplicaciones Web simples
Generar contenido Web dinámico
Script del lado cliente para validaciones
Acceso a componentes COM para
extender funcionalidad

Bases de datos
Qué está mal?



Mezcla la forma (HTML) y la lógica (código
script)
Interpretar el código ASP trae como
consecuencia una reducción del rendimiento
Uso de lenguajes script que no son “strongly
typed“




Compatibilidad con los navegadores
No implementa una gestión real del “estado”



Microsoft JScript®
Microsoft Visual Basic® Scripting Edition (VBScript)
No se pueden compartir estados entre servidores
Web
Estado se pierde si el IIS colapsa.
Actualizar ficheros solamente cuando el
ASP.NET Conceptos
fundamentales


Plataforma de desarrollo Web
Nuevo modelo de programación
Cliente Web
IIS
Aplicaciones
ASP.NET
.NET
Framework
Sistema Operativo
ASP.NET Conceptos
fundamentales





Separa forma de la lógica de negocios
Usa servicios ofertados por el .NET
Framework
EL código es compilado la primera vez
que la página es solicitada
Gestión real del “estado”
Hace uso de lenguajes “serios” de
programación


Integración inter-lenguajes
Actualización de ficheros sin sacar de
servicio el servidor!
Sección 2: Arquitectura interna




La arquitectura de .NET
Framework
Modelo de aplicaciones Web
Configuración
Jerarquía de clases
Arquitectura .NET Framework
Microsoft .NET Framework
ASP.NET
Web Forms
Windows Forms
Web Services
Services Framework
Base
Data
Debug
Common Language Runtime
System Services
...
Modelo de aplicaciones Web
Código no gestionado
Pedidos HTTP
Host (IIS, Internet Explorer)
HTTP Runtime
HTTP Module
HTTP Module
Request Handler
Código gestionado
...
HTTP Runtime

Código gestionado


Diseñada para una disponibilidad
del 100%



Se ejecuta dentro de un proceso
host no gestionado
Procesamiento asincrónico de los
pedidos
Multihilo
Sustitución de las ISAPI

Internet Server Application
Programming Interface
Lista de módulos HTTP

Lista de módulos HTTP


Clases gestionadas
Cada módulo implementa una interfaz
específica




Por ejemplo: administración del estado o la
seguridad
Todos los pedidos son enrutados a través
de la misma lista de módulos HTTP
Adición de módulos se realiza a través
del Config.web
Request handler


Clases gestionadas
Múltiples request handlers por cada
aplicación

Pero solo uno por URL
Configuración

1/3
Conceptos y arquitectura

Fichero de configuración: Config.web




Basado en XML
Fichero es mantenido dentro del subdirectorio de
la aplicación
Cambios son detectados automáticamente
Arquitectura de configuración jerárquica

Influye en el subdirectorio actual y en todos sus
subdirectorios
Root
Dir
Config.web
Sub
Dir1
Sub
Dir2
Configuración

2/3
Ejemplo de Config.web

<configuration>
<configsections>
<add names=“httpmodules“
type=“System.Web.Config.
HttpModulesConfigHandler“/>
<add names=“sessionstate“
type=“...“/>
</configsections>
<httpmodules>
<!--- http module subelements go here -->
</httpmodules>
<sessionstate>
<!--- sessionstate subelements go here -->
</sessionstate>
</configuration>
Configuración

3/3
Configuración por defecto y personalidada

Config.web está localizado en
%windir%\Microsoft.NET\Framework\Version



Conjunto estándar manipuladores de la sección de
configuración
Características de los navegadores soportados,
mensajes de error personalizados, etc
Configuración personalizada


Extienda el conjunto de manipuladores de sección con
los suyos propios
Implementación de la interface:


System.Web.Configuration.IConfigurationSectionHandler
Problemas con


Directorios virtuales
Ficheros que no son ASP.NET
Jerarquía de clases
System.Object
System.Web.UI.Control
WebControl
System.Web.UI.
WebControls
ListControl
Table
ListBox
Button
CheckBoxList
TextBox
...
...
Sección 3: Características

Sintaxis y lenguajes soportados
por ASP.NET




Ejemplos
Proceso de ejecución
Ensamblado
Administración de estado,
Seguridad, y manipulación de
eventos
Lógica de procesamiento e
interface

No más unión del código HTML código script


Fácil mantenimiento de la aplicación
Completa separación entre la interfaz y la
lógica de procesamiento


No existe código de implementación dentro de los
ficheros HTML
Ficheros para los diseñadores y ficheros para los
programadores
.cs
.cs
.aspx
Lenguajes soportados

Visual Basic



JScript
C#


Nuevo lenguaje basado en
componentes
C++


VBScript no es gestionado !
Extensiones gestionadas para C++
Otros: Cobol, Smalltalk, ...

Common Language Specification
Sintaxis
1/3
Directivas

<%@ Page language=“VB“%>
Bloques

<script runat=“server“ [language = ...]>
[ lines of code ]
</script>
“Render

Blocks”
<%
[ inline code or expression ]
%>
Sintaxis

de declaración de código
de control HTML
<HTMLtag runat=“server“ [attribute = ...]>
</HTMLtag>
Sintaxis

2/3
Sintaxis de controles personalizados

Controles en el servidor personalizados


Propiedad de control en el servidor


<ASP:TextBox maxlength=“80“ runat=“server“>
Subpropiedad


<ASP:TextBox id=“MyTb1“ runat=“server“>
<ASP:Label font-size=“14“ runat=“server“>
Eventos asociados a un control en el
servidor

<ASP:Button OnClick=“MyClick“ runat=“server“>
Sintaxis
Etiquetas
3/3
de objetos en el servidor
 <object
id=“id“ runat=“server“
identifier=“idName“>
Directivas
 <!--
Include en el servidor
#include pathtype = filename -->
Comentarios
 <%--
en el servidor
comment block --%>
Ejemplo ASP.NET 1/2
<html>
<script language="C#" runat=server>
void SubmitBtn_Click(Object Sender, EventArgs E)
{
Message.Text = "Hi "+Name.Text;
}
</script>
<body>
<form action="thisfile.aspx" method=post runat=server>
<h3> Name:
<asp:textbox id="Name" runat=server/>
<asp:button type=submit text="LookUp"
OnClick="SubmitBtn_Click" runat=server/>
<p>
<asp:label id="Message" runat=server/>
</form>
</body>
Ejemplo ASP.NET
2/2
Ciclo de ejecución de un .aspx
Client
Server
IIS
Request .aspx file
ASP.NET Runtime
Parse .aspx file
Generate page class
Instantiate controls
Response
Proceso de ejecución


Compilación, cuando la página es
requerida por vez primera.
Microsoft intermediate language (MSIL)





Estilo lenguaje ensamblador
Independiente del CPU
Provee una capa de abstracción del
hardware
MSIL es ejecutado por el common language
runtime
Common language runtime


Compilador Just-in-time (JIT)
Código gestionado
Administración de “Estado”

Estado de la aplicación

Qué es una “aplicación”?



Variables de estado de la aplicación


Ficheros, páginas, módulos, y código
ejecutable
Un directorio virtual y sus subdirectorios
Información global
Reglas de Implementación





Uso de recursos del sistema
“Lock” y “unlock” su información global
Cuidado con las variables globales en
ambientes multihilo
Pérdida de estado cuando el servidor es
“destruido”
Imposibilidad de compartir estados entre
1/2
Administración de “Estado”

2/2
Estado de la sesión

Qué es una sesión?



Funcionalidad





Restringido a aplicaciones lógicas
Contexto en el cuál un usuario se comunica
con un servidor
Pedidos de identificación y clasificación
Almacenamiento de datos a través de
multiples y sucesivos pedidos
Eventos de Sesión
Liberación automatica de datos de sesión
Proceso servidor de estados en .NET
Modelo de eventos

Eventos se generan en el cliente,
pero se manipulan en el servidor
Cliente Web
evento
event
message
Server
parse message
Llamada al
manipulador
apropiado
event handler
response
Sección 4: ASP.NET avanzado





Web Forms
Controles en el Servidor
Trabajando con datos
Aplicaciones Web
Migrando de ASP hacia ASP.NET
Resumen de Web Forms
thisfile.aspx
...
<asp:Button id=“LookUp“
OnClick=„SubmitBtn_Click“ />
...
1/2
thisfile.aspx.cs
SubmitBtn_Click()
{ ...
Resumen de Web Forms

Crear páginas web programables






2/2
Usar cualquier lenguaje .NET
Proveer un conjunto amplio de
controles del lado del servidor
Modelo de eventos de Web Forms
Ejecutarse en cualquier navegador
Parte Visual y lógica de la
aplicación Web
Espacio de nombres
System.Web.UI.WebControls
Resumen de controles del
servidor


Controles Web Forms en el servidor
Familias de controles en el Servidor







HTML
ASP.NET
Validation
User
Mobile
Data Binding
Page Class

Unión de código y contenido
Familias de controles del
servidor 1/2

Controles HTML del servidor




asociados directamente con elementos
HTML
Atributos HTML
Ejemplos: HtmlAnchor (<a>), HtmlTable
(<table>)
Controles ASP.NET del servidor

Controles abstractos




No hay asociacion uno a uno con controles
html en el servidor
Detección automática del navegador
Conjunto amplio de controles
Ejemplo: TextBox (<asp:textbox>)
Familias de controles del
servidor 2/2

Controles de validación


Chequeo de la entrada de datos por el
usuario
Diferentes tipos de validación




Controles de Usuario




Entrada requerida
Comparaciones, chequeo de rangos, matcheo
de patrones
Definidos por el usuario
Particion y remodelacion de la
funcionabilidad
Extensión .ascx
Soporta el modelo de objetos
Controles para móviles
Sintaxis de los Server Controls

Analizando detenidamente la
sintaxis ASP.NET


<asp:controlName attributes />
controlName


TextBox, DropDownList, etc
attributes


Id=controlID
runat=server
Trabajando con datos 1/3

SQL y XML



APIs de acceso gestionado a datos
provistas por el runtime
Objetos esenciales


Acceso y manipulación de los datos
SQLConnection, SQLCommand, y
DataSet
Espacios de nombres

System.Data y System.Data.SQL
Trabajando con datos

2/3
Resumen ADO.NET
Windows
Form
Internet
Web Form
B2B



XML
Data Object
Dataset
Arquitectura de datos
desconectada
Datasets son vistas de datos
completamente relacionadas
XML y XML esquemas
Trabajando con datos

3/3
C#:
using System.Data;
ShoppingCart.CalculateOrderSummary();
DataRow row = ShoppingCart.OrderSummary.Rows[0];
lblSubTotal.Text = System.String.Format(“{0:C}“,
row[OrderData.SUB_TOTAL_FIELD]);

ASP.NET:
<table width=“100%“>
<tr><td>
<asp:Label id=lblSubTotal runat=server>
</asp:Label>
</td></tr>
</table>
Trabajando con la caché


Mejora el desempeño de la
aplicación Web
Caché de salida





Almacena y devuelve páginas y
objetos
Cacheo de páginas
Cacheo fragmentado
Reglas de expirado
APIs de la Cache

Personalizar los principios de la
Migración desde ASP hacia
ASP.NET




ASP y ASP.NET pueden coexistir
en el mismo servidor
Hacer uso de las características
ASP.NET
Para migrar, los ficheros ASP
tienen que ser modificados
Desempeño


Código Gestionado vs. código sin
gestionar
Asociacion temprana vs. tarde
Detalles de la migración

Estructura


Seguridad


ASP.NET viene con un modelo de
seguridad comprehensivo
Lenguajes


Bloques de código y directivas
C#, Visual Basic.NET
Data Access

ADO hacia ADO.NET
!!Preguntas!!
Servicios Web XML
Contenido




Antecedentes.
Definición del concepto “servicio web
XML”.
Características principales.
Implementación de un “Hello world”
mediante servicios web xml.
Antecedentes




Component Object Model (COM).
Remote Method Invocation (RMI).
Common Object Request Broker
Architecture (CORBA).
Internet Inter-ORB Protocol.
No interoperan fácilmente, debido a
las dependencias de un lenguaje
particular o de un sistema operativo o
de protocolos específicos de modelos
de objetos.
Qué es un servicio web XML

1/3
Diseñado para garantizar la
interoperabilidad entre las diversas
plataformas de desarrollo de
aplicaciones existentes hoy en día.
Qué es un servicio web XML


2/3
Es una unidad de código que puede
activarse a través del uso de pedidos
HTTP.
Permite además que programas
desarrollados en diferentes lenguajes
puedan comunicarse entre sí de un
modo estándar.
Qué es un servicio web XML

3/3
La llave fundamental de su éxito ha sido
su diseño del uso de un modelo de
mensajes basados en texto para
implementar la comunicación.
Características principales



Los servicios Web XML solo pueden ser
accedidos vía HTTP.
Trabajan en un ambiente sin estado, de
forma que cada pedido origina un nuevo
objeto que se crea para satisfacerlo.
Solo puede manipular elementos que
puedan ser expresados totalmente en
XML.
“Hello world” en C#
<%@ WebService Language="C#" Class="Hello" %>
using System.Web.Services;
[WebService(Namespace="urn:Hello")]
public class Hello
{
[ WebMethod ]
public string sayHello(string name)
{
return "Hello " + name;
}
}
.NET Remoting
Contenido



Definición de .NET Remoting.
Características principales.
“Hello world”.
Definición de .NET Remoting


Es un sistema genérico cuyo objetivo
principal es la comunicación entre
diferentes aplicaciones.
Los objetos .NET son expuestos a
procesos remotos, de forma que se
potencia la comunicación
interprocesos.
Definición de .NET Remoting

Las aplicaciones que participan en la
comunicación pueden estar en
diferentes máquinas de la misma red e
inclusive en diferentes máquinas en
distintas redes.
Características principales

Elimina las dificultades de DCOM
mediante el soporte de diferentes
formatos de protocolos de transporte y
de comunicación.
Características principales



Pueden ser usados mediante cualquier
protocolo.
Soporta opciones de manejo de estado
y callbacks.
Se basa en la existencia de un common
language runtime que contenga las
informaciones sobre los tipos usados.
Características principales

Requiere que los clientes sean
construidos usando Microsoft.NET o
cualquier otro framework que soporte
.NET Remoting (un ambiente
homogéneo).
Características principales


Los objetos remotos son accesibles
mediante los “canales”.
Existen dos tipos “TcpChannel” y
“HttpChannel”.
Hello world
Creando el objeto remoto.
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace CodeGuru.Remoting
{
public class SampleObject : MarshalByRefObject
{
public SampleObject()
{
}
public string HelloWorld()
{
return "Hello World!";
}
}
}
Hello world
Creando el servidor para exponer el objeto remoto.
public static int Main(string [] args)
{
// Create an instance of a channel
TcpChannel channel = new TcpChannel(8080);
ChannelServices.RegisterChannel(channel);
// Register as an available service with the name HelloWorld
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(SampleObject),
"HelloWorld",
WellKnownObjectMode.SingleCall );
System.Console.WriteLine("Press the enter key to exit...");
System.Console.ReadLine();
return 0;
}
Hello world
Creando el cliente para usar el objeto remoto.
public class SampleClient
{
public static int Main(string [] args)
{
// Create a channel for communicating w/ the remote object
// Notice no port is specified on the client
TcpChannel chan = new TcpChannel();
ChannelServices.RegisterChannel(chan);
// Create an instance of the remote object
SampleObject obj = (SampleObject) Activator.GetObject(
typeof(CodeGuru.Remoting.SampleObject),
"tcp://localhost:8080/HelloWorld" );
// Use the object
Console.WriteLine(obj.HelloWorld());
return 0;
}
}
ICE. Internet
Communication
Engine
Contenido



Definición de ICE.
Características principales.
“Hello world”.
WebParts y
personalización en
ASP.NET 2.0
Contenido



Definición de Webpart.
Descripción de las clases nuevas.
WebPartManager,
SqlPersonalizationProvider,
Definición de un portal configurable y
personalizable
!!Preguntas!!
Descargar

Breve descripción del Framework .NET