Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Visual Basic Net PDF
Visual Basic Net PDF
Microsoft .NET
Presentacin
La plataforma .NET de Microsoft es la ltima apuesta de esta compaa para
la integracin de servicios y aplicaciones de Internet. Es una plataforma hecha a la
semejanza de la plataforma J2EE de Sun (no es un delito admitirlo, ni hace de
menos al software de Microsoft). La plataforma de Sun ha sentado una buena base
no slo comercial sino de filosofa moderna de sistema de informacin, que
Microsoft ha reutilizado para adecuar sus productos de desarrollo a un nuevo
entorno. Microsoft ha intentado recuperar el tiempo perdido con este software.
La plataforma est orientada a Internet y los entornos distribuidos. Por eso
hace especial hincapi en la distribucin de cdigo en diferentes ubicaciones y a la
comunicacin de estas partes de cdigo mediante objetos remotos o servicios Web
entre otras tecnologas.
La naturaleza distribuida de la plataforma obliga a hacer un especial
esfuerzo en lo que a seguridad y confianza se refiere. Todo el cdigo y servicios se
desarrollan bajo unas caractersticas apropiadas de seguridad y confiabilidad.
La plataforma se ha orientado mucho a nuevas tecnologas como XML
ampliamente aceptadas por una gran parte del sector de las tecnologas de la
informacin. Esto permite que las aplicaciones y servicios desarrollados en la
plataforma sean fcilmente integrables con otros servicios y aplicaciones, incluso de
otras plataformas.
El mbito de aplicacin de la plataforma es muy extenso, desde servicios
Web, aplicaciones Windows y aplicaciones Web hasta componentes y bibliotecas de
todo tipo.
Estructura de la plataforma
La plataforma se compone principalmente de dos partes:
Common Language Runtime
.NET Framework Class library
El primero es el entorno de ejecucin, es el cliente de la plataforma que
analiza y ejecuta el cdigo. Es el elemento anlogo al JVM de Java (Java Virtual
Machina), salvo con la diferencia que el cdigo ejecutado si es binario compilado en
este caso.
El segundo es el conjunto de bibliotecas de la plataforma integradas en ella
que permiten al desarrollador hacer uso de las principales funciones y
caractersticas de la plataforma. Es el elemento anlogo a las JFC de Java (Java
Foundation Classes).
A diferencia de la plataforma Java no existe un lenguaje definido para el
desarrollo. Si bien todo cdigo es traducido a una especie de metacdigo llamado
MSIL, similar al Bytecode de Java; ste como en el caso de Java no es apto para el
desarrollo. La plataforma slo exige una serie de tipos, estructuras y formas
comunes que todo lenguaje debe implementar y modelar de alguna manera en su
sintaxis, que le permita compilar despus su cdigo a MSIL. Microsoft distribuye la
plataforma con cuatro lenguajes de desarrollo: Visual Basic, Manager C++, C# y
J#. Aunque actualmente muchos fabricantes han anunciado la salida al mercado de
sus lenguajes de desarrollo para la plataforma .NET, como es el caso de Borland y
Delphi.
El Common Type System (CTS) define como son declarados, usados y
administrados los diferentes tipos en tiempo de ejecucin. Esto es muy til porque
define los tipos posibles y su forma lo que facilita la implementacin de estos tipos
en los diferentes lenguajes de la plataforma .NET. El CTS define los tipos nativos o
de valor y los tipos referenciados (tanto a datos, como los delegados y eventos),
los tipos miembro (mtodos, funciones, constructores, atributos) y sus
Juan Francisco Adame Lorite
Para permitir interactuar entre los elementos sin importar el lenguaje en que
se implementan, estos elementos deben mostrar slo aquellas caractersticas que
son comunes a todos los lenguajes. Por este motivo el Common Language
Specification (CLS) se define como requisito de interfaz (hacia dentro se puede
utilizar el CTS completo) de todos los elementos de la plataforma. Para que dos
elementos implementados en lenguajes distintos puedan interactuar entre s, sus
interfaces pblicos deben cumplir los requisitos de tipos especificados en el CLS. El
CLS es un subconjunto de especificaciones reducidas del CTS. El CLS permite a los
desarrolladores de diferentes lenguajes compartir cdigo y componentes. Un
resumen del CLS se encuentra en
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/cpguide/html/cpconwhatiscommonlanguagespecification.asp
El recolector de basura
En los lenguajes orientados a objetos el tiempo de vida de los mismos ya era
controlado por el compilador, pero an as haba ocasiones en que esto no era
suficiente y parte de la memoria poda quedar desreferenciada y no era liberada.
Java resolvi este problema con el recolector de basura (Garbage Collector,
GC) y la plataforma .NET hace uso del mismo concepto.
El tiempo de vida de toda instancia de una clase (objeto) es el tiempo
transcurrido entre la llamada a su constructor y la llamada a su destructor y la
liberacin de los recursos de los que haca uso. El momento de creacin es
controlado en el cdigo por el usuario. Sin embargo, la destruccin del objeto no la
lleva a cabo el usuario, el CLR ejecuta cada cierto tiempo un agente llamado
recolector de basura que comprueba que elementos no estn ya referenciados para
liberar los recursos que consumen (principalmente de memoria). La afirmacin de
que la destruccin de recursos no est controlada por el usuario no es del todo
cierta, aquellos recursos que implementen el interfaz IDisposable poseen el mtodo
Dispose que libera los recursos que posea la instancia sin necesidad de llamar al
recolector (slo los recursos asociados, la propia instancia es eliminada por el
recolector de basura).
Los objetos de tipo no nativo o de valor, son llamados objetos referenciados,
son instancias de clases. El elemento de cdigo es una referencia al heap del
proceso donde se almacena realmente la instancia. Cada cierto tiempo el GC inicia
el proceso de recoleccin de basura, primero comprueba que elementos del heap
no estn apuntados por ninguna referencia del cdigo o que referencias estn fuera
ya del mbito de ejecucin actual. Todos esos elementos son eliminados del heap.
Si el nmero de elementos eliminado es muy alto, la memoria se compacta para
aprovechar el espacio y se actualizan las referencias en el cdigo. Es por este
motivo muy importante hacer uso del operador fixed cuando trabajemos con
punteros en cdigo no administrado, para informar al GC que el elemento
referenciado apuntado no debe moverse en el proceso de compactacin a fin de
que el puntero no referencie de forma errnea. Puede verse un ejemplo de
programacin no administrada donde se comprueba este efecto en:
http://www.codeproject.com/csharp/unsafe_prog.asp.
Tambin es posible que existan elementos muy grandes en el heap, cuando
esto es as la compactacin del heap se hace muy lenta y costosa y repercute en el
rendimiento de la aplicacin. Estos elementos muy grandes son almacenados en un
heap especial que no es compactado nunca.
Para mejorar la eficiencia del recolector de basura, existen tres niveles en el
heap en los que se distribuyen los objetos segn su tiempo de vida, de ms jvenes
a ms antiguos. Cuando no hay espacio en el heap de nivel 0 para almacenar un
nuevo elemento, se llama al GC y todos los objetos que sobrevivan al proceso de
recoleccin y/o compactacin se pasan al nivel 1. Cuando el nivel 1 se colapse se
repite el mismo proceso y se pasaran al nivel 2. El nivel 2 es el de mayor nivel.
Esto es muy eficiente porque los elementos tienen tiempos de vida parecidos
segn el mbito de cdigo al que pertenecen (por ejemplo todas las variables
locales de un mtodo) y de esta manera se eliminan a la vez afectando a un solo
nivel del heap.
Ms informacin sobre el recolector de basura en:
http://msdn.microsoft.com/msdnmag/issues/1100/GCI/default.aspx.
http://www.yasd.com/tutorials/c_sharp/chap17_1.htm.
Assemblies
Los assemblies (ensamblados) son los bloques bsicos de las aplicaciones,
ellos son la unidad fundamental de despliegue, control de versiones, reutilizacin,
mbito y permisos de seguridad. Un assembly es una coleccin de tipos y de
recursos integrados de manera y forma que son la unidad lgica de funcionalidad.
Juan Francisco Adame Lorite
Metadatos
Los metadatos son informacin declarativa que define y especifica el cdigo
del assembly. Los metadatos aaden informacin adicional a la deducible del
cdigo, o definen esta informacin para que evitar que tenga que ser deducida del
cdigo (por un elemento o agente que no entienda ese lenguaje, por ejemplo).
Los metadatos facilitan la interaccin entre diferentes lenguajes. Estos
metadatos definen los tipos del assembly para que puedan ser utilizados por otros
lenguajes. As al leer el interfaz de los tipos desde los metadatos el lenguaje no
debe saber en que fue realizado pues slo se limita a lo que los metadatos le
indican.
Los metadatos definen cada tipo y miembro del cdigo de una manera
neutral. Los metadatos almacenan la siguiente informacin:
Descripcin del assembly:
Identidad (nombre, versin, cultura, llave pblica de firmado)
Juan Francisco Adame Lorite
[Serializable]
public class Searcher
{ }
Identity security
Es el mecanismo encargado de otorgar permisos y privilegios en funcin de
los metadatos de identidad del assembly. El mbito, el conjunto de cdigo y la
unidad bsica de granulado es el assembly.
El equipo tiene asignadas unas polticas de seguridad. En estas polticas se
definen que privilegios se asignan a cada assembly en funcin de algunos o algn
metadato de identidad. Por ejemplo, los assemblies cuya zona de origen (lugar
donde se ubica el assembly) sea Internet no perteneciente a los sitios seguros de
Internet Explorer, no tendr privilegios para escribir en disco, ver propiedades del
sistema, Estos metadatos de identidad pueden ser el nombre del assembly, la
Juan Francisco Adame Lorite
versin, el autor del assembly (se comprueba por la clave pblica de firmado), la
zona de ubicacin del assembly, la URL de ubicacin del assembly,
Puede que un assembly est afectado por ms de una de estas reglas de
seguridad, si es as el assembly recibe los permisos de ejecucin unin de todos los
otorgados por cada regla.
Adems se definen tres diferentes polticas y una cuarta opcional. Se
denominan de empresa, de equipo, de usuario y de dominio de la aplicacin. La
primera es comn para todo el dominio, la segunda es comn para todo el equipo,
la tercera es propia de cada usuario y la cuarta de cada dominio de aplicacin (de
cada aplicacin, sta es opcional). Los privilegios resultantes para cada assembly
son la interseccin de los otorgados por cada poltica.
En el siguiente ejemplo podemos observar que el cdigo con clave pblica de
firmado dada, cuyo nombre de assembly sea Microsoft.App y que el autor sea
Microsoft recibir por un lado permisos de lectura en el directorio c:\Microsoft y por
el otro de escritura en dicho directorio. La aplicacin tendr privilegios de lectura y
escritura en el directorio a no ser que alguna de las otras dos polticas (empresa o
usuario) no los tenga:
permisos son necesarios para ejecutar el assembly (si no, el CLR no lo ejecuta) y
cuales se deniegan (aunque la seguridad de tipo Identity los haya otorgado la
aplicacin no los poseer). Se comprueban en tiempo de carga antes de ejecutar la
aplicacin. Tambin es posible solicitar permisos de forma optativa, si no se
otorgan se proceder a ejecutar la aplicacin en este caso y deberemos comprobar
si han sido otorgados de forma imperativa
//If it is not granted the application will fail to start
[assembly : UIPermissionAttribute (SecurityAction.RequestMinimum)]
//If it is not granted the application will still run
[assembly : SecurityPermissionAttribute (SecurityAction.RequestOptional
,Flags=SecurityPermissionFlag.UnmanagedCode)]
// The entire assembly will be blocked from accessing this drive.
[assembly : FileIOPermissionAttribute (SecurityAction.RequestRefuse
,Read=C:\\)]
Los permisos imperativos o solicitados de forma imperativa se solicitan en el
propio cdigo y se comprueba si se han otorgado mediante el cdigo. Son por lo
tanto especficos a una parte del cdigo y al desarrollo particular de la ejecucin de
la aplicacin. Se comprueban en tiempo de ejecucin.
try {
FileIOPermission myPermission = new FileIOPermission
(FileIOPermissionAccess.AllAccess,@"c:\\");
myPermission.Demand();
}
catch (SecurityException ex) {
MessageBox.Show(Security Exception: +ex.Message);
}
Role-based security
Hasta ahora solo hemos comprobado los privilegios de las entidades de
cdigo. Pero adems de estos permisos y privilegios existe un elemento ms que
influye en estos: el usuario de la aplicacin.
Aparecen entonces dos nuevos elementos en la arquitectura el autentificador
y el autorizador.
El autentificador es el elemento que indica que usuario es el que est
accediendo a la aplicacin o servicio. En el caso de aplicaciones de formularios
Windows es el propio sistema operativo Windows, en el caso de servicios Web y
aplicaciones Web es el Internet Information Server. Aunque en ambos se casos se
puede buscar una va alternativa de autentificacin propia.
El autorizador es el elemento que se encarga de otorgar permisos y
privilegios en funcin del usuario autentificado. La autorizacin se realiza de forma
imperativa en el cdigo haciendo uso de las clases Identity que define la identidad
del usuario y Principal que define su pertenencia a grupos. Cada autentificador
declara subtipos (el sistema operativo Windows define WindowsPrincipal y
WindowsIdentity) de estos que se pueden instanciar en la ejecucin del cdigo para
saber que usuario est ejecutando ese cdigo y autorizarle o no.
WindowsIdentity MyIdentity = WindowsIdentity.GetCurrent();
If (MyIdentity.IsGuest) {}
If (MyIdentity.IsAnonymous) {}
If (MyIdentity.IsSystem) {}
String Str=MyIdentity.AuthenticationType;
Str=MyIdentity.Name;
WindowsPrincipal MyPrincipal = new WindowsPrincipal(MyIdentity);
If (MyPrincipal.IsInRole(Administradores)) {}
Juan Francisco Adame Lorite
Seguridad en ASP.NET
Servicios Web
Es el nuevo tipo de aplicacin soportado por la plataforma. Microsoft se ha
orientado claramente a esta tecnologa con la plataforma .NET y es la principal
innovacin.
Definido bajo los estndares de SOAP para el intercambio de objetos
mediante mensajera XML, de WSDL para la definicin de interfaces de servicios
Web y de UDDI para la publicacin de servicios. Al acogerse a estndares no
propietarios y adoptados por las otras plataformas (J2EE en especial) esta
plataforma se puede integrar con otras mediante esta tecnologa.
El servicio Web es un subtipo de la clase System.Web.Services.WebService y
que indica que mtodos exporta mediante el atributo WebMethod. Esto permite
crear automticamente el archivo WSDL, mediante la firma de cada mtodo
definido como servicio, y la publicacin en el directorio UDDI.
namespace MyWebService {
using System;
using System.Web.Services;
[WebMethod(Description="Reverse String")]
public String ReverseString ( String InString ) {
// Check null String
if ( InString == null ) return null;
Int32 intSize = InString.Length;
char[] arrayInString = InString.ToCharArray();
char[] arrayOutString = new char[intSize];
for (Int32 i = 0 ; i < intSize ; ++i) arrayOutString[i] =
arrayInString[intSize-i-1];
return new String(arrayOutString);
}
}
}
La aplicacin cliente, es decir la que hace uso del servicio Web, hace
peticiones a travs de una clase proxy. Es una clase que tiene el mismo interfaz
Juan Francisco Adame Lorite
que el servicio Web pero cuya implementacin de cada mtodo son las llamadas al
servicio Web. Esta clase se genera automticamente desde el archivo WSDL.
//------------------------------------------------------------------------------
// <autogenerated>
// This code was generated by a tool.
// Runtime Version: 1.0.2914.16
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </autogenerated>
//------------------------------------------------------------------------------
//
// This source code was auto-generated by wsdl, Version=1.0.2914.16.
//
using System.Diagnostics;
using System.Xml.Serialization;
using System;
using System.Web.Services.Protocols;
using System.Web.Services;
[System.Web.Services.WebServiceBindingAttribute(Name="MyClassSoap",
Namespace="http://tempuri.org/")]
public class MyClass : System.Web.Services.Protocols.SoapHttpClientProtocol {
[System.Diagnostics.DebuggerStepThroughAttribute()]
public MyClass() {
this.Url = "http://localhost/ASP.NET/MyWebService.asmx";
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/Add
",
Use=System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public int Add(int a, int b) {
object[] results = this.Invoke("Add", new object[] {
a,
b});
return ((int)(results[0]));
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
public System.IAsyncResult BeginAdd(int a, int b, System.AsyncCallback
callback, object asyncState) {
return this.BeginInvoke("Add", new object[] {
a,
b}, callback, asyncState);
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
public int EndAdd(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((int)(results[0]));
}
}
La aplicacin cliente slo debe instanciar la clase proxy y llamar al mtodo
que se precise. De forma sncrona:
MyClass mycls = new MyClass();
int x = Int32.Parse(a.Text);
int y = Int32.Parse(b.Text);
Message.Text = mycls.Add( x, y).ToString() ;
O asncrona:
class TestCallback
{
public static void Main()
{
//Create AsyncCallback delegate for the BeginAdd method.
AsyncCallback objCallBack = new
AsyncCallback(TestCallback.FactorizeCallback1);
// Begin the Asynchronous call to the Web Service
Calc1 objCalcService = new Calc1();
Juan Francisco Adame Lorite
Aplicaciones ASP.NET
Las aplicaciones Web tambin han sufrido un gran cambio. Hay muchas
diferencias entre el lenguaje de scripting ASP antiguo y el moderno ASP.NET.
Las aplicaciones ASP.NET se pueden implementar en cualquier lenguaje de la
plataforma .NET y hacer uso de toda la biblioteca .NET FrameWork Class Library.
El nivel de presentacin se separa del funcional, cada uno se implementa en
un archivo distinto. Se puede trabajar diseo y funcionalidad de forma separada. El
modelo de interaccin de la GUI es idntico al modelo de eventos y delegados de
los formularios Windows, lo que da mucha ms flexibilidad y funcionalidad a las
aplicaciones Web. El cdigo client-side y server-side se desarrolla en el mismo
entorno.
El cdigo no es un script interpretado es cdigo binario compilado de la
misma manera que se ejecuta el resto de cdigo en la plataforma .NET como se
explic al comienzo del trabajo. Esto da mucha ms eficiencia y rapidez a servicios
Web y aplicaciones Web.
Ms informacin en la pgina:
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/cpguide/html/cpconcreatingaspwebapplications.asp.
ADO.NET
Es el nuevo interfaz de acceso a fuentes de datos, posee cuatro
implementaciones del tipo abstracto de base:
OLEDB: para ficheros CSV, Excel, Access,
ODBC: para bases de datos con conectividad ODBC
SQL: para SQL Server versin 7 o mayor
Oracle: para Oracle Database versin 8 o mayor
As mismo, se conserva el escenario clsico conectado y se aade uno
nuevo, el escenario no conectado.
Ms informacin sobre ADO.NET en:
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/cpguide/html/cpconaccessingdatawithadonet.asp.
Juan Francisco Adame Lorite
modificadas con el mtodo Update y las borradas con el mtodo Delete del
DataAdapter.
Existe un problema aadido en este escenario no existente en el anterior,
durante el tiempo que no hay conexin se producen actualizaciones en la fuente de
datos que pueden provocar incoherencias al actualizar el DataSet. Esas
incoherencias se detectan y pueden ser subsanadas.
Referencias
Programming C#, 3 edicin; Jessy Liberty; OReily
C# in a Nutshell, marzo 2002; Peter Drayton, Ben Albahari
& Ted Neward; OReily
Juan Francisco Adame Lorite
.NET Framework Essentials; junio 2001, Thuan Thai & Hoang Lam,
OReily
Plataforma .NET
http://msdn.microsoft.com/library/default.asp?url=/library/en
-us/cpguide/html/cpconinsidenetframework.asp
C#
http://www.codeproject.com
http://msdn.microsoft.com/library/default.asp?url=/library/en
-us/csref/html/vcoriCSharpTutorials.asp
ASP.NET
http://www.asp.net
http://www.4guysfromrolla.com/
http://411asp.net/
Servidores gratuitos ASP.NET, para probar:
http://europe.webmatrixhosting.net/
http://dotnetplayground.com/
Y las especficas de cada captulo
Juan Francisco Adame Lorite