Blog de Jorge Pedraza

enero 26, 2010

Enrutamiento de ASP.NET

 

El enrutamiento de ASP.NET permite usar direcciones URL que no es necesario asignar a archivos específicos de un sitio web.

En una aplicación ASP.NET tradicional, una solicitud entrante de una dirección URL normalmente se asigna a un archivo físico en el disco como un archivo *.aspx. Por ejemplo:

http://servidor/Aplicacion/productos.aspx?id=4 se asigna a un archivo denominado productos.aspx que contiene código y marcado para representar una respuesta al explorador.

En el enrutamiento de ASP.NET, se definen modelos de dirección URL que contienen marcadores de posición {} para los valores utilizados al administrar solicitudes URL.

Definición de la Ruta  Ejemplo
{controlador}/{acción}/{id} Productos/Mostrar/Bebidas
blog/{acción}/{entrada} Blog/Mostrar/123
{idioma}{país}/{acción} es-VE/Mostrar

El enrutamiento de ASP.NET es la base fundamental de tecnologías actuales como ASP.NET Dynamic Data, ASP.NET MVC y Propiamente ASP.NET 3.5 o superior.

Como se crea enrutamiento de ASP.NET

  1. Se crea un método compartido por defecto en el Global.asax, que lleve como nombre RegisterRoutes y que reciba por parámetro un tipo RouteCollection en este caso nombrado Routes.
  2. Dentro del método RegisterRoutes se genera una colección pre configurada de modelos de dirección URL según su necesidad. Para esto usamos clase Route, Clase personalizada CustomRouteHandler en el caso de ASP.NET 3.5 o la clase PageRouteHandler para el caso de ASP.NET 4.0
  3. En el evento Application_Start del Global.asax, se establece la llamada del método RegisterRoutes pasando por parámetro el objeto intrínseco RouteTable.Routes.
  4. Finalmente se genera la solución ASP.NET y se prueba un modelo de Dirección URL preestablecida.

Enrutamiento de ASP.NET 3.5

  • Clase Personalizada CustomRoutehandler: Es una clase generada propiamente por el desarrollador basado en la Interfaz System.Web.Routing.IRouteHandler, que proporciona métodos y propiedades para definir cómo se asigna una dirección URL a un archivo físico.
    Public Class CustomRouteHandler
        Implements System.Web.Routing.IRouteHandler
    
    End Class

Enrutamiento de ASP.NET 4.0

  • Clase PageRouteHandler: Es una clase basada en el mismo principio de la clase personalizada CustomRouteHandler definida previamente arriba, pero con la diferencia que esta ya viene por defecto dentro del .NET Framework 4.0 a través de NameSpace System.Web.Routing.

 

Anexo Código Fuente:

Para mayor detalles visita:

enero 19, 2010

Exportar DataTable a Excel desde ASP.NET

Filed under: Aplicaciones Web — JorgePedraza @ 11:04 pm
Tags: , , ,

Hola, este articulo quiere resaltar una opción sencilla y directa de exporta datos relacionado con un DataTable a una hoja de Excel desde ASP.NET.

Requisito para el Desarrollo:

  1. .NET Framework 2.0 o superior.
  2. Office 2007 SP 2 o superior.
  3. Visual Studio 2008 o superior.

Pasos para Generar la solución en Visual Studio:

  1. Definir un proyecto de Aplicación Web de ASP.NET.
  2. Dentro del proyecto definir dos carpeta: DownloadExcel, FileExcel.
  3. Se crea un archivo de Excel (Plantilla1.xlsx).
  4. En el archivo de Excel  Plantilla1.xlsx debe especificar el área donde van almacenar los datos. Esta área se define como Nombre a un Rango en Excel. 




  5. El archivo Plantilla1.xlsx se guarda dentro de la carpeta FileExcel del proyecto actual.
  6. Se establece el proceso de exportación a través del evento Click de un botón en determinada pagina ASPX.

Pasos de Generar el proceso de exportación:

  1. Se realiza una copia temporal de Plantilla1.xlsx de la carpeta DownloadExcel con el nombre FileExcel más el ID de la sesión ASP.NET junto con su extensión (.xlsx).
  2. Posteriormente se conecte y consulta la base de datos, con la cual cargara los datos en determinado DataTable.
  3. Ya lleno el DataTable de datos, se procede a manipular este en calidad de Inserción contra otro un origen de datos, en nuestro caso la Hoja de Excel.
  4. Una vez comprometido los datos con la Hoja de Excel, se transmite el archivo Excel como respuesta web al usuario de destino.
  5. Finalmente el archivo de Excel generado en el servidor y transmitido al cliente se elimina físicamente del servidor.

Descripción del Código de Exportación :

Partial Public Class _Default    ‘Clase de la Pagina Default.aspx
    Inherits System.Web.UI.Page

Private conOle As New OleDb.OleDbConnection ‘Objeto de Conexión contra la Hoja de Excel
    Private adaole As New OleDb.OleDbDataAdapter ‘Objeto Adaptador desde la Hoja de excel hacia el DataSet; en especifico un DataTable
    Private Function myconnectionstring(ByVal extension As String) As String  ‘Devuelve la cadena de conexión de la Hoja de Excel según la Extensión
        Dim retorno As String = ""
        Select Case extension
            Case ".xls"
                retorno = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=Yes;IMEX=0"""
            Case ".xlsx"
                retorno = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0 Xml"
        End Select
        Return retorno
    End Function

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click

Dim rutaOrigen As String = Server.MapPath("/fileexcel/Plantilla1.xlsx") ‘Obtiene la ruta absoluta del Archivo Plantilla1.xlsx.
        Dim rutaDestino As String = Server.MapPath("/DownloadExcel/") ‘Obtiene la ruta absoluta de la carpeta de DownloadExcel.
        Dim archivoDestino As String = "FileExcel" & Session.SessionID & ".xlsx" ‘Establece un Nombre Temporal del archivo de excel de destino.
        rutaDestino &= archivoDestino ‘Se completa la ruta del archivo de destino con el nombre creado.

IO.File.Copy(Server.MapPath("/fileexcel/Plantilla1.xlsx"), rutaDestino, True) ‘Se copia el archivo plantilla1.xlsx a la carpeta de Destino con el nombre previamente establecido.
        conOle.ConnectionString = String.Format(myconnectionstring(IO.Path.GetExtension(rutaDestino)), rutaDestino)
        adaole.InsertCommand = conOle.CreateCommand
        adaole.InsertCommand.CommandText = "Insert Into personal (nombre,apellido,Cedula) values (@nombre,@apellido,@cedula)"
        adaole.InsertCommand.CommandType = CommandType.Text

With adaole.InsertCommand.Parameters
            .Add("@nombre", OleDb.OleDbType.VarChar, 50, "nombre")
            .Add("@apellido", OleDb.OleDbType.VarChar, 50, "apellido")
            .Add("@Cedula", OleDb.OleDbType.VarChar, 50, "cedula")
        End With

Try
            conOle.Open() ‘Abre la conexión con el nuevo archivo de Excel copiado.
            adaole.Update(SetPersonal) ‘Se Actualiza los Datos que son almacenado en el DataTable, que son devueltos por SetPersonal
        Catch ex As Exception
            Label1.Text = ex.Message.ToString
        Finally
            conOle.Close() ‘Cierra la conexión con el nuevo archivo de Excel procesado.
            Response.ClearContent() ‘Borra toda la salida de contenido de la secuencia del búfer.
            Response.ClearHeaders() ‘Borra todos los encabezados de la secuencia del búfer.
            ‘Response.ContentType = "application/vnd.ms-excel" ‘Excel 2003
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ‘Excel 2007
            Response.WriteFile(rutaDestino) ‘Escribe el archivo especificado directamente en la secuencia de salida de una respuesta HTTP.
            Response.Flush() ‘Envía al cliente toda la salida almacenada en el búfer
            Response.Close() ‘Cierra la conexión del socket con un cliente

            IO.File.Delete(rutaDestino) ‘Borra físicamente el Archivo de Excel Generado.

        End Try

End Sub

Function SetPersonal() As DataTable ‘ Devuelve un DataTable Temporal con Datos de prueba.
        Dim temp As New Data.DataTable
        temp.Columns.Add("nombre", GetType(String))
        temp.Columns.Add("apellido", GetType(String))
        temp.Columns.Add("cedula", GetType(String))

        For i As Integer = 0 To 10
            Dim nuevo As DataRow = temp.NewRow
            nuevo(0) = i.ToString
            nuevo(1) = i.ToString
            nuevo(2) = i.ToString
            temp.Rows.Add(nuevo)
        Next
        Return temp
    End Function

End Class

Anexo Código Fuente TestExcelASP (Visual Basic 2008)

enero 18, 2010

Uso de Elementos Web

Filed under: Aplicaciones Web — JorgePedraza @ 9:06 pm
Tags: , , ,

Uso de Web Parts (Elementos Web)

Las Páginas Web Modernas son colecciones de componentes. Por Ejemplo, examinar sitio de noticias favoritos, el cual probablemente tiene una barra de navegación a la izquierda, barra de titulo arriba, con al menos una columna de noticias y un pie de página. Adicionalmente varias noticias y proveedor de sitios de portal personalizado, opcionalmente componentes como reporte del tiempo y cotización de bolsas.
Los Web Parts de ASP.NET dan la capacidad de proporcionar a sus usuarios de controlar los componentes que aparece en página web. Con Web Parts, los usuarios pueden minimizar o cerrar completamente grupos de controles. También puede proporcionar un catalogo de Web Parts para permitir a usuarios agregar grupos de controles donde ellos quieran en la página.

Que es un Web Parts: Son componentes que los usuarios puede mostrar, ocultar o mover.

Web Parts son frecuentemente usado para:

  • Una lista de Artículos de noticias reciente relacionado con su organización.
  • Mostrar un calendario de eventos entrantes.
  • Una lista de enlaces relacionado con sitios web.
  • Una Caja de Búsqueda.
  • Miniaturas de Imagen de Galería de foto.
  • Control de Navegación de sitio.
  • Un Blog.
  • Artículos de noticias puesto desde alimentación de sindicación realmente simple (RSS).

Agregando Web Parts en un Página:
Para agregar un Web Parts a una página, siga estos pasos:

  1. Agrega un control WebPartManager en la parte superior de la pagina (el debe aparecer antes que cualquier Web Parts). Este control no es visible a los usuarios, pero es requerido para usar Web Parts.
  2. Crear una tabla de diseño. Técnicamente la tabla de diseño no son necesaria, pero en la práctica, el es la mejor vía para organizar Web Parts.
  3.  Agrega contenedores WebPartZone para cada celda en la tabla de diseño que espera contener Web Parts. Agrega el atributo title descriptivo para cada control WebPartZone.
  4. Agrega controles a los contenedores WebPartZone  para definir posiciones por defecto para su Web Parts. Agrega el atributo title descriptivo para cada Web Part que agrega.

Permitir a usuarios editar y organizar Web Parts:

Web Parts tiene diferentes modos que permiten a los usuarios controlar los Web Parts que son mostrados en la página. Los modos son:

  • Browse (BrowseDisplayMode) : la forma estándar de usuarios para navegar páginas web. Este es el modo por defecto.
  • Design (DesignDisplayMode): Permite a los usuarios Arrastras y soltar Web Parts dentro de diferentes localizaciones. Este modo es siempre visible.
  • Edit (EditDisplayMode): Similar al modo de diseño, el modo edición permite a los usuarios arrastras y soltar web Parts. Adicionalmente los usuarios puede seleccionar editar desde el menú Web Parts para editar el tamaño, dirección, mostrar ventana y zona del web Parts usando controles AppearanceEditorPart y LayoutEditorPart.
  • Catalog (CatalogDisplayMode): Permite a usuarios agregar adicional Web Parts que se especifica usando control CatalogZone. Este modo está disponible solo después de agregar un CatalogZone en su Página.
  • Connect (ConnectDisplayMode): permite a usuarios establecer manualmente conexiones en medio de controles interactuando con el control ConnectionZone. Por Ejemplo, un Wep Parts puede ser vinculado para mostrar información de resumen y detalles del mismo reporte. Este modo esta solo disponible después que agrega el control ConnectionZone en la Página.

Cuando los usuarios selecciona cambiar de modo, en su aplicación debe programáticamente establecer la propiedad WebParManager.DisplayMode.
Para permitir a usuarios entrar a diferentes modos de vista y edición de Web Parts, siga estos pasos:

  1. Agrega el control para pemitir a usuarios intercambiar en medio de diferentes modos de Web Parts. Use el WebPartManager.SupportedDisplayModes para recuperar la listas de modo, que son soportado y suministra una lista de opciones a los usuarios. Cuando los usuarios seleccione un modo, se establece WebPartManager.DisplayMode como modo seleccionado. Puede recuperar en la pagina  la instancia WebPartManager llamando el método estático WebPartManager.GetCurrentWebPartManager(Page).
  2. Agrega un contenedor EditorZone en la página que mantiene las herramientas de edición. Este control es oculto hasta que los usuarios seleccione el modo de edición.
  3. Agrega un control AppearanceEditorPart a el contenedor EditorZone para dar a los usuarios la capacidad de  Ajustar los bordes, tamaño, Direccion y titulo del Web Parts.
  4. Agrega un control LayoutEditorPart al contenedor EditoZone para dar a los usuarios la capacidad de ajustar el estado minimizado del Web Parts y mover Web Parts para otros contenedores WebPartZone.
  5. Agrega un contenedor CatalogZone a la página. Entonces agrega el control DeclarativeCatalogPart al contenedor CatalogZone,  que permite a usuarios agregar controles en la pagina. Estos controles son oculto hasta que los usuarios selecciona el modo  Catalog.
  6. Agrega un control ConnectionZone en la página, para permitir a usuarios establecer conexiones entre controles. Este control está oculto hasta que los usuarios seleccione el modo Connect.

Conexiones de Web Parts.

Una de la característica más completa de la herramienta de web parts es la capacidad de construir conexiones en medio de Web Parts. Para Entender las posibilidades, imagina construir una aplicación interna para administrar nominas de empleados. Pudiera tener:

  • Un Web Part principal, así puede navegar datos de empleados.
  • Un Web Part que muestre un grafica de pagos de horas extras de empleados seleccionado.
  • Un Web Part que muestre un grafica de torta ilustrando como  nomina, beneficios,  opciones de existencias, y  forma de pensión  dentro los empleados que esta compensado totalmente.
  • Un Web Part que compare los empleados que están pago con otros empleados en la misma posición.

Con la conexiones de Web Parts, los usuarios puede seleccionar un archivo de empleado y tener todo los otros web Parts actualizado automáticamente, usando que empleados esta con información. Naturalmente los usuarios que analizan los datos, pueden tener la capacidad de agregar, quitar y reorganizar Web Parts.
Las conexiones son también útiles para sitios web orientado por consumidores. Por ejemplo si está construyendo un sitio de portal, podría tener el Web parts que muestre información localizada en base a los usuarios que tiene códigos postales, incluyendo el tiempo, noticas local y la fase lunares.
Las conexiones pueden ser tanto estáticas o dinámicas. Sí la conexión es estáticas tu (como desarrollador) establece la conexiones durante la proceso de desarrollo, y no puede ser cambiado por usuarios. Las conexiones estáticas son permanentes y no puede ser eliminada por usuarios.  Las conexiones Dinámicas pueden ser establecidas por usuarios y está habilitada para agregar un control ConnectionZone en la página.

Creando Conexiones estáticas: para crear conexión siga estos pasos:

  1. Crea un Web Part proveedor. Un Web Part proveedor puede derivar desde la clase WebPart o el puede simplemente ser un control Web. Debe crear un método público con el atributo ConnectionProvider que retorna el valor que el consumidor reciba.
    <ConnectionProvider(“Proveedor de Nombre de usuario”, “ProveedorNombre”)> _
    Public Function GetName as string
    ‘ Name contiene el nombre de un usuario, lee desde el control Textbox
    Return Name
    End Function
  2. Crea un Web Part Consumidor. Un Web Part consumidor puede derivar desde la clase WebPart o el puede simplemente ser un control Web. Debe crear un método público con el atributo ConnectionConsumer que acepte el mismo tipo que retorna el método  ConnectionProvide el que suministra. El siguiente código demuestra un método consumidor.
    <ConnectionConsumer(“Consumidor Nombre de Usuario”,”ConsumidorNombre”)>  _
    Public Sub GetName(ByVal Name as String)
    greetingLabel.Text = “Bienvenido ” + Name + “!
    End Sub
  3. Crear una página web con el control WebPartManager. Agrega al menos un contenedor WebPartZone.
  4. Agrega su Contenedores WebParts proveedor y consumidor.
  5. Dentro de la fuente del control WebPartManager, agrega el elemento <StaticConnections> que incluye un control WebPartConnection para declarar la conexión en medio de un proveedor y consumidor. El control WebPartConnection debe tener un ID para identificar el Método del Proveedor (ProviderConnectionPointID), un atributo para identificar el control del consumidor (ConsumerID), y un atributo para la identificar el método del consumidor (ConsumerConnectionPointID). Debe tener un control WebPartConnection para cada par de controles conectado. El siguiente marcado demuestra esto:
    <asp:webPartManager ID=”WebPartManager1runat=”Server”>
    <StaticConnections>
    <asp:WebPartConnection
    ID=”Conn1”
    ProviderID=”GetName”
    ProviderConnectionPointID=”ProveedorNombre”
    ConsumerID=”ShowName”
    ConsumerConnectionPointID= “ConsumidorNombre”/>
    </StaticConnections>
    </asp:WebPartManager>

Habilitando Conexiones Dinámica.
Para habilitar conexión dinámica, que el usuario pueda crear o Interrupir, siga estos pasos:

  1. Crea una página con la conexión de un proveedor y consumidor como describe en la previa sesión.
  2. Opcionalmente, establezca  una conexión estática en medio del consumidor y proveedor como describe en la previa sesión. Este actúa como conexión por defecto que un usuario interrumpa si es deseado.
  3. Agrega un control ConnectionZone en la Pagina Web.
  4. Agrega un control que permita a usuarios entrar el modo de conexión, como describe en “Usuando Diferentes modos de vista”, anteriormente en este articulo.

Estableciendo conexiones dinámica entre Web Parts
Cuando un usuario visualiza su página, el o ellos puede entrar en modo de conectar y usa el control ConnectionsZone para editar Conexiones. Para Editar conexión como un usuario. Siga esto pasos:

  1. Intercambie el modo de vista de conectar.
  2. En el menú del Web Parts para tanto el consumidor o el proveedor, selección conectar.
  3. El objeto ConnectionZone aparece.
  4. Sí  hay una conexión existente, haga clic en el boto Desconectar para interrumpir la conexión.  De lo contrario, haga clic en crear una conexión para un consumidor, seleccione el consumidor y haga clic conectar.
  5. Cuando este hecho la edición de conexiones, haz clic en cerrar.

El Web Parts está conectado, como sí se hubieran conectado estáticamente.

Personalizar Web Parts: Un Web Parts soporta personalización, donde cambios de la capa se almacena para cada usuario así que el usuario visualiza la misma capa la próxima vez que visita la página. Un Personalización de Web parts es parecida pero separada de perfiles de usuarios. Ambos confía en cookies de lado del cliente y almacena datos en base de datos SQL server por defecto. Sin embargo típicamente los usuarios esta autenticado usando autenticación de Formulario o Windows.
Habilitando personalización de controles clientes. Por defecto la recuerda la personalización la ubicación y otras configuración de WebParts Personalizado. Como describe en “Habilitando Usuarios editar y Organizar WebParts”, anteriormente en esta capitulo. Puede también almacenar datos personalizado en la base de datos de personalización para permitir controles de información de recuerdo acerca de usuarios. Para cada propiedad pública que espera recordar para usuarios individuales, simplemente agrega el atributo Personalizable, como el siguiente código simplificado lo demuestra:
<Personalizable()> _
Property Zip() as String
Get
Return _zip
End Get
Set ( Byval Value as String)
_zip = value
End Set
End Property


Habilitando personalización Compartida: la personalización de  Web Parts está habilitada por defecto y usuarios autenticados de una página de Web Parts son capaz de personalizar páginas para ellos mismo sin cualquier configuración especial. Sin embargo el usuario individual o cambios personalizado de ámbito solo esta visible solo para el usuario que realizo la acción. Sí espera suministrar a un webmasters ( o cualquier usuario)  el poder de hacer cambios que afectan modo de personalización de todo el mundo que ve el Web Parts, puede permitir compartir personalización en su archivos Web.Config de las aplicaciones.
Dentro de la sesión <system.Web> del archivo de  configuración, agrega una sesión la <authorization> y dentro que, agrega un elemento <allow> para especificar que un usuario o usuarios tengan acceso al ámbito de personalización compartida, como se muestra  en el siguiente ejemplo:
<authorization>
<allow verbs=”EnterSharedScope” users”SomeUserAccoun” Roles= “admin” />
</authorization>
El  usuario o los usuarios especificados ahora tienen la capacidad de editar una página con ámbito  personalizado para que así los cambios este visible para todos los usuarios.

Deshabilitar personalización para un pagina.
Puede también deshabilitar la personalización para una página. El cual es de utilidad si desea tareas avanzada de  personalización en la misma página pero no en otras. Para deshabilitar la personalización en una página, visualiza las propiedades para las páginas que tiene el control WebPartManager y establece el atributo WebPartManager.Personalization.Enabled a falso. La forma más fácil de hace esto es usando el diseñador, pero el código de origen aparece similar a lo siguiente:
<asp:WebPartManager ID=”WebPartManager1runat=”Server”>
<Personalization Enabled=”False”>
</asp:WebPartManager>

Resumen de Web Parts:

  • Los Web Parts (elementos Web) son los controles que los usuarios pueden cerrar, minimizar, editar y mover.
  • Para agregar WebParts a una página Web, agregue un control WebPartManager en la parte superior de la página, añade contenedores WebPartZone a la página y, a continuación, agregar controles al WebPartZone.
  • Para permitir a los usuarios modificar o reorganizar los Web Parts, agregue un control para permitir a los usuarios seleccionar diferentes modos. A continuación, agregue un contenedor EditorZone a su página y añade un AppearanceEditorPart o un LayoutEditorPart al contenedor EditorZone. Para que los usuarios puedan añadir más Web Parts, agrega un contenedor CatalogZone y un DeclarativeCatalogPart al contenedor. Para permitir a los usuarios controlar cómo se conectan los elementos Web, agregue un control ConnectionsZone.
  • Para conectar los Web Parts para que puedan compartir datos, primero debe crear el proveedor y el consumidor de Web Parts. Después añadirlos a su página Web. Por último, configura las conexiones entre los elementos Web mediante la adición de un elemento <StaticConnections> al control WebPartManager.
  • Para utilizar personalización de Web Parts, habilite la autenticación en la aplicación y proporcionar un almacén de datos que contiene la información de personalización. Usted puede proporcionar la personalización en clases personalizadas añadiendo el atributo Personalizable a las propiedades públicas.

Laboratorio WebPart (Visual Basic 2008)

Codigo Fuente TestWebParts (Visual Basic 2008)

enero 8, 2010

Novedades de ASP.NET MVC 2 RC

Filed under: Aplicaciones Web — JorgePedraza @ 8:29 am
Tags: , , ,

ASP.NET MVC 2 RC (Versión próxima a lanzamiento)
Notas de la Versión próxima a lanzamiento

Visión General: ASP.NET MVC 2 es un marco de trabajo para desarrollar aplicaciones Web altamente contrastables y de fácil mantenimiento aprovechando el patrón Modelo de Vista Controlador (MVC), el cual se basa que la Lógica de Interfaz de Usuario usa la Vista, El manejo de entrada de usuarios usa Controlador, y la lógica de dominio usa el Modelo. Las aplicaciones ASP.NET MVC son fácilmente contrastables usando técnicas como Desarrollo manejado por prueba (TDD).

Requisitos de Sistemas para ASP.NET MVC 2 RC:
Sistemas operativos Soportado: Windows 7, Windows Server 2003, Windows Server 2008, Windows Vista.
Herramienta de Desarrollo .NET 3.5 SP1. Visual Studio 2008 SP1 o Visual Web Developer 2008 SP1.

Nota Importante para Visual Studio 2010 beta 2: Debido que Visual Studio 2010 beta 2 comparte componentes relacionado con ASP.NET MVC 2 Beta 2, la Versión RC de ASP.NET MVC  no está soportada para Visual Studio 2010 Beta 2. Dado a esta situación ASP.NET MVC 2 RC será soportada en una futura Versión  de Visual Studio 2010.

Novedades de ASP.NET MVC 2 RC:

  • Los Scripts de Validación de ASP.NET MVC se han trasladado a su propio archivo: Ayuda a reducir conflictos con otras librerías Ajax, los scripts de validación de ASP.NET MVC incorporado están ahora en archivos JavaScript separado.
  • Los Scripts de Validación de  ASP.NET MVC puede ser Incluido en la parte superior o inferior de la página: El Componente de servidor que representa los metadatos de validación cliente ahora representa los metadatos dentro de un variable JavaScritp. Esto permite los Scripts de validación sea incluido tanto parte superior o inferior de la página, porque los scripts verán las variable y cargaran los metadatos cuando este disponible.
  • Los Scripts de Validación de ASP.NET MVC soporta Globalización: Cuando los scripts de globalización de ASP.NET Ajax están incluido en página, la lógica de validación usa los datos de cultura específica para tipos de datos (como fecha y números) cuando validan texto de entrada. El nuevo método de ayuda Html.GlobalizationScript puede ser usado para representar referencia a script de globalización para la cultura actual.
  • El método ayuda Html.ValidationSummary  puede mostrar errores de nivel de modelo: En vez de mostrar siempre todos los errores de validación, el método de ayuda Html.ValidationSummary tiene una nueva opción para mostrar solo los errores de nivel de modelo. Esto permite que errores de nivel de modelo sea mostrado en un resumen de validación y errores específico de campos cuando pasa a cada campo.
  • La Plantilla T4 en visual Studio genera Código que especifica la versión de destino del .NET Framework: Una nueva propiedad está disponible en los archivos T4 desde el Host de ASP.NET MVC T4, que especifica la versión del .NET Framework que está usando la aplicación. Esto Permite que plantillas T4  genere código y marcado especifico  a un versión del .NET Framework.
  • Otras Mejoras:
    • El marcado HTML por defecto que es generada por la ventana de dialogo Agregar Vista, ha sido modificado a ser compatible con el marcado que es representado por la plantilla de ayuda(Editor,EditoFor,Display y DisplayFor).
    • En los botones de un formulario se puede especificar que ellos no cause la ejecución de lógica de validación. Por defecto cada botón en un formulario causa la ejecución de lógica de validación y sí falla la validación, el presenta el bloque de lógica de validación del formulario. Habilitando selectivamente la validación de botones, permite crear  formularios que puede procesar información incluso sí el formulario no está completo o si el formulario contiene datos que son temporalmente inválido.
    • En los validadores clientes se puede especificar cuando ellos se ejecutan. Valores posible son entrada (Mientras el usuario tipea), perder el Foco (Después que el usuario termina de tipear  y se mueva a otro campo) y enviar (Cuando el Usuario envía el formulario).
  • Correcciones de errores:
    • La Acción resultado FileResult ahora soporte caracteres non-US-ASCII en nombres de archivos.
    • Propiedades y métodos de la clase TempDataDictionary han mejorado a manejar mejor el caso cuando elementos son marcado para removerlo desde el diccionario.
    • Los soportes de validación en la interfaz IDataErrorInfo se han corregido.

Enlace de Descarga: ASP.NET MVC 2 RC

Para Mayor información sobre aprendizaje:

Implementación de Aplicaciones Web con Visual Studio 2010

Filed under: Aplicaciones Web — JorgePedraza @ 12:10 am
Tags: , , ,

El presente artículo tiene como finalidad resaltar información relevante acerca del tema de Implementación de aplicaciones web usando las nuevas opciones que integra Visual Studio 2010.

Implementación de Aplicaciones Web con Visual Studio 2010:

Implementar una aplicación web no es fácil como se debería. Los Desarrolladores de ASP.NET a menudo encuentran cuestiones como las siguientes:

  • El Despliegue en sitio de hospedaje compartido, requiere tecnologías como FTP, que puede ser lenta. Adicional debe  realizar manualmente tareas como ejecución de Scripts SQL para configurar base de datos y cambiar configuraciones de IIS, como configuración de Carpeta de Directorios virtuales  como una aplicación.
  • En un entorno empresarial, en adicción el despliegue de los archivos de la aplicación Web, frecuentemente administradores modifica los archivos de configuración de ASP.NET y configuraciones IIS. Los Administradores de base de datos debe ejecutar unas series de Scripts SQL para obtener la ejecución de base de datos de la aplicación. Tales instalaciones son trabajo intensivo, a menudo toma horas para completar  y debe ser documentado cuidadosamente.

Visual Studio 2010 incluye tecnologías  que abordan estas cuestiones y permite implementar sin problemas aplicaciones Web.
Las características de Implementación Web en Visual Studio 2010 incluyen las siguientes principales áreas:

  • Empaquetamiento Web.
  • Transformación de Archivo de Configuración Web.
  • Implementación de Base de datos.
  • Publicaciones de Un Click.

Ahora veamos en detalle sobre estas características:

Empaquetamiento Web en Visual Studio 2010:
En Visual Studio 2010 utiliza la herramienta MSDeploy para crear archivo comprimido para su aplicación, que es referenciado como Paquete web.
El Archivo de Paquete contiene metadatos acerca de su aplicación más los siguiente Contenido:

  • Configuración IIS, que incluye configuraciones de pool de aplicaciones, página de error, etc.
  • El contenido Web actual, que incluye páginas web, controles de usuarios, contenido estático (Imágenes y Archivos HTML), etc.
  • Datos y Esquema de Base de datos SQL Server.
  • Certificados de Seguridad, Componentes para Instalar en la GAC, Configuración de Registro, etc.

Un Paquete Web puede ser copiado a cualquier servidor e instalado manualmente usando el administrador de IIS. Alternativamente para una implementación Automatizada, el paquete puede ser instalado usando comandos desde línea de comando (Consola) o usando APIs de Implementación.

Transformación de Web.Config:
Para Implementación de Aplicaciones Web, Visual Studio 2010 Introduce Transformar Documento XML (XDT), que es una característica que permite transformar un archivo Web.Config desde la configuración de Desarrollo a Configuración de producción. Configuración de transformación son especificadas en archivos de transformación nombrado web.debug.config, Web,reléase.config, etc. Los nombres de estos archivos coinciden con las configuraciones de MSBuild. Un Archivo Transformado Incluye solo los cambios que necesita para hacer despliegue del archivo Web.Config. Se especifica los cambios usando sintaxis simple.
El Siguiente Ejemplo muestra una porción de archivo Web.release.config que podría ser producido para la implementación de su configuración de lanzamiento. La Palabra clave Replace en el ejemplo especifica que durante la implementación el Nodo connectionString en el archivo web.config será remplazado con los valores que esta listado en el ejemplo.
<connectionStrings xdt:Transform=”Replace“>
  <add name=”DemoDBconnectionString=”Detalles de la cadena de Conexion” />
</connectionStrings>

Implementación de  Base de datos:
Un paquete de implementación de Visual Studio 2010 puede incluir dependencias sobre Base de datos SQL server. Como parte de la definición de paquete, suministra la cadena de conexión  para su base de datos de origen. Cuando crea el paquete web, visual Studio 2010 crea Scripts SQL para el esquema de base de datos y opcionalmente para los datos, entonces agregan estos al paquete. Puede también personalizar los Scripts SQL y especificar la secuencia en que ellos deben ejecutarse sobre el servidor. Para tiempo de Implementación, suministra una cadena de conexión que es la apropiada para el servidor de destino;  el proceso de implementación  entonces usa esta cadena de conexión para ejecutar los scripts que crea el esquema de base de datos y agrega los datos.

Publicación con un Click :
Una implementación de Visual Studio 2010 permite usar el servicio de administración remota de IIS para publicar una aplicación Web en un servidor remoto. Puede crear un perfil de publicación para su cuenta de hospedaje o servidores de prueba o servidores de ensayo. Cada Perfil puede guardar seguramente credenciales apropiadas. Puede entonces desplegar en cualquier  de los servidores de destino con Un Click  usando la barra de herramienta de Publicación de Un Click. Con Visual Studio 2010, puede publicar usando línea de comando MsBuild. Esta permite configura su entorno de trabajo de equipo que incluyen publicación en un modelo de integración continua.

Próximamente estaré publicando mayor detalle acerca de los temas relacionados.

enero 6, 2010

Servicios Web

Filed under: Aplicaciones Web — JorgePedraza @ 10:59 am
Tags: , , , ,

Hola la presente de este artículo es mostrar un resumen bien sencillo y directo sobre el tema de servicio web, buscando la posibilidad de crear una entrada base de generalizar dicho tema a través de un ritmo de trabajo propio. Durante el artículo encontrara descripciones breves acerca de Servicio Web, así como las diferentes vía para el desarrollo y finalmente el uso dentro aplicaciones, como en el caso de ASP.NET.

Servicios Web:

Un Servicio Web es una entidad programable, proporcionado un elemento particular de funcionalidades, como Lógica de aplicación. Puede ser usado internamente por  cualquier aplicación o externamente, a través de la internet por cualquier número de aplicaciones usando estándares como XML (Lenguaje de Marca Extensible) y HTTP (Protocolo de Transferencia de Hipertexto).
Algunos Especificaciones Núcleos de un servicio Web son:

  • SOAP: Es un Protocolo basado en XML.
  • WSDL: Es un formato XML describe la interfaz pública a los servicios Web
  • UDDI: Es un protocolo para publicar y descubrir Metadatos.

Existe dos vía primaria para crea Servicios en ASP.NET:

  1. Servicios Web basado en el Modelo ASP.NET (.asmx).
  2. Servicios Web basado en Microsoft Windows Communication Foundation (WCF).

La diferencia fundamental entre ellos es:
Los Servicios Web de ASP.NET se hospedan directamente en Microsoft Internet Information Service IIS, cuales son procesados y ejecutados a través de protocolo de transferencia de Hipertexto (HTTP).
Ahora
Los Servicios Web de Windows Communication Foundation (WCF) pueden trabajar con una variedad de Hosts, Protocolos y Clientes.
Hosts: IIS,  Aplicaciones Consola residente, Servicio de Windows, etc.
Protocolos: HTTP, TCP, MSMQ, Binary HTTP, etc.
Clientes: Windows, Web, Mobile, etc.

Intentemos ver un poco a fondo el tema de Servicio Web (como ejemplo informativo de este artículo se usa la palabra miservicio):

Servicios web de ASP.NET (*.asmx):

Se define como un archivo de código con extensión .asmx  y relacionado con clase (*.vb  o *.cs).  ASP.NET luego envuelve este código como objeto de servicio web. Este objeto conoce como exponer el servicio web. Este incluye deserializar las solicitudes SOAP, ejecución de código .NET Framework, y serializar su respuesta para ser enviado de vuelta al cliente solicitante como un mensaje SOAP.
Los archivos de un proyecto de servicio web de ASP.NET (*.asmx) en Visual Studio son:

  • miservicio.asmx (Archivo de acceso al servicio Web).
  • miservicio.vb  o miservicio.cs   (Archivo de Clase relacionado con el miservicio.asmx).
  • Web.Config (Archivo de Configuración del servicio web ASP.NET)

La clase miservicio.vb contiene el código base para crear funcionalidades dentro del servicio, un ejemplo de esto es la función Holamundo que retorna un valor del tipo primitivo string que dice “Hola mundo”:
<WebMethod()> Public Function HolaMundo as String
Return “Hola Mundo”
End Funtion
Recuerde para que una función este visible desde el servicio web; se debe anteponer el atributo <WebMethod()>

Pasos claves para crear un Servicio Web de ASP.NET:

  1. Se define y crea las funciones que va ser expuesta en el servicio web.
  2. Hospedar el servicio dentro de IIS (Internet Information Service)
  3. Se referencia y llama el servicio desde la aplicación cliente.

Para más detalles del tema (Servicios web XML con ASP.NET)

Servicios Web de WCF:

WCF (Windows Communication Foundation):  Es modelo de programación Unificada, el cual se define como un simple vía para escribir servicios y por tanto unifica elementos como Servicio Web (*.asmx), .NET Remoting, Message Queue (MSMQ), Enterprise Services (COM+) y Servicios web Mejorados. WCF no remplaza estas tecnologías sobre una base individual, más bien suministra un modelo simple de programación que puede usar para aprovechar todo estos elementos a la vez.
La aplicación WCF tiene múltiple capas que trabajan juntas para suministrar un ancho rango de funcionalidades y opciones para construir aplicaciones orientadas a servicio (SOA).

Los archivos de un proyecto de servicio web de WCF en Visual Studio son:

  • miInterfaz.vb o miInterfaz.cs     (Archivo de definición de Interfaz).
  • miservicio.vb  o miservicio.cs    (Archivo de clase relacionado con miservicio.svc).
  • miservicio.svc  (Archivo de acceso al servicio).
  • Web.Config  (Archivo de Configuración del servicio).

El archivo miInterfaz.vb contiene el código base para crear los títulos específicos de las funciones del servicio (llamado Contracto).
<ServiceContract()> Public Interface IService1
    <OperationContract()> Function HolaMundo() As String
End Interface

Atributos Clave de WCF usado dentro del archivo de Interfaz:

  • ServiceContract: Indica si una Interfaz o clase es la base del servicio de WCF.
  • OperationContract: Es usado para marcar métodos de lado de la interfaz o clase como operaciones de Servicios.
  • DataContract: Es usado para marcar tipos escritos (Clases, Enumeraciones, Estructuras) como participantes en la serialización WCF vía de DataContractSerializer.
  • DataMember: Es usado para marcar Individuales propiedades y campos que desea que se serialice.

Ahora el archivo miservicio.vb vinculado a mi servicio.svc, contiene el código que implementa y usa los contractos definido en el archivo de interfaz miInterfaz.vb.
Public Class Service1
    Implements IService1
    Public Function HolaMundo() As String Implements IService1.HolaMundo
   Return “Hola Mundo desde Servicio Web de WCF” ‘Aquí se establece funcionalidad especifica
    End Function
End Class
Y finalmente en el archivo web.config se define los EndPoints para obtener conectividad del servicio a través de host. Para más detalles pulsa aquí

Resumen  de la arquitectura de WCF

  1. Capa de Contractos: Es donde se define los contractos que expone en un servicio para clientes finales. Se menciona:  Service, Operation, Data Message, Policy and Binding.
  2. Capa de Tiempo de Ejecución: Controla como su servicio es ejecutado y como el cuerpo del mensaje es procesado. Se  menciona: Transactions, Concurrency, Dispatch, Parameter Filtering, Throttling, Error, Metadata, Instance, Message Inspection.
  3. Capa de Mensajería: Representa la pila del canal de WCF en términos de protocolo y transporte.  Se menciona: HTTP, TCP, Named Pipes, MSMQ, Transaction Flow, WS Security, WS, Reliable Messaging, Encoding (Text, Binary, Etc.)
  4. Capa de Hospedaje: Se define el hospedaje o ejecutable, que ejecuta el servicio en proceso.  Se menciona:  IIS, Windows Activation Service WAS, Windows Service, EXE,  COM+ (Enterprise Services)

Pasos claves para crear un servicio Web de WCF con ASP.NET son:

  1. Define el contrato del Servicio (Archivo de Interfaz).
  2. Implementar o escribir el contracto del servicio.
  3. Configurar los Endpoint(s) del Servicio.
  4. Hospedar el servicio en una aplicación (IIS, Servicios de Windows, Aplicación Consola, etc.).
  5. Se referencia y llama el servicio desde la aplicación cliente.

Para más detalles del tema (Servicio Web de WCF).

Finalmente Aquí dejo un ejemplo bien sencillo de los Servicios Web (ASP.NET y WCF) y su uso dentro proyecto de ASP.NET TestService (ASP.NET 3.5 – Visual Basic 2008)

Blog de WordPress.com.