Migracion a Visual Basic .NET

18,762 views

Published on

Migracion a Visual Basic .NET

Published in: Economy & Finance, Business
4 Comments
13 Likes
Statistics
Notes
  • Gracias
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • https://www.google.com.bo/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB4QFjAA&url=http%3A%2F%2Fdownload.microsoft.com%2Fdownload%2Fe%2F8%2F2%2Fe8228582-8113-40d2-aa7b-2dfd2f73ebdf%2FTaller_MSDN_Migracion_VB_NET.ppt&ei=37D3U7TmHKfJsQTPkICQCw&usg=AFQjCNFTjazgsK9XFFmev3tJZxvB9rCtCQ&bvm=bv.73373277,bs.1,d.cWc
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Me interesa esta diapositiva por necesidades profesionales, podrias enviarmelo a jorgehfajardo@gmail.com
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • holas a todos
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
18,762
On SlideShare
0
From Embeds
0
Number of Embeds
118
Actions
Shares
0
Downloads
0
Comments
4
Likes
13
Embeds 0
No embeds

No notes for slide

Migracion a Visual Basic .NET

  1. 1. Migración a Visual Basic .NET Santiago 17 Dic 2003
  2. 2. Objetivos … <ul><li>Explicar porqué un desarrollador de VB6 debería pasar a VB.NET </li></ul><ul><li>Ayudar/facilitar la transición de VB6 a VB.NET </li></ul>
  3. 3. Agenda <ul><li>Referencias: Guías de arquitectura, diseño y código </li></ul><ul><li>Arquitectura del .NET Framework y la CLR </li></ul><ul><li>Estrategias de migración </li></ul><ul><li>VB6 vs VB.NET: Diferencias en el lenguaje </li></ul><ul><li>Acceso a datos: ADO.NET </li></ul><ul><li>Asistente de Actualización de Aplicaciones </li></ul><ul><li>Interoperabilidad con COM </li></ul><ul><li>Implantación de aplicaciones (no touch) </li></ul><ul><li>Seguridad en el .NET Framework </li></ul>
  4. 4. 1.- Guías de arquitectura / diseño y código <ul><li>Guías de Arquitectura (PAG) </li></ul><ul><li>Estándares de desarrollo </li></ul><ul><li>Application Blocks </li></ul><ul><li>Guías de migración </li></ul>
  5. 5. Guías de arquitectura <ul><li>Guías de diseño para aplicaciones .NET </li></ul><ul><ul><li>Muestran como encaja todo junto </li></ul></ul><ul><li>Blueprint para decisiones a nivel de diseño </li></ul><ul><ul><li>Alto riesgo en la etapa de diseño </li></ul></ul><ul><ul><li>Arquitectos son contrarios al riesgo </li></ul></ul><ul><li>No es una solución para todos los diseños </li></ul><ul><ul><li>Hay escenarios específicos </li></ul></ul><ul><li>Preservar las inversiones </li></ul><ul><ul><li>“ ¿Tendré que rehacer todo en el futuro?” </li></ul></ul>
  6. 6. Guías de Arquitectura UI Components UI Process Components Data Access Components Business Workflows Business Components Users and Devices Data Sources Business Entities Operational Management Security Communication Services Svc Interfaces Svc Agents Business Presentation Data
  7. 7. Guías de Arquitectura <ul><li>Application Architecture for .NET: Designing Applications and Services </li></ul><ul><li>.NET Data Access Architecture Guide </li></ul><ul><li>Building Secure ASP.NET Applications </li></ul><ul><li>Debugging .NET Applications </li></ul><ul><li>Exception Management in .NET </li></ul><ul><li>.NET/COM Migration and Interoperability </li></ul><ul><li>Monitoring in .NET </li></ul><ul><li>Deploying .NET Applications </li></ul><ul><li>Team Development with SourceSafe </li></ul><ul><li>UNIX Code Migration Guide </li></ul>http://msdn.microsoft.com/practices/
  8. 8. Estándares de desarrollo <ul><li>Ayudan a escribir código robusto y seguro que funciona de manera consistente con el Framework .NET </li></ul><ul><li>Facilitan la propiedad colectiva del código </li></ul><ul><li>.NET Framework Design Guidelines </li></ul><ul><ul><li>http :// msdn.microsoft.com / library /en- us / cpgenref / html / cpconnetframeworkdesignguidelines.asp </li></ul></ul><ul><li>FxCop: analiza el código managed para chequear las prácticas recomendadas </li></ul><ul><ul><li>http :// www.gotdotnet.com /team/ libraries / </li></ul></ul>
  9. 9. Application Blocks <ul><li>Data Access Application Block for .NET </li></ul><ul><ul><li>Componente .NET que contiene código optimizado de acceso a datos </li></ul></ul><ul><li>Exception Management Application Block for .NET </li></ul><ul><ul><li>Provee un framework simple y extensible para manejar excepciones </li></ul></ul>
  10. 10. Referencias <ul><li>Estrategia de migración: </li></ul><ul><ul><li>Microsoft .NET/COM Migration and Interoperability: http :// msdn.microsoft.com / library / default.asp?url =/ library /en- us / dnbda / html / cominterop.asp </li></ul></ul><ul><li>Guía de migración a .NET: </li></ul><ul><ul><li>Upgrading to .NET: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/upgradingtodotnet.asp </li></ul></ul><ul><li>  Guía específica para VB: </li></ul><ul><ul><li>Upgrade to Visual Basic .NET from Visual Basic 6.0: http://msdn.microsoft.com/vbasic/techinfo/articles/upgrade/default.asp </li></ul></ul><ul><li>Visual Studio 2003: </li></ul><ul><ul><li>http :// msdn.microsoft.com / vbasic / productinfo /vbasic03/ features / default.asp </li></ul></ul>
  11. 11. 2.- Arquitectura del .NET Framework y la CLR <ul><li>Objetivos de diseño </li></ul><ul><li>Arquitectura </li></ul><ul><li>Beneficios </li></ul><ul><li>Compilación </li></ul>
  12. 12. Introducción a .NET Objetivos de diseño de .NET Framework <ul><li>Entorno consistente de orientación a objetos: </li></ul><ul><ul><li>mismo modelo para ejecución local, código remoto o entorno distribuido en Internet </li></ul></ul><ul><li>Minimizar conflictos: implantación y versiones </li></ul><ul><li>Proporcionar ejecución segura de código </li></ul><ul><li>Eliminar problemas de rendimiento de código interpretado o con scripting </li></ul><ul><li>Mayor productividad del desarrollador tanto para aplicaciones Windows como Web </li></ul><ul><li>Comunicación basada en estándares de la industria </li></ul>
  13. 13. Introducción a .NET Framework, Lenguajes y Herramientas Sistema Operativo Common Language Runtime Base Class Library ADO.NET y XML ASP.NET Web Forms Web Services Mobile Internet Toolkit Windows Forms (.NET CF) Common Language Specification VB C++ C# JScript ® J# Visual Studio ® .NET
  14. 14. Introducción a .NET Framework, Languajes y herramientas System System.Data System.Xml System.Web Globalization Diagnostics Configuration Collections Resources Reflection Net IO Threading Text ServiceProcess Security Common OleDb SQLTypes SqlClient XPath XSLT Runtime InteropServices Remoting Serialization Serialization Configuration SessionState Caching Security Services Description Discovery Protocols UI HtmlControls WebControls System.Drawing Imaging Drawing2D Text Printing System.Windows.Forms Design ComponentModel
  15. 15. Introducción a .NET Beneficios del .NET Framework <ul><li>Simplifica el desarrollo y la implantación </li></ul><ul><li>Proporciona un entorno de ejecución seguro y robusto </li></ul><ul><li>Unifica modelos de programación </li></ul><ul><li>Soporta múltiples lenguajes de programación </li></ul><ul><li>Independiente de la plataforma </li></ul>
  16. 16. Introducción a .NET Beneficios del .NET Framework <ul><li>Sistema común de tipos </li></ul><ul><ul><li>Instancias y definición de tipos comunes </li></ul></ul><ul><li>Orientación a objetos: </li></ul><ul><ul><li>Clases e interfaces </li></ul></ul><ul><ul><li>Constructores, propiedades, métodos, eventos </li></ul></ul><ul><ul><li>Herencia cruzada entre lenguajes </li></ul></ul><ul><li>Interoperabilidad </li></ul><ul><ul><li>Con COM </li></ul></ul><ul><ul><li>Con DLLs nativas (del estilo Win32) </li></ul></ul>
  17. 17. Introducción a .NET Beneficios del .NET Framework <ul><li>Elimina la “fontanería” de COM </li></ul><ul><li>No más … </li></ul><ul><ul><li>Registro </li></ul></ul><ul><ul><li>GUIDs </li></ul></ul><ul><ul><li>Archivos .IDL </li></ul></ul><ul><ul><li>HRESULTs </li></ul></ul><ul><ul><li>IUnknown </li></ul></ul><ul><ul><li>AddRef/Release </li></ul></ul><ul><ul><li>CoCreateInstance </li></ul></ul>=>Aps autodescriptivas =>namespaces jerárquicos =>objetos autodescriptivos =>excepciones estructuradas =>objeto raiz común =>garbage collector =>operador ”new”
  18. 18. Introducción a .NET Compilación y ejecución Código fuente Compilación Código (IL) Metadatos Assembly Compilador del lenguaje En instalación o la primera vez que se invoca a cada método Ejecución Compilador JIT Código Nativo
  19. 19. 3.- VB6 vs VB.NET: Diferencias en el lenguaje <ul><li>Visual Basic 6 vs. Visual Basic .NET </li></ul><ul><li>Compatibilidad con Visual Basic 6 </li></ul><ul><li>Cambios a nivel de código </li></ul>
  20. 20. Se echaba en falta en VB6 ... <ul><li>No totalmente orientado a objetos: herencia </li></ul><ul><li>No se pueden crear aplicaciones free-threaded </li></ul><ul><li>Evitar problemas de registro y versiones </li></ul><ul><li>Una programación Web menos compleja (respecto a la programación Windows) </li></ul><ul><li>Mecanismos para evitar fugas de memoria </li></ul><ul><li>Un tratamiento de errores más potente </li></ul><ul><li>Runtime integrada </li></ul>
  21. 21. Novedades del lenguaje <ul><li>Herencia, sobrecarga, polimorfismo, constructores, … </li></ul><ul><li>Free-threading (procesamiento asíncrono) </li></ul><ul><li>No se usa el registry </li></ul><ul><li>Programación Web: ASP.NET </li></ul><ul><li>Recolector de basura </li></ul>
  22. 22. Novedades del lenguaje (2) <ul><li>Control de errores estructurado: </li></ul><ul><ul><li>Try … Catch </li></ul></ul><ul><li>La runtime de VB.NET forma parte del Framework. </li></ul><ul><ul><li>Incluida en el redistribuible </li></ul></ul><ul><li>Más: </li></ul><ul><ul><li>Punteros a funciones (delegates), </li></ul></ul><ul><ul><li>nuevos tipos de datos, </li></ul></ul><ul><ul><li>comprobación estricta de tipos, … </li></ul></ul>
  23. 23. <ul><li>VB.NET no es VB6 + nuevas características </li></ul><ul><li>Nuevas características requieren rediseño </li></ul><ul><li>Nuevo formato de ficheros </li></ul><ul><li>Interoperabilidad entre lenguajes </li></ul><ul><li>Integración con .NET framework </li></ul>¿ Compatibilidad ? No es fácil
  24. 24. ¿ Compatibilidad ? Alternativas <ul><li>Actualizar las aplicaciones VB6 </li></ul><ul><li>Coexistencia (interop) </li></ul><ul><li>El nuevo código .NET podrá ser: </li></ul><ul><ul><li>Creado desde cero </li></ul></ul><ul><ul><li>Migrado  Upgrade Wizard </li></ul></ul>
  25. 25. Librería de compatibilidad <ul><li>Microsoft.VisualBasic.Compatibility </li></ul><ul><li>Cuando no haya nada equivalente </li></ul><ul><li>Cuando lo equivalente sea muy diferente </li></ul><ul><li>VB6.<nombre de función> </li></ul><ul><li>No recomendable su utilización </li></ul>'VB6 Form1.Show Form1.Show vbModal Form1.Show X 'Visual Basic.NET Form1.Show Form1.ShowDialog VB6.ShowForm(Form1, X)
  26. 26. Cambios a nivel de código <ul><li>Tipos Variant : sustituidos por Object </li></ul><ul><li>No hay propiedades por defecto </li></ul><ul><li>Variables a nivel de bloque </li></ul><ul><li>Las llamadas a procedimiento necesitan paréntesis </li></ul><ul><li>Los procedimientos permiten Return </li></ul><ul><li>Los parámetros son ByVal por defecto </li></ul><ul><li>Posible declarar & inicializar variables </li></ul><ul><li>Más … </li></ul>
  27. 27. Imports System.Math Namespace Geometria Public Module Module1 Sub Main() Dim tri As New Triangulo(2, 3, 4) Console.WriteLine(tri.CalcularArea()) Console.WriteLine(Circulo.Area(5)) End Sub End Module Public Class Triangulo Dim m_a, m_b, m_c As Integer Public Sub New() End Sub Public Sub New ( ByVal a As Integer , ByVal b As Integer , ByVal c As Integer ) m_a = a : m_b = b : m_c = c End Sub Public Function CalcularArea() As Double Dim s As Double = (m_a + m_b + m_c) / 2 Return Sqrt(s * (s – m_a) * (s – m_b) * (s – m_c)) End Function End Class Public Class Circulo Public Shared Function Area( ByVal r As Double ) As Double Return Pi * (r ^ 2) End Function End Class End Namespace
  28. 28. Demo 1 Novedades del lenguaje
  29. 29. 4.- Acceso a datos: ADO.NET <ul><li>ADO vs ADO.NET </li></ul><ul><li>Características de ADO.NET </li></ul><ul><li>Arquitectura </li></ul><ul><li>Enlace a datos (binding) </li></ul>
  30. 30. <ul><li>ADO trabaja bien, pero: </li></ul><ul><ul><li>Necesita COM y Windows </li></ul></ul><ul><ul><li>Los recordsets no viajan bien a través de Internet </li></ul></ul><ul><li>ADO.NET resuelve estos problemas: </li></ul><ul><ul><li>Utiliza XML (a bajo nivel) para realizar el transporte de datos </li></ul></ul><ul><ul><li>XML no tiene requisitos específicos de runtime/transporte </li></ul></ul><ul><ul><ul><li>No se necesita un código especial para hacer el marshaling a través de Internet </li></ul></ul></ul><ul><li>ADO .NET, una nueva mentalidad: </li></ul><ul><ul><li>Entorno desconectado </li></ul></ul><ul><ul><li>Todo el transporte de datos utiliza XML </li></ul></ul>ADO vs ADO.NET
  31. 31. ADO.NET <ul><li>DBLib, ODBC, DAO, RDO, ADO, …. ADO.NET </li></ul><ul><li>System.Data: la clase raiz </li></ul><ul><li>A partir de ahí, principales namespaces: </li></ul><ul><ul><li>System.Data.OleDB </li></ul></ul><ul><ul><li>System.Data.SQLClient </li></ul></ul><ul><ul><li>System.Data.ODBC, System.Data.OracleClient </li></ul></ul><ul><li>System.XML: para trabajar directamente con XML </li></ul>
  32. 32. ADO.NET <ul><li>System.Data.OleDb: trabaja con todas las fuentes OLE DB </li></ul><ul><ul><li>Soporta unmanaged providers de ADO </li></ul></ul><ul><li>System.Data.SQLClient: sólo SQL Server ( managed ) </li></ul><ul><li>VStudio 2003: System.Data.ODBC, System.Data.OracleClient </li></ul>
  33. 33. Arquitectura de ADO.NET Negocio Datos Presentación Windows Forms Web forms Business to business Data object (class) DataSet DataSet DataSet Internet intranet Data adapter Data adapter (BizTalk, por ejemplo) Xml MiAp.Exe IE
  34. 34. Diferencia fundamental En ADO: En ADO.NET: Buffer de datos Acceso a datos DataAdapter DataSet Buffer de datos Acceso a datos Recordset
  35. 35. ADO.NET: Connection <ul><li>OleDbConnection/SQLConnection </li></ul><ul><li>Representa la sesión contra la BD </li></ul><ul><li>Utilizados por objetos Data Adapter y Command para recuperar/actualizar </li></ul><ul><li>Inicia las transacciones </li></ul><ul><ul><li>Connection.BeginTransaction() devuelve un objeto Transaction </li></ul></ul><ul><ul><li>xxxTransaction </li></ul></ul><ul><ul><ul><li>Un comando se enlista en una transacción </li></ul></ul></ul><ul><ul><ul><li>IsolationLevel </li></ul></ul></ul><ul><ul><ul><li>Commit() / Rollback() </li></ul></ul></ul><ul><li>Configuración del pool de conexiones en el connection string </li></ul>
  36. 36. ADO.NET: Command <ul><li>OleDbCommand/SQLCommand </li></ul><ul><li>Representa Transact-SQL o procedimientos almacenados </li></ul><ul><li>Devuelve un resultset ( ExecuteReader ), un valor ( ExecuteScalar ), o ejecuta sentencias de modificación ( ExecuteNonQuery ) </li></ul><ul><li>Generación automática con el objeto CommandBuilder </li></ul>
  37. 37. ADO.NET : DataReader <ul><li>OleDbDataReader/SQLDataReader </li></ul><ul><li>Stream forward-only read-only </li></ul><ul><li>Utilizado por el DataAdapter </li></ul><ul><li>Muy rápido </li></ul><ul><li>Creado por un objeto Command (ExecuteReader) </li></ul>
  38. 38. ADO.NET: DataAdapter <ul><li>OleDbDataAdapter/SQLDataAdapter </li></ul><ul><li>Representa un conjunto de Commands y una Connection </li></ul><ul><li>Puente entre el DataSet y la BD </li></ul><ul><li>Lee y actualiza la BD: </li></ul><ul><ul><li>SelectCommand, UpdateCommand, InsertCommand, DeleteCommand </li></ul></ul>
  39. 39. ADO.NET – DataAdapter DataAdapter TableMappings Base de datos DataSet SelectCommand InsertCommand UpdateCommand DeleteCommand
  40. 40. ADO.NET: DataSet <ul><li>Objeto estrella en ADO.NET </li></ul><ul><li>Representa una caché de datos en memoria </li></ul><ul><li>Contiene DataTables </li></ul><ul><li>Lee y escribe datos y esquemas en XML </li></ul><ul><li>Serializable </li></ul><ul><li>Puede ser tipado o no tipado: </li></ul><ul><ul><li>Ambos heredan de la clase DataSet </li></ul></ul><ul><ul><li>El tipado se apoya en un esquema XML (.XSD) para generar la clase </li></ul></ul><ul><ul><li>El tipado tiene ventajas: </li></ul></ul><ul><ul><ul><li>Expone estructura como propiedades y métodos: Intellisense </li></ul></ul></ul><ul><ul><ul><li>Recoge la Primary key </li></ul></ul></ul>
  41. 41. ADO.NET: Otros objetos <ul><li>DataTable </li></ul><ul><ul><li>Representa una tabla en memoria </li></ul></ul><ul><ul><li>Lo rellena un DataAdapter o a mano </li></ul></ul><ul><ul><li>Componente principal de los objetos DataSet y DataView </li></ul></ul><ul><li>DataView </li></ul><ul><ul><li>Vista personalizada de un objeto DataTable </li></ul></ul><ul><ul><li>Filtros, ordenación, búsquedas … </li></ul></ul><ul><li>DataRelation </li></ul><ul><ul><li>Define relaciones entre tablas </li></ul></ul><ul><ul><li>Utiliza columnas de un DataTable </li></ul></ul>
  42. 42. ADO.NET - DataSet DataSet DataTable Relations Constraints XML Schema DataTable DataRow DataColumn
  43. 43. ADO.NET: Lecturas <ul><li>Método Fill del objeto DataAdapter </li></ul><ul><li>Se utiliza el SelectCommand del DataAdapter </li></ul><ul><li>Inserta/actualiza datos del DataSet </li></ul><ul><ul><li>Si la tabla existe, actualiza datos </li></ul></ul><ul><ul><li>Si no existe, crea y rellena la tabla </li></ul></ul><ul><ul><li>Una tabla por cada resultset </li></ul></ul><ul><li>Mantiene la conexión en su estado original </li></ul>
  44. 44. ADO.NET: Actualizaciones <ul><li>La funcionalidad en ADO es implícita. Recordset = caja negra. </li></ul><ul><ul><li>Ejemplo: UpdateBatch </li></ul></ul><ul><li>En ADO.NET: Se crea un modelo más explícito y transparente. </li></ul><ul><ul><li>InsertCommand, UpdateCommand, DeleteCommand </li></ul></ul><ul><ul><li>Eventos de Update </li></ul></ul><ul><li>CommandBuilder: generación automática de los comandos de Insert, Update y Delete a partir del SelectCommand </li></ul>
  45. 45. ADO.NET: Actualizaciones <ul><li>DataAdapter.Update: </li></ul><ul><ul><li>Analiza los cambios del DataSet </li></ul></ul><ul><ul><li>Ejecuta los comandos Insert, Update y Delete necesarios </li></ul></ul><ul><ul><li>Refresca el DataSet </li></ul></ul><ul><li>Orden de ejecución por defecto: </li></ul><ul><ul><li>Insert, Update y Delete. </li></ul></ul>
  46. 46. ADO.NET: Enlace a datos <ul><li>ADO .NET soporta enlazar (binding) DataSets a Windows Forms / Web Forms y sus controles </li></ul><ul><li>VStudio .NET incluye bastantes wizards para hacer el enlace entre datos y controles </li></ul>
  47. 47. Demo 2: Aplicación maestro-detalle
  48. 48. 5.- Asistente de actualización de aplicaciones: código <ul><li>Consideraciones </li></ul><ul><li>Asistente: lo no soportado </li></ul><ul><li>Upgrade Wizard </li></ul><ul><li>Final de la actualización </li></ul>
  49. 49. Consideraciones <ul><li>Opciones </li></ul><ul><ul><li>Continuar con VB6 </li></ul></ul><ul><ul><li>Interoperar entre VB6 y VB.NET </li></ul></ul><ul><ul><li>Actualizar a VB .NET </li></ul></ul><ul><li>El nuevo código .NET podrá ser: </li></ul><ul><ul><li>Creado desde cero </li></ul></ul><ul><ul><li>Migrado  Upgrade Wizard </li></ul></ul><ul><li>Ventajas de la actualización </li></ul><ul><ul><li>Aprovechar las características del .NET Framework </li></ul></ul><ul><ul><li>Aprovechar las características de Visual Basic .NET </li></ul></ul><ul><li>Desventajas de la actualización </li></ul><ul><ul><li>Algunas características no se actualizan </li></ul></ul><ul><ul><li>Más trabajo de desarrollo y pruebas </li></ul></ul><ul><li>La actualización de código es sólo una parte </li></ul>
  50. 50. Consideraciones <ul><li>Migración horizontal </li></ul><ul><ul><li>Una sola capa, al completo </li></ul></ul><ul><li>Migración vertical </li></ul><ul><ul><li>Aislar y reemplazar una parte en todas las capas </li></ul></ul>
  51. 51. Consideraciones <ul><li>Elegir una estrategia que minimice el riesgo </li></ul><ul><li>Elegir actividades que permitan continuar utilizando la base de código COM mientras nos movemos a .NET </li></ul><ul><li>Sacar partido rápidamente a las nuevas funcionalidades del entorno .NET </li></ul><ul><li>Factores a tener en cuenta: </li></ul><ul><ul><li>Aislamiento </li></ul></ul><ul><ul><li>Nueva funcionalidad </li></ul></ul><ul><ul><li>Uso intensivo de recordsets entre capas </li></ul></ul><ul><ul><li>Arquitectura existente </li></ul></ul>
  52. 52. Asistente: lo no soportado <ul><li>Data binding de DAO y RDO </li></ul><ul><li>Controles de Visual Basic 5.0 </li></ul><ul><li>Aplicaciones DHTML </li></ul><ul><li>ActiveX ® documents </li></ul><ul><li>Páginas de propiedades </li></ul><ul><li>Add-ins </li></ul><ul><li>Controles de usuario </li></ul><ul><li>(Web classes) </li></ul>
  53. 53. Upgrade Wizard Aspecto del formulario Controles ActiveX ADO (data binding) Código Cambios de sintaxis Librerías COM Archivos .RES Avisos de comportamiento
  54. 54. Final de la actualización <ul><li>Proyecto Visual Basic .NET </li></ul><ul><li>El Upgrade Wizard enumera: </li></ul><ul><ul><li>Upgrade issues </li></ul></ul><ul><ul><li>Upgrade to-dos </li></ul></ul><ul><ul><li>Upgrade warnings </li></ul></ul><ul><ul><li>Upgrade notes </li></ul></ul><ul><li>Completar los cambios </li></ul><ul><li>Compilar la aplicación </li></ul>
  55. 55. Demo 3: Upgrade Wizard
  56. 56. 6.- Interoperabilidad con COM <ul><li>Migrar o interoperar </li></ul><ul><li>COM y .NET </li></ul><ul><li>Llamadas desde .NET a COM </li></ul><ul><li>Llamadas desde COM a .NET </li></ul>
  57. 57. Migrar o interoperar <ul><li>Migrar </li></ul><ul><ul><li>Todo el código en un entorno consistente </li></ul></ul><ul><ul><li>Actualizar para tomar ventaja de .NET </li></ul></ul><ul><li>Interoperar </li></ul><ul><ul><li>Reutilizar código existente </li></ul></ul><ul><ul><li>Preservar inversiones </li></ul></ul><ul><ul><li>Acceso a funcionalidad no migrable </li></ul></ul>
  58. 58. COM y .NET <ul><li>Componentes </li></ul><ul><li>DCOM </li></ul><ul><li>COM+ </li></ul><ul><li>Recordset </li></ul><ul><li></> </li></ul><ul><li>IUnknown/IDispatch </li></ul><ul><li>GUID/CLSID/etc </li></ul><ul><li>Assemblies </li></ul><ul><li>Remoting </li></ul><ul><li>EnterpriseServices </li></ul><ul><li>DataSet </li></ul><ul><li>Serialization </li></ul><ul><li></> </li></ul><ul><li></> </li></ul>
  59. 59. COM y .NET <ul><li>.NET utilizando COM </li></ul><ul><ul><li>Los tipos .NET pueden acceder a tipos COM </li></ul></ul><ul><ul><li>Vuelta al registry y a las limitaciones de implantación actuales </li></ul></ul><ul><li>COM utilizando .NET </li></ul><ul><ul><li>Los tipos COM pueden acceder a tipos .NET </li></ul></ul>.NET COM COM .NET
  60. 60. Llamadas desde .NET a COM Common Language Runtime <ul><li>RCW: </li></ul><ul><ul><li>Creado con Visual Studio .NET ò tlbimp.exe </li></ul></ul><ul><ul><li>Primary interop assembly </li></ul></ul><ul><li>Marshal.ReleaseComObject() </li></ul>Servidor COM Referencias por contador Referencias traceadas Cliente Runtime Callable Wrapper Objeto
  61. 61. Llamadas desde COM a .NET Common Language Runtime IPropio COM Callable Wrapper Objeto Referencias traceadas Referencias por contador Servidor COM IUnknown IDispatch IPropio Cliente
  62. 62. Llamadas desde COM a .NET <ul><li>Creación del assembly .NET: </li></ul><ul><ul><li>Definir interface en el componente </li></ul></ul><ul><ul><li>Tipos públicos </li></ul></ul><ul><ul><li>Opcional: crear strong name e incluir en la GAC </li></ul></ul><ul><li>COM Callable Wrapper </li></ul><ul><ul><li>Crear el assembly con Visual Studio .NET </li></ul></ul><ul><ul><li>Exportar la librería de tipos con tlbexp.exe </li></ul></ul><ul><li>Hacer que el assembly esté disponible para COM </li></ul><ul><ul><li>regasm.exe, ò </li></ul></ul><ul><ul><li>Global Assembly Cache (GAC) </li></ul></ul>
  63. 63. Demo 4: COM Interop
  64. 64. 7.- Implantación Smart Clients <ul><li>Consideraciones </li></ul><ul><li>Nuevas opciones </li></ul><ul><li>No-Touch </li></ul><ul><li>Seguridad </li></ul><ul><li>Apoyos </li></ul>
  65. 65. Implantación Consideraciones <ul><li>Impacto en el sistema </li></ul><ul><ul><li>¿ La instalación de la aplicación 1 romperá la aplicación 2 ? </li></ul></ul><ul><li>Implantación la primera vez </li></ul><ul><ul><li>Cada cliente debe tener la aplicación explícitamente instalada </li></ul></ul><ul><li>Actualización de la aplicación </li></ul><ul><ul><li>Si hay cambios en el interfaz de usuario, cada cliente debe reinstalar la aplicación para actualizarse </li></ul></ul>
  66. 66. Implantación Consideraciones <ul><li>Problema a resolver: </li></ul><ul><ul><li>Ejecutar o actualizar una aplicación sin tocar el cliente </li></ul></ul><ul><li>Si ya utilizamos un software de gestión de instalaciones (IntelliMirror, SMS, etc), continuar utilizándolo. </li></ul>
  67. 67. Implantación Consideraciones <ul><li>Las aplicaciones son aisladas </li></ul><ul><ul><li>Implantación privada por defecto </li></ul></ul><ul><ul><li>Las aplicaciones son autodescriptivas </li></ul></ul><ul><li>Pueden coexistir múltiples versiones </li></ul><ul><ul><li>La compartición es controlada y explícita: </li></ul></ul><ul><ul><ul><li>Strong name, GAC </li></ul></ul></ul><ul><ul><li>Por defecto, las aplicaciones utilizan el assembly con el que fueron construidas, no la última versión </li></ul></ul><ul><ul><li>Side-by-side </li></ul></ul>
  68. 68. Implantación Nuevas opciones <ul><li>La implantación es simple </li></ul><ul><ul><li>XCOPY en el cliente </li></ul></ul><ul><ul><li>Ejecución desde un recurso de red </li></ul></ul><ul><ul><li>Click sobre un enlace en el browser (no touch) </li></ul></ul><ul><li>No-touch deployment </li></ul><ul><ul><li>Por defecto, aislamiento de aplicaciones </li></ul></ul><ul><ul><li>No se necesita registro </li></ul></ul><ul><ul><li>Componentes compartidos (strong names, versión) </li></ul></ul>
  69. 69. Implantación No touch MiApp.exe Web Server Internet Explorer Download Cache Aplicación cliente .NET Framework Managed Exe? MiApp.dll HTTP HTTP
  70. 70. Implantación No-Touch <ul><li>Ejecutable lanzado como URL (IEEXec) </li></ul><ul><li>Sin instalación, actualización automática </li></ul><ul><ul><li>Click en un link en el browser </li></ul></ul><ul><ul><li>El EXE y los assemblies referenciados se descargan </li></ul></ul><ul><ul><li>Otros assemblies: utilizar Assembly.LoadFrom </li></ul></ul><ul><li>Almacenamiento en download cache </li></ul><ul><ul><li>C:Documents and SettingsusuarioLocal SettingsApplication Dataassembly </li></ul></ul><ul><ul><li>Descarga sólo cuando hay actualizaciones </li></ul></ul><ul><ul><li>Por usuario </li></ul></ul><ul><li>Descarga de assemblies dependientes: según se van necesitando </li></ul>
  71. 71. Implantación No-Touch con loader <ul><li>Otra opción: EXE local pequeño: loader </li></ul><ul><li>Carga de assemblies desde un Web server </li></ul><ul><ul><li>La aplicación se descarga en tiempo de ejecución </li></ul></ul><ul><ul><li>Para actualizar la aplicación, actualizar los assemblies del servidor </li></ul></ul><ul><li>Para cargar los assemblies: Assembly.LoadFrom(URL) </li></ul><ul><ul><li>URL: URL a un assembly </li></ul></ul><ul><ul><li>Descarga y cachea el assembly </li></ul></ul><ul><ul><li>Chequeo automático de nuevas versiones </li></ul></ul><ul><ul><li>Permisos: depende de dónde viene el assembly </li></ul></ul>
  72. 72. Implantación Seguridad <ul><li>Las aplicaciones son semi-confiables </li></ul><ul><ul><li>Se ejecutan, y pueden realizar un número limitado de tareas </li></ul></ul><ul><ul><li>Seguridad en función del origen de la aplicación (de dónde viene) </li></ul></ul><ul><ul><li>Similar a páginas web en el browser </li></ul></ul><ul><li>Configuración de seguridad: herramienta .NET Framework Configuration </li></ul><ul><li>Strong names </li></ul><ul><ul><li>Proporcionan un grado de seguridad mayor </li></ul></ul><ul><ul><li>Distinto de signcode </li></ul></ul>
  73. 73. Implantación Apoyos <ul><li>Auto Updater (componente): </li></ul><ul><ul><li>.NET Client Applications: .NET Application Updater Component </li></ul></ul><ul><ul><ul><li>http:// www.gotdotnet.com /team/ windowsforms / appupdater.aspx </li></ul></ul></ul><ul><li>Artículo en MSDN Magazine: </li></ul><ul><ul><li>Write Auto-Updating Apps with .NET and the Background Intelligent Transfer Service API (utiliza Windows Update) </li></ul></ul><ul><ul><ul><li>http://msdn.microsoft.com/msdnmag/issues/03/02/BITS/default.aspx </li></ul></ul></ul>
  74. 74. Demo 5: No Touch Deployment
  75. 75. 8.- Seguridad en el .NET Framework <ul><li>Conceptos de seguridad </li></ul><ul><li>Seguridad basada en roles </li></ul><ul><li>Autenticación </li></ul><ul><li>Autorización </li></ul>
  76. 76. Seguridad <ul><li>¿Qué se quiere evitar? </li></ul><ul><ul><li>Acceso no controlado a la aplicación, por parte de usuarios no conocidos </li></ul></ul><ul><ul><li>Acceso ilimitado a toda la aplicación, por parte de usuarios autenticados </li></ul></ul><ul><li>Qué aporta .NET: </li></ul><ul><ul><li>Nuevas herramientas para proteger la información del usuario (ej. System.Security.Cryptography) </li></ul></ul><ul><ul><li>Acceso al código </li></ul></ul><ul><ul><ul><li>Code-access security (evidencias) </li></ul></ul></ul><ul><ul><li>Acceso de usuarios * </li></ul></ul><ul><ul><ul><li>De Windows </li></ul></ul></ul><ul><ul><ul><li>Genéricos </li></ul></ul></ul>
  77. 77. Seguridad Usuarios: seguridad basada en roles <ul><li>Roles con una serie de permisos </li></ul><ul><li>Fácil administración </li></ul><ul><li>Soporte para </li></ul><ul><ul><li>Grupos de Windows </li></ul></ul><ul><ul><li>Roles genéricos </li></ul></ul><ul><li>Import de: </li></ul><ul><ul><li>System.Threading </li></ul></ul><ul><ul><li>System.Security.Principal </li></ul></ul><ul><li>Enterprise Services también dispone de roles </li></ul>
  78. 78. Seguridad Autenticación <ul><li>Identificar al usuario </li></ul><ul><ul><li>Verificar sus credenciales </li></ul></ul><ul><ul><ul><li>Seguridad Windows </li></ul></ul></ul><ul><ul><ul><li>Base de datos </li></ul></ul></ul><ul><ul><ul><li>Archivo XML </li></ul></ul></ul><ul><ul><li>Creación del objeto Identity </li></ul></ul><ul><ul><ul><li>Identifica al usuario </li></ul></ul></ul><ul><ul><ul><li>Tipo de autenticación: Windows o Generic </li></ul></ul></ul><ul><ul><li>Creación del objeto Principal </li></ul></ul><ul><ul><ul><li>Incluye el Identity y almacena la pertenencia al role </li></ul></ul></ul><ul><ul><li>Se aplica a usuarios Genéricos y de Windows </li></ul></ul>
  79. 79. Seguridad Autenticación <ul><li>Usuario de Windows </li></ul><ul><ul><li>Dim winIdentity as WindowsIdentity = WindowsIdentity.GetCurrent() </li></ul></ul><ul><ul><li>Dim winPrincipal As New WindowsPrincipal(winIdentity) </li></ul></ul><ul><ul><li>Thread.CurrentPrincipal = winPrincipal </li></ul></ul><ul><li>Usuario Generic </li></ul><ul><ul><li>Dim genIdentity as New GenericIdentity(“John”) </li></ul></ul><ul><ul><li>Dim Roles() as String = {“Employee”,”Manager”} </li></ul></ul><ul><ul><li>Dim genPrincipal As New GenericPrincipal(genIdentity, Roles) </li></ul></ul><ul><ul><li>Thread.CurrentPrincipal = genPrincipal </li></ul></ul>
  80. 80. Seguridad Autorización <ul><li>Proceso de autorización de acceso </li></ul><ul><ul><li>El usuario ya ha sido autenticado </li></ul></ul><ul><ul><li>El usuario solicita realizar una tarea </li></ul></ul><ul><ul><li>Se comprueba la pertenencia al role </li></ul></ul><ul><ul><li>Se restringe el acceso a ciertas partes de la aplicación </li></ul></ul>
  81. 81. Seguridad Autorización <ul><li>Usuarios Windows / Generic </li></ul><ul><ul><li>If Thread.CurrentPrincipal.IsInRole(“Manager”) Or _ </li></ul></ul><ul><ul><li>Thread.CurrentPrincipal.IsInRole(“BuiltInAdmministrators”) Then </li></ul></ul><ul><ul><li>BindEmployeesGrid() </li></ul></ul><ul><ul><li>BindEmployeeDetailsGrid() </li></ul></ul><ul><ul><li>bnViewSalaryReport.Enabled = True </li></ul></ul><ul><ul><li>Else </li></ul></ul><ul><ul><li>BindEmployeeGrid() </li></ul></ul><ul><ul><li>bnViewSalaryReport.Enabled = False </li></ul></ul><ul><ul><li>End If </li></ul></ul>
  82. 82. Demo 6: Seguridad en las aplicaciones
  83. 83. Preguntas / Dudas </>

×