Documente Academic
Documente Profesional
Documente Cultură
com
Taller de ASP.NET
Autores del manual Este manual ha sido realizado por los siguientes colaboradores de DesarrolloWeb.com: Pol Salvat Miguel Angel Alvarez Clikear.com
http://www.mistrucos.net (6 captulos) Director de DesarrolloWeb.com http://www.desarrolloweb.com (2 captulos) http://www.clikear.com (1 captulo)
Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
Una imagen (dnde su scr ser /AntiRobots.aspx) Un input de tipo texto, con un id= type= frm_Codigo_Seguridad
Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
En el Page_Load:
If Not IsPostBack Then Session("AntiBots") = GenerateRandomCode() Else 'Comprobamos el cdigo antibots If frm_Codigo_Seguridad.Value = Session("AntiBots").ToString() Then bAntiBots = True Else bAntiBots = False Me.Session("AntiBots") = GenerateRandomCode() End If End If
Tenemos que crear la funcin GenerateRandomCode para generar un cdigo de seguridad al azar
#Region "GenerateRandomCode" Private Function GenerateRandomCode() As String Dim random As New Random Dim s As String = "" Dim i As Int32 = 0 Dim iChr As Int32 While (i <; 6) iChr = random.Next(48, 90) While iChr >; 57 And iChr <; 65 iChr = random.Next(48, 90) End While s = String.Concat(s, Chr(iChr).ToString()) i=i+1 End While Return s End Function #End Region
Para seguir, nos faltar crear la clase encargada de crear, manipular y deformar el cdigo de seguridad generado en imagen
Imports Imports Imports Imports Imports System System.Drawing System.Drawing.Drawing2D System.Drawing.Imaging System.Drawing.Text
Public Class ImagenAntiBots Dim m_text As String Dim m_width As Int32 Dim m_height As Int32 Dim m_familyName As String Dim m_image As Bitmap Dim m_random As New Random #Region "Propiedades de lectura" Public ReadOnly Property Text() As String Get Return m_text End Get End Property Public ReadOnly Property Width() As Int32 Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin. 3
Get Return m_width End Get End Property Public ReadOnly Property Height() As Int32 Get Return m_height End Get End Property Public ReadOnly Property Image() As Bitmap Get Return m_image End Get End Property #End Region Public Sub New(ByVal s As String, ByVal width As Int32, ByVal height As Int32) Me.m_text = s Me.SetDimensions(width, height) Me.GenerateImage() End Sub Public Sub New(ByVal s As String, ByVal width As Int32, ByVal height As Int32, ByVal familyName As String) Me.m_text = s Me.SetDimensions(width, height) Me.SetFamilyName(familyName) Me.GenerateImage() End Sub Private Sub SetDimensions(ByVal width As Int32, ByVal height As Int32) If width <;= 0 Then Throw New ArgumentOutOfRangeException("width", width, "Argument out of range, must be greater than zero.") End If If (height <;= 0) Then Throw New ArgumentOutOfRangeException("height", height, "Argument out of range, must be greater than zero.") End If Me.m_width = width Me.m_height = height End Sub Private Sub SetFamilyName(ByVal familyName As String) Try Dim font As Font = New Font(familyName, 12.0F) Me.m_familyName = familyName font.Dispose() Catch ex As Exception Me.m_familyName = System.Drawing.FontFamily.GenericSerif.Name End Try End Sub Private Sub GenerateImage() Dim bitmap As New Bitmap(Me.m_width, Me.m_height, PixelFormat.Format32bppArgb) 'Creamos objeto grafico Dim g As Graphics = Graphics.FromImage(bitmap) g.SmoothingMode = SmoothingMode.AntiAlias Dim rect As New RectangleF(0, 0, Me.m_width, Me.m_height)
Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
'Rellenamos el fondo Dim hatchBrush As New HatchBrush(HatchStyle.SmallConfetti, Color.LightGray, Color.White) g.FillRectangle(hatchBrush, rect) 'Establecemos la fuente Dim size As SizeF Dim fontSize As Single = rect.Height + 1 Dim font As Font 'Ajusta el tamao de la fuente Do fontSize = fontSize - 1 font = New Font(Me.m_familyName, fontSize, FontStyle.Bold) size = g.MeasureString(Me.m_text, font) Loop While (size.Width >; rect.Width) 'Establece el formato de texto Dim format As New StringFormat format.Alignment = StringAlignment.Center format.LineAlignment = StringAlignment.Center Dim path As New GraphicsPath path.AddString(Me.m_text, font.FontFamily, CType(font.Style, Int32), font.Size, rect, format) Dim v As Single = 4.0F Dim points As System.Drawing.PointF() = { _ New System.Drawing.PointF(m_random.Next(CType(rect.Width, Integer)) / v, m_random.Next(CType(rect.Height, Integer)) / v), _ New System.Drawing.PointF(rect.Width - m_random.Next(CType(rect.Width, Integer)) / v, m_random.Next(CType(rect.Height, Integer)) / v), _ New System.Drawing.PointF(m_random.Next(CType(rect.Width, Integer)) / v, rect.Height m_random.Next(CType(rect.Height, Integer)) / v), _ New System.Drawing.PointF(rect.Width - m_random.Next(CType(rect.Width, Integer)) / v, rect.Height m_random.Next(CType(rect.Height, Integer)) / v)} Dim matrix As New Matrix matrix.Translate(1, 3) 'Deformamos la imagen path.Warp(points, rect, matrix, 0) 'Dibuja el texto hatchBrush = New HatchBrush(HatchStyle.OutlinedDiamond, Color.Orange, Color.BlueViolet) g.FillPath(hatchBrush, path) 'Aade efectos Dim m As Int32 = Math.Max(CType(rect.Width, Integer), CType(rect.Height, Integer)) Dim i As Int32 = 0 While i <; CType((rect.Width * rect.Height / 30.0F), Int32) Dim x As Int32 = m_random.Next(CType(rect.Width, Integer)) Dim y As Int32 = m_random.Next(CType(rect.Height, Integer)) Dim w As Int32 = m_random.Next(CType(m / 50, Integer)) Dim h As Int32 = m_random.Next(CType(m / 50, Integer)) g.FillEllipse(hatchBrush, x, y, w, h) i=i+1 End While font.Dispose() hatchBrush.Dispose() g.Dispose() 'Establece la imagen Me.m_image = bitmap End Sub
Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
End Class
Ahora en el proyecto crearemos la pgina que apunta nuestra imagen (el primer control que hemos agregado en el proyecto, y en el Page_Load pondremos este cdigo:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Creamos una imagen creando el texto guardado en la sesion Dim ab As New ImagenAntiBots(Session("AntiBots").ToString(), 200, 50, "Arial") 'Cambiamos la respuesta al cliente a tipo "imagen/jpeg" Me.Response.Clear() Me.Response.ContentType = "image/jpeg" 'Salvamos la imagen en el Response ab.Image.Save(Me.Response.OutputStream, ImageFormat.Jpeg) End Sub
Y para terminar, en el formulario del registro, dnde hemos agregado los controles, en el botn del submit, utilizar esta condicin:
If bAntiBots Then ' Creamos el registro Else ' El cdigo de seguridad no est bien colocado End if
Puedes descargarte todo el cdigo fuente de pulsando aqu. Artculo por Pol Salvat
Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
Dim EndPoint As Integer = html.IndexOf("/>;", StartPoint) + 2 Dim viewstateInput As String = html.Substring(StartPoint, EndPoint - StartPoint) html = html.Remove(StartPoint, EndPoint - StartPoint) Dim FormEndStart As Integer = html.IndexOf("<;/form>;") - 1 If FormEndStart >;= 0 Then html = html.Insert(FormEndStart, viewstateInput) End If End If writer.Write(html) End Sub
Cdigo en C#
protected override void Render(System.Web.UI.HtmlTextWriter writer) { System.IO.StringWriter stringWriter = new System.IO.StringWriter(); HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter); base.Render(htmlWriter); string html = stringWriter.ToString(); int startPoint = html.IndexOf("<;input type=\"hidden\" name=\"__VIEWSTATE\""); if (startPoint >;= 0){ int endPoint = html.IndexOf("/>;", startPoint) + 2; string viewstateInput = html.Substring(startPoint, endPoint - startPoint); html = html.Remove(etartPoint, endPoint - startPoint); int formEndStart = html.IndexOf("<;/form>;"); if (formEndStart >;= 0){ html = html.Insert(formEndStart, "\n" + viewstateInput);}} writer.Write(html);}
Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
Podemos utilizar el with para no tener que escribir todo el rato e.item:
With e.Item .Cells(0).Text = strImg.ToString .Cells(0).HorizontalAlign = HorizontalAlign.Center .Cells(0).VerticalAlign = VerticalAlign.Top .Cells(0).Width = Unit.Pixel(30) .Cells(0).visible=False End with
Para acabar, hay que comentar que una fila de un grid puede ser de la cabecera o no. Si es cabecera:
If e.Item.ItemType = ListItemType.Header Then
Si es un elemento normal:
Ante todo es importante hablar de la gratuidad del software. En contra de lo que muchas veces ocurre con los sistemas Microsoft, podemos utilizar libremente este programa para cualquier propsito. Podemos modificarlo, redistribuirlo o, incluso, venderlo o prestar soporte tcnico. La nica condicin es que debemos mencionar la procedencia del software, en la pgina o el cdigo HTML. DotNetNuke tiene muchas posibilidades, algunas de ellas autnticamente interesantes. Entre ellas podemos encontrar:
Creacin de mltiples portales utilizando un mismo cdigo y base de datos, lo que significa que se pueden crear varios sitios utilizando un mismo alojamiento que soporte ASP.NET. Registro de usuarios y completa personalizacin del portal dependiendo del tipo de usuario. Posibilidad de crear servicios o contenidos de acceso restringido, con enlace directo a mtodos de pago para los usuarios que deseen acceder a esos servicios. Acceso de administrador para gestionar los contenidos y servicios. Acceso a estadsticas completas del uso del sitio. Sistema de gestin de banners integrado. Acceso de superusuario para crear nuevos portales. Posibilidad de crear skins (apariencias) por el administrador para dotar de un aspecto al portal totalmente personalizado. Permite trabajar con varias bases de datos distintas, aunque para algunas hace falta algn mdulo adicional de soporte. Mltiples tipos de contenidos que se pueden administrar. Entre ellos Noticias, contacto, foros de discusin, documentos, eventos, etc. Una larga lista que se puede ampliar con una serie de mdulos disponibles.
Mdulos de DotNetNuke Los mdulos son piezas del programa que ofrecen soporte a funcionalidades especficas para los usuarios del portal. La versin actual de DotNetNuke dispone de 24 mdulos para realizar tareas diversas como gestin de usuarios, calendario de eventos, banners, noticias, etc. Adems, existen otros mdulos gratuitos, ofrecidos por portales que tratan sobre DotNetNuke y tambin algunos de pago que ofrecen ciertas empresas y desarrolladores. Los mdulos pueden instalarse, desinstalarse y configurarse siempre que se quiera, para dotar al portal de las funcionalidades que necesitamos en cada momento. Entre los mdulos disponibles en la versin inicial se encuentran los siguientes:
Gestin de cuentas Noticias o novedades Gestin de banners Contacto, que ofrece la posibilidad de enviar correo a personas o grupos de personas Foros de discusin, con temas configurables Gestin de documentos, con opcin a descarga o visualizacin Calendario de eventos FAQs Links Bsquedas Encuestas
Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
La lista todava contina con otros mdulos para temas ms especficos o tan especiales como servicio de informacin del tiempo o un servicio Whois, para hacer bsquedas de registro de nombres de dominios. Algunos ejemplos de pginas realizadas con DotNetNuke Existen ya bastantes ejemplos de buenos trabajos realizados con DotNetNuke. Entre los mejores hay algunos contribuidores de desarrollo de la plataforma. 4Birckhead http://www.4birckhead.com En esta pgina, aparte de un agradable diseo, podremos encontrar nuevos mdulos gratuitos para extender DotNetNuke, como lbum de fotos o Tikers de ndices burstiles. ByDesignWebsights http://www.bydesignwebsights.com/ Ofrecen soporte y recursos sobre DotNetNuke. En el momento en el que se escribi este artculo ofrecan alojamiento gratuito sobre la plataforma. Ciber Huis http://www.cyberhuis.com/ Otro sitio de recursos con posibilidad de descargar nuevos mdulos gratuitos. DotNetNuke Skins http://www.dnnskins.comUn sitio para encontrar nuevas apariencias para DotNetNuke. Hay que registrarse para acceder a los skins, pero puede merecer la pena porque tienen disponibles decenas de diseos distintos. DotNetNuked http://www.dotnetnuked.com Otro ejemplo de sitio realizado con DotNetNuke que ofrece tambin recursos de utilidad. Snowcovered http://www.snowcovered.com Una pgina ms comercial sobre DotNetNuke, en la que se ofrecen recursos tiles, aunque la mayora de las veces de pago. Cmo obtener DotNetNuke En la pgina de inicio de DotNetNuke (http://dotnetnuke.com) podemos encontrar mucha ms informacin e instrucciones para instalar DotNetNuke. Para empezar hay disponible una gua de instalacin del software que explica paso a paso el proceso de instalacin. Tambin disponen de guas de usuario y de administrador del portal, as como diversa documentacin y FAQs. Para descargar DotNetNuke hay que registrarse en la pgina y hacer el inicio de sesin. Podremos encontrar varios ficheros de descarga con distintas versiones del programa. Conclusin Dot Net Nuke es una buena muestra de lo que se puede hacer con .NET y del empeo de ciertas comunidades, junto con Microsoft, de popularizar el uso de software libre en esta nueva plataforma de desarrollo. Efectivamente, se trata de un software gratuito desarrollado por una comunidad de personas a que se sienten a gusto trabajando con sistemas Microsoft y que desean popularizar sus herramientas. El producto del trabajo lo podemos ver en dotnetnuke.com (http://dotnetnuke.com) y en un primer vistazo parece que han conseguido una buena herramienta.
Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
10
Multicultura en ASP.NET
Crditos Este artculo nos lo ofrece Clikear.com, una web dedicada por completo a .NET, que ofrece alojar tus pginas ASP.NET gratuitamente.
En este articulo presentamos un ejemplo de una pagina ASP .NET para conocer las clases que sirven para hacer una web multicultura, una de las nuevas e interesantes caractersticas de la plataforma .NET. Presentamos una pagina en la que se nos muestra los diferentes formatos de hora, fecha, y numeros en distintos tipos de configuraciones para distintas culturas. Estudiando este ejemplo el lector podr conocer algunos de los metodos mas usados de la clase System.Globalization, que se utiliza para crear webs multiculturales. Se puede descargar el archivo comprimido con el ejemplo. Artculo por Clikear.com
Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
11
Esto significa que necesitamos crear dos procesos para ejecutar las distintas versiones de ASP.Net. Esta opcin la podemos configurar por cada website que tengamos, podramos incluso tener n grupos distintos. Hay que aadir que cada grupo correr en una nueva instancia de w3wp.exe, y que esto implica el consumo de recursos de RAM (entre 20 a 40 megas) para cada grupo como mnimo, y que subir en relacin del uso de la web. Para crear un grupo de aplicaciones, apretaremos botn derecho sobre MI PC y seleccionaremos Administrar
En el men de la izquierda, localizaremos Administrador de Internet Information Services (IIS) y desplegaremos la carpeta "Gupos de aplicaciones"
Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
12
Encima de "Grupo de aplicaciones" apretaremos botn derecho del ratn, seleccionaremos "Nuevo", Grupo de aplicaciones.
En el Id. De grupo de aplicaciones le pondremos el nombre que queramos (en este ejemplo, ASP_NET_2_0)
Ahora en la carpeta de "Grupo de aplicaciones" podemos observar el nuevo grupo de aplicaciones que acabamos de crear ASP_NET_2_0
Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
13
Para asignar el website a nuestro nuevo grupo de aplicaciones, pulsaremos encima del sitio web botn derecho del ratn, propiedades, y en la pestaa "Directorio particular", en la parte de abajo, donde pone "Grupo de aplicaciones" seleccionaremos nuestro nuevo grupo de aplicaciones
Aplicaremos y nuestra web en ASP.NET 2.0 funcionar a la perfeccin. Artculo por Pol Salvat
Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
14
Dim FontDate As New Font("Verdana", 7) Dim wb2 As New SolidBrush(Color.Black) Dim x As Int32 = -50 Dim maxValue As Int32 = 0 'calculo del mximo valor de la grfica i=0 While i <; l_arr.Count If l_arr(i) >; maxValue Then maxValue = l_arr(i) End If i += 2 End While 'creacin de todos los rectngulos de la grfica i=0 While i <; l_arr.Count x += 70 Dim aux As Int32 aux = (l_arr(i) * 189) / (maxValue + 200) objGraphic.FillRectangle(orange, x, 189 - aux, 40, aux) PointValue.X = x PointDate.X = x - 10 objGraphic.DrawString(l_arr(i).ToString, objFont, wb2, PointValue) objGraphic.DrawString(l_arr(i + 1).ToString, FontDate, wb2, PointDate) i += 2 End While Response.ContentType = "image/gif" objBitmap.Save(Response.OutputStream, ImageFormat.Gif) End Sub End Class
Puedes descargarte todo el ejemplo desde aqu Artculo por Pol Salvat
Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
16