<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog de Raúl Serrano &#187; ASP.NET</title>
	<atom:link href="http://www.raulserrano.net/tag/aspnet/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.raulserrano.net</link>
	<description>Blog sobre tecnología y de actualidad informática</description>
	<lastBuildDate>Thu, 02 Feb 2012 07:13:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Cómo redirigir .aspx a .php</title>
		<link>http://www.raulserrano.net/2008/10/como-redirigir-aspx-a-php/</link>
		<comments>http://www.raulserrano.net/2008/10/como-redirigir-aspx-a-php/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 05:29:17 +0000</pubDate>
		<dc:creator>Raúl S.</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Htaccess]]></category>
		<category><![CDATA[Redirect]]></category>
		<category><![CDATA[Rewrite]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.raulserrano.net/?p=214</guid>
		<description><![CDATA[Antes de gestionar este blog con WordPress, hice su desarrollo basado en ASP.NET pero cuando migré, en Febrero de 2007, al nuevo CMS se me [...]]]></description>
			<content:encoded><![CDATA[<p>Antes de gestionar este blog con <em>WordPress</em>, hice su desarrollo basado en ASP.NET pero cuando migré, en <a title="Ahora WordPress" href="http://www.raulserrano.net/2007/02/ahora-wordpress/">Febrero de 2007</a>, al nuevo <acronym title="Content Management System">CMS</acronym> se me quedó un asunto pendiente ¿cómo redirigir las páginas de los artículos? ya que utilizaban la <acronym title="Uniform Resource Locator">URL</acronym> del tipo <a title="Conexión VPN en Windows XP" href="http://www.raulserrano.net/articulo.aspx?id=505">http://www.raulserrano.net/articulo.aspx?id=505</a></p>
<p>Recientemente revisando el log de estadísticas observo que todavía hay algunos intentos de acceso a dichas URL&#8217;s antiguas por lo que generan error 404, así que me he propuesto ponerle solución definitiva para que sean redirigidas correctamente al nuevo enlace correspondiente:</p>
<ul>
<li>Añadiendo el siguiente código a la plantilla <em>header.php</em> de <a title="Sandbox - plaintxt.org" href="http://www.plaintxt.org/themes/sandbox/">Sandbox</a>, que es el tema utilizado en este blog.
<pre>
<code>
&lt;?php
if ($_GET['id']) {
switch ($_GET['id']) {
case '503' : <span style="color: #888">//Limpieza del sistema</span>
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.raulserrano.net/2004/01/limpieza-del-sistema/');
break;
case '504' : <span style="color: #888">//Escritorio remoto via web</span>
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.raulserrano.net/2003/12/escritorio-remoto-via-web/');
break;
}
}
?&gt;
</code></pre>
<p>Dichas líneas de código se sitúan al principio del archivo, por encima del DOCTYPE. Lo que hacen es comprobar si la URL está pasando algún parámetro, en concreto, si existe una variable denominada <strong>id</strong> que es la que utilizaba para enlazar a los articulos, en tal caso, una sentencia <kbd>switch</kbd> recorre los valores posibles y mediante una redirección en el header indicamos la nueva ubicación. Es más correcto hacer la redirección como pongo aquí ya que los motores de búsqueda entenderán que ha cambiado a una nueva URL y quedará indexada manteniendo su pagerank.</li>
<li>Aunque no era necesario, también he añadido una nueva regla al fichero <em>.htaccess</em><br />
<code>RewriteRule ^articulo.aspx /categoria/articulos/ [L,R=301]</code><br />
Asi puedo redirigir a la categoría <a title="Artículos" href="http://www.raulserrano.net/categoria/articulos/">Articulos </a> a aquellos que sólo escriban la URL sin pasar el parámetro de número de articulo <a title="Articulos" href="http://www.raulserrano.net/articulo.aspx">http://www.raulserrano.net/articulo.aspx</a></li>
</ul>
<p>De esta manera creo haber solventado el problema de redirección de páginas antiguas y no debería fallar ninguna. A día de hoy funcionan todas las redirecciones de las distintas nomenclaturas que ha tenido esta web habiendo pasado por un inicial .HTML puro, posterior ASP.NET y el actual .PHP</p>
]]></content:encoded>
			<wfw:commentRss>http://www.raulserrano.net/2008/10/como-redirigir-aspx-a-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sindicación RSS</title>
		<link>http://www.raulserrano.net/2005/12/sindicacion-rss/</link>
		<comments>http://www.raulserrano.net/2005/12/sindicacion-rss/#comments</comments>
		<pubDate>Mon, 12 Dec 2005 11:00:00 +0000</pubDate>
		<dc:creator>Raúl S.</dc:creator>
				<category><![CDATA[Articulos]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Feed]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://localhost/blog/?p=28</guid>
		<description><![CDATA[Tutorial sobre cómo generar automáticamente el feed RSS para la sindicación de contenido en una Web utilizando la tecnología .NET Se describe el método empleado [...]]]></description>
			<content:encoded><![CDATA[<p>Tutorial sobre cómo generar automáticamente el feed <acronym title="Really Simple Syndication – Sindicación Realmente Simple">RSS</acronym> para la sindicación de contenido en una Web utilizando la tecnología <em>.NET</em><br />
Se describe el método empleado en esta Web (antes de usar un <acronym title="Content Management System - Sistema de Gestión de Contenido">CMS</acronym> estándar) para generar automáticamente un archivo <em>RSS</em> que recoge las actualizaciones que se van publicando. Un método tan sencillo como útil que puede servir para implementar en tu Sitio Web.</p>
<p><span id="more-28"></span></p>
<p><em>RSS</em> se ha convertido en una utilidad muy habitual no solo en los <dfn title="Sitio web con publicacoines periódicas y ordenados cronologicamente, temática particular">blog’s</dfn> sino también en muchos portales de noticias y demás Web’s<br />
Si necesitas profundizar sobre <em>RSS</em>, ojea los enlaces al final de este artículo o a través de Internet es muy fácil encontrar amplia información.</p>
<p>Una breve descripción de la terminología que engloba este servicio, seria la siguiente:</p>
<ul>
<li>Feed: conjunto de información que se pretende distribuir.</li>
<li>RSS (Really Simple Syndication – Sindicación Realmente Simple): formato basado en el estándar <acronym title="eXtensible Markup Language ">XML</acronym> en el que se distribuye el feed.</li>
<li>Sindicar contenido: proceso mediante el que un software cliente RSS obtiene el feed</li>
<li>Aggregator: software cliente RSS, como <a class="ext" title="Descarga RSSBandit" href="http://www.rssbandit.org">RSSBandit</a> o <a title="Descarga NewsDesk" href="http://www.wildgrape.net">NewsDesk</a></li>
</ul>
<p>Y tras esta rápida reseña vamos al tema que nos ocupa.</p>
<p>Mantener un archivo .rss de manera manual con las nuevas actualizaciones que vamos publicando, es tarea fácil para un pequeño Sitio Web, pero si esas actualizaciones son frecuentes, o se trata de una Web algo más grande, esa tarea se convierte en un proceso algo tedioso.</p>
<p>Cuando decidí incorporar <em>RSS</em> a esta Web, dado mí bajo nivel en programación, en principio era mi intención hacerlo de manera manual, ya que la estructura de un archivo .RSS es realmente sencilla, aparte que soy bastante cabezota y de los que aun pica <acronym title="HyperText Markup Language - Lenguaje de Marcas Hipertextuales">HTML</acronym> &#8220;a pelo&#8221;.<br />
Pero, analizando un poco la estructura de mi Web, documentándome sobre el soporte <acronym title="eXtensible Markup Language ">XML</acronym> de <dfn title="Tecnologia sucesora de Active Server Pages, basada en plataforma .NET">ASP.NET</dfn> y poco más, pronto me di cuenta que no era tan difícil automatizar totalmente este proceso, por lo que básicamente sería:</p>
<ul>
<li>Mediante la clase <a class="ext" title="XmlTextWriter (Clase)" href="http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpref/html/frlrfsystemxmlxmltextwriterclasstopic.asp">XmlTextWriter</a> generar el contenido <em>XML</em> con el esquema que <em>RSS</em> necesita.</li>
<li>Crear un <a class="ext" title="Crear y utilizar DataSets" href="http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpguide/html/cpconcreatingusingdatasets.asp">DataSet</a> con el contenido de la tabla de anuncios (ahí guardo los posts que aparecen en la página principal de esta Web)</li>
<li><em>XmlTextWriter</em> debe iterar sobre el <em>DataSet</em> para crear los correspondientes Ítems</li>
<li>Por último mostrar los resultados en formato <em>XML</em>.</li>
</ul>
<p>Conociendo el planteamiento veamos el código generado para ello con los comentarios sobre el mismo:</p>
<pre>
<code>Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
<span style="color:#888">'Declara el escritor</span>
Dim Escritor = New XmlTextWriter(Response.OutputStream, System.Text.Encoding.UTF8)

<span style="color:#888">'Genera el encabezado del archivo RSS con la información de nuestro Sitio Web</span>
Escritor.WriteStartDocument()
Escritor.WriteComment("www.raulserrano.net - RSS generado automáticamente")
Escritor.WriteStartElement("rss")
Escritor.WriteAttributeString("version", "2.0")
Escritor.WriteStartElement("channel")
Escritor.WriteElementString("title", "www.raulserrano.net")
Escritor.WriteElementString("link", "http://www.raulserrano.net")
Escritor.WriteElementString("description", "Portal sobre tecnologias Microsoft y actualidad informática")

<span style="color:#888">'Conecta a la BD y vuelca los datos a un DataTable</span>
Dim Conexion As OleDbConnection
Dim Comando As OleDbDataAdapter
Dim ds As DataSet
Dim tblPost As DataTable
Dim registro, numrows As Integer
Dim strSQL As String

strSQL = "SELECT titulo, link, descripcion, fecha FROM posts ORDER BY fecha_pub DESC;"
Conexion = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=x:\archvo.mdb")
Comando = New OleDbDataAdapter(strSQL, Conexion)
ds = New DataSet
Comando.Fill(ds)
tblPost = New DataTable
tblPost = ds.Tables(0)
numrows = tblPost.Rows.Count

<span style="color:#888">'Itera por el DataTable para crear los correspondientes Items</span>
For registro = 0 To numrows - 1
AgregarRSS(Escritor, tblPost.Rows(registro).Item("titulo"), _
tblPost.Rows(registro).Item("link"), _
tblPost.Rows(registro).Item("descipcion"), _
tblPost.Rows(registro).Item("fecha"))
Next registro

<span style="color:#888">'Finaliza el archivo RSS</span>
Escritor.WriteEndElement()
Escritor.WriteEndElement()
Escritor.WriteEndDocument()
Escritor.Flush()
Escritor.Close()

<span style="color:#888">'Codifica y envía el archivo RSS</span>
Response.ContentEncoding = System.Text.Encoding.UTF8
Response.ContentType = "text/xml"
Response.Cache.SetCacheability(HttpCacheability.Public)
Response.End()
End Sub

Public Function AgregarRSS(ByVal Escritor As XmlTextWriter, ByVal titulo As String, ByVal link As String, ByVal descripcion As String, ByVal fecha As String)
<span style="color:#888">'Crea un nuevo elemento</span>
Escritor.WriteStartElement("item")

<span style="color:#888">'Añade subelementos</span>
Escritor.WriteElementString("title", titulo)
Escritor.WriteElementString("link", link)
Escritor.WriteElementString("description", descripcion)
Escritor.WriteElementString("pubDate", fecha)

<span style="color:#888">'Finaliza el elemento</span>
Escritor.WriteEndElement()
Return Escritor
End Function
</code>
</pre>
<p><strong>Más información</strong></p>
<p>Para la realizar este artículo me he basado en la documentación disponible en Internet, especialmente útil el artículo de Carlos Carmona de <a class="ext" title="Diseño de páginas web, Diseño gráfico, Artículos y Tutoriales - xhtml, css, W3C!" href="http://www.scourdesign.com/">Scour Design</a>:</p>
<p><a class="ext" title="RSS 2.0 Dinámicamente. XmlTextWriter (Visual C#)" href="http://www.scourdesign.com/articulos/tutoriales/net/5.php">RSS 2.0 Dinámicamente. XmlTextWriter (Visual C#)</a></p>
<p>Documentación adicional:</p>
<ul>
<li><a class="ext" title="Todo acerca de Blogs y RSS" href="http://www.microsoft.com/spanish/msdn/articulos/archivo/070404/voices/blogs_rss.asp">Todo acerca de Blogs y RSS</a></li>
<li><a class="ext" title="How to Create an RSS Feed With Notepad, a Web Server, and a Beer" href="http://www.downes.ca/cgi-bin/page.cgi?db=post&amp;q=crdate=1059503386&amp;format=full">How to Create an RSS Feed With Notepad, a Web Server, and a Beer</a></li>
<li><a class="ext" title="MSDN Library: XmlTextWriter (Clase)" href="http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpref/html/frlrfsystemxmlxmltextwriterclasstopic.asp">MSDN Library: XmlTextWriter (Clase)</a></li>
<li><a class="ext" title="MSDN Library: Crear y utilizar DataSets" href="http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpguide/html/cpconcreatingusingdatasets.asp">MSDN Library: Crear y utilizar DataSets</a></li>
<li><a class="ext" title="MSDN Library: Agregar DataTable a DataSet" href="http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpguide/html/cpconaddingdatatabletodataset.asp">MSDN Library: Agregar DataTable a DataSet</a></li>
<li><a class="ext" title="CÓMO: Llenar un objeto DataSet desde una base de datos mediante Visual Basic .NET" href="http://support.microsoft.com/default.aspx?scid=kb;es;301216">CÓMO: Llenar un objeto DataSet desde una base de datos mediante Visual Basic .NET</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.raulserrano.net/2005/12/sindicacion-rss/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

