Un Add-in para VS2010RC que facilita agregar Architecture Layers

Hola que tal.

 

Hace unos dias publique un video en channel9 que muestra como validar las dependencias entre distintos layers en VS2010. Ahora bien, en esta pagina pueden bajar un add-in que agrega mas herramientas a la toolbox de validacion de layers y arquitectura (en cuanto a dependencias se refiere) esta genial cito textualmente a codeplex

The actual release include the following toolbox items:

* Architecture Patterns

1. Common Application Pattern
2. Service Architetype Pattern

* Architecture Layers

1. Presentation Layer Pattern
2. Business Layer Pattern
3. Data Layer Pattern
4. Service Layer Pattern
5. Cross-Cutting Layer Pattern
6. External Systems Pattern

 http://archlayerspatterns.codeplex.com/

 

Espero les sirva!

Como validar la Arquitectura de una aplicacion con VS2010

El impacto de no seguir la arquitectura original en la implementación de una aplicación puede generar graves problemas de mantenimiento y estabilidad, asi como problemas durante el propio ciclo de vida de desarrollo de la aplicacion. Afortunadamente una de las nuevas características de Visual Studio 2010 en combinación con TFS 2010 nos ayuda a respetar la arquitectura planeada y obliga al desarrollador a seguirla. El siguiente screencast es una demostracion paso a paso que indica como configurar esta nueva funcionalidad.

http://channel9.msdn.com/posts/Channel9Mexico/Valida-la-arquitectura-de-tu-aplicacin/

 

Espero les sirva!

Interesante en SQL Azure CTP: Heaps can not be replicated tables. Please create a clustered index for the table

Hola que tal.
 
Continuando con mis pruebas de SQL Azure intente hacer una prueba de tipo «a ver que pasa» cree una tabla muy simple en SQL Azure
 
Create Schema Sales
GO
 
Create table Sales.Customer
(
CustomerId int Identity(1,1),
FirstName nvarchar(50),
LastName nvarchar(50)
)
Posteriormente intente agregarle datos a esta tabla
 
Insert Into Sales.Customer
(
FirstName,
LastName
)
Values
(
‘Emilio Vicente’,
‘Martinez Vazquez’
)
 
Si esta sentencia la ejecutas en SQL 2008 corre sin problemas sin embargo en SQL Azure recibiras el mismo error que aparece como titulo de este post
 
Heaps can not be replicated tables. Please create a clustered index for the table
 
Dado que SqlAzure esta pensado en la alta disponibilidad de tus datos todas tus tablas deberan tener el clustered index para que se pueda llevar a cabo la replicacion automatica. Caso contrario no podras insertar datos en dicha tabla.  Por lo tanto deberas tener esto en cuenta cuando estes haciendo el diagrama de tu base de datos que pienses mover a Sql Azure. Ahora creemos el indice que SQL Azure espera:
 
Create Clustered Index CIX_Customer ON Sales.Customer(CustomerID)
GO
Intentemos de nuevo insertar los datos:
Insert Into Sales.Customer
(
FirstName,
LastName
)
Values
(
‘Emilio Vicente’,
‘Martinez Vazquez’
)
Com podran observar ahora si dejara insertar los datos sin problema alguno.
 
Espero les sea util
 
Saludos!!
 
P.D les paso la liga de mi twitter www.twitter.com/netclr

SQL AZURE Services Relacional!

Hola de nuevo!

Se que ha pasado muuucho tiempo desde mi ultimo articulo sobre TDE (transparent data encription), la verdad he estado muy ocupado y me da pena tardar tanto en poner este articulo pero la verdad vale muchisimo la pena. El dia de hoy estuve jugando un rato con SQL Azure, (http://www.microsoft.com/azure/sql.mspx aqui pueden pedir un codigo para poder tener acceso al CTP cuando ya tengan acceso probablemente reciban los errores que yo recibi y aqui viene la forma de solucionarlos) y observe al menos 3 areas de oportunidad.

1. Intenta conectarte desde el SSMS 2008 (SQL Sever Management Studio 2008, no se puede con el 2005) cuando abres esta herramienta recibiras un error.

     Solucion. Cierra ese primer cuadro de dialogo de conexion, haz click en el boton de new query y en le cuadro de dialogo de conexion mete el nombre del servidor completo (algo asi como nombredatabase.ctp.database.windows.net) en nombre usuario mete el nombre de usuario que metiste en el proceso de registro cuando te haya llegado la invitacion) en password tienes que meter el password que te pidio en el proceso de registro. Hacer click en la parte de advanced y teclear el nombre de la base de datos que hayas creado en SQL Azure, posteriormente hacer click en conectar.

2. Si quieres cambiar de contexto de base de datos (en caso de que hayas creado mas de una base de datos, hasta ahorita puedes crear solo hasta 5 bases de datos) no puedes usar la tan conocida sentecia ‘USE nombreBaseDeDatos’ si quieres cambiar de base de datos tienes que repetir el paso 1 y cambiar el nombre de la base de datos). (ver este thread http://social.msdn.microsoft.com/Forums/en-US/ssdsgetstarted/thread/6d1a006e-146e-4bd1-8ecc-3726422bb425)

3. Si deseas conectarte a traves del server explorer  de Visual Studio 2008 o 2010 introduces el nombre del servidor completo (algo como nombredatabase.ctp.database.windows.net)  tu usuario igual que en el paso 1, nuevamente haces click on advanced y en la parte de network library selecciona TCP/IP, haces click en test connection (sin seleccionar una base de datos) y obtendras el cuadro de dialogo de que la conexion se realizo satisfactoriamente, ahora escribe el nombre de la base de datos master o de alguna otra base de datos que hayas creado y obtendras un error, la razon? Actualmente no te podras conectar usando la herramienta visual, sin embargo si escribes la cadena de conexion en el web.config podras conectarte a SQL Azure sin problemas (ver este thread (http://social.msdn.microsoft.com/Forums/en-US/ssdsgetstarted/thread/e77370b1-987b-4ae1-b469-927119e62482).

Como podran observar  aun hay areas de oportunidad sin embargo aun es CTP, por otro lado, el simple hecho de que ahora podamos usar SQL Azure casi como la base de datos local es realmente emocionante los invito a probar esta nueva experiencia y a que se ‘suban a la nube’!.

 Saludos!

 

 

 

TDE, Transparent Data Encription en Sql Server 2008

Hola nuevamente.

Todos hemos notado la forma en la que Microsoft ha incrementado su atencion en el aspecto de la seguridad. Se puede decir que Sql server 2005 fue un verdadero exito en este sentido. Pues bien, en Sql server 2008 tambien se agregaron cosas muy interesantes tocante a la seguridad. Si desean observar un how to sobre como implementar TDE, lo que es y lo que no es, los invito a ver estos 2 videos que subi a channel 9 mexico (los videos se intitulan TDE par1 y TDE part2 no duran mas de 7 minutos cada uno). http://channel9.msdn.com/tags/Mexico/

 

Espero les sirva.

 

Saludos!

Convertir LINQ Table a DataTable

Quiza por alguna razon o por que desees hacer una prueba de Concepto desees realizar una conversion de LINQ Table a una Data table. Pue bien primero deberas crear una clase que enumere en tiempo de ejecucion las filas que trae tu LINQ table, este es el codigo para realizar  dicha funcionalidad.

Imports System.Reflection
Public Class LinqToTable
    »’ <summary>
    »’ Description: This Method converts LINQ Table to System.Data.DataTable
    »’ Date       : 28/6/2008
    »’ Revisions  : Emilio Vicente Martinez Vazquez
    »’ </summary>
    »’ <param name=»IEObject»></param>
    »’ <returns></returns>
    »’ <remarks></remarks>
    Public Function ObtainDataTableFromIEnumerable(ByVal IEObject As System.Collections.IEnumerable) As DataTable

        Dim dtMyTable As New DataTable()

        For Each objObject As Object In IEObject

            Dim MyType As Type = objObject.[GetType]()

            Dim pInfoType As PropertyInfo() = MyType.GetProperties()

            If dtMyTable.Columns.Count = 0 Then

                For Each pInfo As PropertyInfo In pInfoType

                    dtMyTable.Columns.Add(pInfo.Name, pInfo.PropertyType)

                Next

            End If

            Dim drMyRow As DataRow = dtMyTable.NewRow()

            For Each pInfo As PropertyInfo In pInfoType

                Dim value As Object = pInfo.GetValue(objObject, Nothing)

                drMyRow(pInfo.Name) = value

            Next

            dtMyTable.Rows.Add(drMyRow)

        Next

        Return dtMyTable

    End Function

End Class

Ahroa deberas agregar a tu proyecto un objeto de tipo linq to sql class (boton derecho en alguna carpeta que nombres «linq models» y le das agregar nuevo elemento y ahi veras linq to sql classes) Ahora bien dentro del modelo agrega el procedimiento almacenado que trae tus datos (supongamos para este ejemplo que buscaremos a los usuarios por su nombre asi que agregaremos dicho procedimiento almacenado al disenador de nuestro modelo de linq to sql classes)

Ahora deberas crear una funcion que haga la conversion de linq data table a un Data Table normal usando la clase que ya escribimos anteriormente. Dicha funcion quedaria mas o menos asi.

 

Public Function GetUserByName(ByVal strUser As String) As DataTable

        Dim dtMyTable As DataTable = Nothing
        Try
            Dim dbCont As New MyLinQModel.MyLinQModelDataContext
            Dim myProc As IEnumerable(Of getUser_Users_SResult) = dbCont.getUser_Users_S(strUser)
            Dim myRes As New LinqToTable
            dtMyTable = myRes.ObtainDataTableFromIEnumerable(myProc)

        Catch ex As Exception
            LogError.WriteFile(ex.ToString)
        End Try
        Return dtMyTable

 

Y Listo!! con esto ya convertiremos un LINQ Table a un Objeto de tipo Data Table.

 

Saludos!

    End Function

 

 

Escribe tu log de errores en un archivo.

Si por alguna razon tienes la necesidad de escribir los errores que genera tu aplicacion en un archivo .txt este codigo puede ser de utilidad.

 

Public Class LogError

#Region «Write To HD Functions»

    »’ <summary>
    »’ Description: Write to Hd the Errors
    »’ Date       : 26/2/2007
    »’ Revisions  : Emilio Vicente Martinez Vazquez
    »’ </summary>
    »’ <param name=»Text»></param>
    »’ <remarks></remarks>
    Public Shared Sub WriteFile(ByVal Text As String)
        Dim strStream As System.IO.Stream
        Dim strStreamWriter As System.IO.StreamWriter = Nothing
        Dim strStreamReader As System.IO.StreamReader = Nothing
        Dim str As String = Nothing

        Try

            Dim FilePath As String = AppDomain.CurrentDomain.BaseDirectory.ToString() + «SurveyLog.txt»

            If System.IO.File.Exists(FilePath) = True Then
                strStreamReader = System.IO.File.OpenText(FilePath)
                str = strStreamReader.ReadToEnd()
                strStreamReader.Close()
            End If

            strStream = System.IO.File.OpenWrite(FilePath)
            strStreamWriter = New System.IO.StreamWriter(strStream, _
                             System.Text.Encoding.UTF8)

            If str = «» Then
                strStreamWriter.WriteLine(DateTime.Now.ToString)
                strStreamWriter.WriteLine(Text)
            Else

                str = str + Text
                strStreamWriter.WriteLine(str)
                strStreamWriter.WriteLine(DateTime.Now.ToString)
                strStreamWriter.WriteLine(» «)
                strStreamWriter.WriteLine(» «)
                strStreamWriter.WriteLine(» «)
            End If

            strStreamWriter.Close()

        Catch ex As Exception
            strStreamWriter.Close()
            strStreamReader.Close()
        End Try
    End Sub
#End Region
   
End Class

Como poder utilizar la herramienta de Administracion Web de Visual Studio 2005 o 2008 en un site de produccion para modificar roles, usuarios etc?

Hacia algun tiempo que no escribia, la razon es porque he estado un tanto ocupadon pero bueno ahora que tuve un poco de tiempo quisiera compartir esto con ustedes. Sin duda alguna la aplicacion de roles y membresias en asp.net 2.0 en conjunto con sql 2005 fue un enorme paso adelante para simplificar la creacion y administracion de los mismos, el detalle es que, cuando quieres usar esa maravillosa herramienta web de administracion en un sitio de produccion pues….. nomas no te deja. Comencemos pues a explicar como habilitar esta herramienta en produccion.

Primero que nada quiza quieras modificar el archivo machine.config a fin de que la base de datos de aspnetdb (la que guarda users y demas) no sea un archivo mas dentro de tu aplicacion web sino que este directamente en sql server. Para eso deberas modificar el archivo machine.config  (que normalmente esta en esta ruta C:WINDOWSMicrosoft.NETFrameworkv2.0.50727CONFIG  ) deberas buscar la seccion connectionStrings del archivo machine.config para que se vea algo como esto:

<connectionStrings>
  <add name=»LocalSqlServer» connectionString=»data source=.SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=aspnetdb» providerName=»System.Data.SqlClient»/>
 </connectionStrings>

Ahora para crear esa base de datos tendras que correr este script desde la consola de visual studio 2005 o 2008 (o el command prompt, esa consolita que se parece al extinto DOS)  Donde «nombre de tu computadora» es obviamente el nombre de tu equipo

aspnet_regsql -S nombredetucomputadorasqlexpress -E -A all

Ahora lo que debes hacer es abrir el Sql Server Management Studio, conectarte a sqlexpress expandir bases de datos y ahi veras la base de aspnetdb.

El siguiente paso es darle permisos a la cuenta ASPNet para que pueda accesar a esta base de datos (Caso contrario te saldra un error cuando quieras realizar operaciones de insercion de usuarios etc). Agrega un nuevo login (si es que no existe uno para ASPNet) y dale todos los permisos necesarios para crear etc en la base de datos aspnetdb.

Bien ahora abre IIS y dile que vas a crear un nuevo directorio virtual  digamos que por nombre le pondras SiteDemo (en este agregaremos la aplicacion que usa visual studio para modificar tus users y roles y todo lo que quieres administrar pero ya no en desarrollo sino en produccion) Haces click en siguiente hasta la parte donde te pide la ruta donde esta la aplicacion que queremos agregar y metes esta ruta que es donde normalmente se instala .net. C:WINDOWSMicrosoft.NETFrameworkv2.0.50727ASP.NETWebAdminFiles

Le das click click click hasta finalizar, asegurate que la version de .net para esta aplicacion este configurada en 2.0. Para esto le das click con el boton derecho al SiteDemo, propiedades y ahora haces click en el tab que dice asp.net y ahi tiene que estar la version 2.0.50727

Ahora regresa a la aplicacion que estas desarrollando. Agrega una nueva pagina (llamala como desees) y agregale un boton a esta pagina. En el evento click de este boton metes esta linea de codigo

Response.Redirect(«Http://localhost/SiteDemo/Default.aspx?applicationPhysicalPath=» + AppDomain.CurrentDomain.BaseDirectory.ToString() + «&applicationUrl=/»)

Listo!!! se abrira la pagina de administracion web en tu site de produccion y ahora podras crear usuarios, activarlos, desactivarlos, crear roles etc todo recordemos en produccion.

Espero les sirva, hasta el proximo post!!

 

 

Microsoft Ofrece: Dominios, Email, y Almacenamiento Gratis

Hola que tal.

Hace poco recibi un mail donde Microsoft me ofrecia un dominio, cuentas de email y almacenamiento gratis, como es de esperarse, pense que era una beta o algo asi, y entre a ver de que se trataba. Los pasos son muy sencillos y cabe aclarar que el unico que tiene costo hasta ahorita es el dominio y eso despues de 12 meses, lo cual quiere decir que los primeros 12 meses el dominio te saldra sin costo, si no quieres un dominio propio puedes crear uno dentro del mismo dominio de office live (el mio es este y toma el nombre de tu sitio del nombre de la empresa que te pide cuando te registras (http://netdevelopers.tech.officelive.com/default.aspx) asi mismo las cuentas de e-mail son gratis tambien y tienen el domino de office live ( esta es la mia emilio.martinez@officeliveusers.com) . El hosting tampoco lo esta cobrando Microsoft hasta este momento. Si tomamos en cuenta que la crisis le esta pegando a varias micro y pequenas y medianas empresas, esta puede ser una muy buena opcion para que logren mayor visibilidad y quiza algunos podrian cobrar por personalizar el sitio de la empresa a muy bajo costo. Ya por ultimo esta es la liga donde pueden registrarse http://officeliveoffers.com/affiliate/default.htm?AID=10554589&PID=1260291&refid=cj

Espero les sirva!