Ahora que, con la ayuda de Alex, estamos revisando la capa de datos de DinnerNow que esta implementada integramente con LINQ, me puse a buscar entre mis cosas y encontre un documento que me dieron en el MVP Summit 2005 y que lo hice autografiar con el mismo Anders Hejlsberg , a las pruebas me remito :)

Ademas en Junio del 2006 asisti al TechEd donde en una excelente charla, Luca Bolognese hacia una comparacion entre lo lindo que es programar con C# o VB.NET donde se tiene las capacidades de un lenguage Orientado a Objetos, un depurador, intellisense, el object browser y es como navegar en el mar calmado bajo el sol radiante y de pronto el programador se encuentra con bases de datos relacionales o XML y es como que el mar se comienza a agitar, se oculta el sol y comienza a llover, ya no hay mas lenguaje Orientado a Objetos ya no hay mas intellisense ni depurador, se perdio el encanto.
LINQ viene a devolver esa "alegria" al programador al proporcionarle a las caracteristicas de su lenguaje (C#, VB.NET) capacidades de trabajar con datos manteniendo la sintaxis del lenguaje de programacion y abstrayendo la complejidad de lidiar con SQL o XML directamente.
En un link posterior estaremos comentando cosas mas tecnicas de LINQ y sobre todo como se utilizo para implementar la capa de datos de la aplicacion en estudio.
Es domingo por la noche y no queria irme a dormir sin postear luego de bastante tiempo, actividades propias del trabajo entre consultorias, dictado de clases y charlas me han tenido algo ocupado pero siempre pensando en que debo seguir manteniendo el blog y sobre todo colocar informacion que sea de utilidad para los interesados en la plataforma .NET.
Pues bien, este post no contiene informacion muy util :) sino mas bien comentarles en que ando y las cosas sobre las que posiblemente estare escribiendo en los siguientes dias.
Estoy preparando un curso oficial de Biztalk Server 2006 con Ruben (Porras) y aunque ando atrazado en esto, alcanzare a colocar algun post sobre este tan interesante producto para BPM, ESB, EAI, y SOA.
Seguire desarrollando la guia para el examen de Team Foundation Server que aun no libera Microsoft en su version final, de hecho estoy por iniciar unas consultorias para implantaciones de Visual Studio Team System en importantes empresas del medio asi que ya estare comentando las experiencias, ademas el Jueves 26 sere expositor de un evento sobre ALM en Microsoft Peru teniendo como base para esto a Visual Studio Team System.
Junto con Alex, quien gentilmente me esta apoyando en investigacion, estamos viendo la aplicacion de distintas tecnologias Microsoft recientes, ademas de las que vienen con el .NET Framework 3.0 (WPF, WWF, WCF y CardSpace), toda la capa de datos con LINQ, otras tecnologias en Windows Vista como Powershell y Gadgets, ademas de IIS 7. Tomando como base una interesante aplicacion creada por un equipo de especialistas de Microsoft y llamada DinnerNow.NET. Esta aplicacion la presentamos ya en un evento el TechNET Peru el Sabado 14 en un overview sobre el .NET Framework 3.0, el siguiente paso es ahora dar otras charlas donde se muestre mas detalles de la arquitectura e implementacion de DinnerNow.NET.
Hace unos días me llamaron para pedirme que haga una charla de ASP.NET AJAX el 31 de Marzo fuera de Lima. Me sorprendió un poco la convocatoria pero de algún modo me agrado el poder seguir aportando en lo que más me gusta que es la tecnología.
Habiendo sido un espectador pasivo de cómo iba evolucionando "Atlas" (Codename de ASP.NET AJax) durante su fase beta, desde principios de año estoy viendo mas detalles de algo que no considero novedoso conceptualmente hablando, pero si desde el punto de vista de cómo la tecnología ha madurado gracias a aporte de estándares.
ASP.NET Ajax es un nuevo framework de Microsoft para crear aplicaciones web más sofisticadas aprovechando el "lado-cliente" y fue liberado en Enero pasado. Hay que tener en cuenta que ASP.NET 2.0 es un framework del lado-servidor, es decir, cada vez que se requería cierta funcionalidad de ASP.NET 2.0 se tenía que hacer un POST al servidor para ejecutar el código lo cual causaba un "refresh" de la pagina entera, algo que se intenta evitar, dependiendo del caso, con la introducción de este nuevo actor en el escenario del desarrollo web, ósea ASP.NET Ajax, con el principal beneficio ahora de no depender de un Browser en particular (digamos IE) sino que es cross-platform y cross-browser.
En lugar de comenzar a hablar de la arquitectura de ASP.NET Ajax y mostrar ejemplos de código, prefiero hablar de las cosas que conoci y utilice antes para hacer Aplicaciones Web del lado-cliente más ricas.
Por ejemplo, Remote Scripting (1998) utilizaba script del lado cliente para comunicarse con un applet de java el cual mediante un socket enviaba una solicitud hacia un URL remoto que era una página ASP que representaba la capa-servidor de Remote Scripting, en este caso el valor de retorno era un string que era procesado en el cliente, haciendo una actualización dinámica del contenido mediante scripting.
Casi por la misma época se comenzó a utilizar Remote Data Services (RDS) que, al igual que Remote Scripting, tenia un componente cliente (proxy) y un componente servidor (stub) solo que todo esto estaba basado en COM sobre HTTP. Utilizando Script desde una pagina HTML podía conectarme al servidor y hacer consultas a la base de datos.
Recuerdo haber utilizado esto junto con los famosos (por aquella época) "Data Islands" que se creaban en base a un contenido XML y utilizando un Data Source Object (DSO) se podría presentar en una pagina contenido con distintos filtros u ordenamientos sin necesidad de hacer llamadas adicionales al servidor eliminando la "recarga" de la pagina.
Si les interesa saber detalles de cómo funcionaba todo esto puede ver Data Binding Architecture.
En la década del 2000 aparecerían los DHTML Behaviors. Usando un tipo especial de behavior, el Web Service DHTML Behavior (webservice.htc) se podía hacer una invocación a métodos remotos vía el protocolo SOAP (requerían de IE 5.0 o posterior)
Si desean ver un ejemplo de este Behavior haga click en Consuming a Web Service from an HTML Page.
Luego tendríamos al objeto XmlHttpRequest, este objeto fue desarrollado originalmente por Microsoft como parte de Outlook Web Access 2000, y ha estado disponible desde Internet Explorer 5.0, siendo accesible via JavaScript, VBScript y otros lenguajes soportados por navegadores IE. Se usa para transferir y manipular datos XML hacia y desde el navegador web, estableciéndose un canal de comunicación independiente entre el lado-cliente, de la pagina web, y el servidor.
Desde el 2002, otros navegadores comenzaron a tener sus propias implementaciones compatibles con el XmlHttpRequest, por ejemplo Mozilla, Safari, Opera, etc. El objeto XMLHttpRequest es una parte fundamental de la técnica de desarrollo web conocida como AJAX (Asynchronous JavaScript And XML) , y es usada en muchos sitios web para implementar aplicaciones dinámicas e interactivas como el servicio Gmail de Google, Meebo, Virtual Earth de Microsoft, y los mapas de MapQuest..
Finalmente el consorcio Web, entidad que norma los estándares internet, publico una especificación del objeto XmlHttpRequest para ayudar a mejorar y asegurar la inteoperabilidad del código en las diferentes plataformas Web.
Cuando salió ASP.NET 2.0, este vino con una API denominada ASP.NET Script Callback que proporcionaba la habilidad de ejecutar llamadas asíncronas sin dejar la pagina actual; sin embargo el modelo de programación no es muy completo para tareas complejas, además que el código no es muy fácil de leer y mantener para desarrolladores sin experiencia avanzada.
El equipo de producto de ASP.NET comienza, entonces, a trabajar en un framework como extensión de ASP.NET 2.0 que permita a los desarrolladores crear, de una manera más sencilla, aplicaciones Web interactivas tomando ventaja de las características del browser y el servidor, es así como comienza la historia de ASP.NET "Atlas", hoy conocido como ASP.NET Ajax.
Unas de las cosas que me encantan de las tecnologías Microsoft es el siempre están a la vanguardia, innovando, muchas veces acusados de "copiar" ideas, aunque creo que en el caso del objeto XmlHttpRequest no pueden decir aquello. Yo lo veo de otro modo, lo más importante es como todo eso contribuye a lograr soluciones de valor para las empresas, reduciendo costos y llegando al mercado más rápidamente, que son algunos requerimientos que recojo de las empresas que me toca visitar a diario.
Tengo que dar una charla en Abril sobre el .NET Framework 3.0 sobre Windows Vista para profesionales de TI y quiero preparar algo que integre las cuatro caracteristicas nuevas en el .NET Framework 3.0 osea WPF, WCF, WWF y CardSpace
En la busqueda de recursos que me sirvan para tal proposito encontre el .NET Framework 3.0 training kit for WF, WCF and CardSpace se los recomiendo, lo pueden descargar desde aqui.
Este material formó parte del Windows Server Ascend Training, estos cursos son muy buenos a nivel de entender tempranamente sobre la visión e implementación de nuevas herramientas, estuve el año 2005 en Redmond para el Ascend de VSTS y fue una experiencia muy interesante, Ronald posteo en su blog la informacion de aquella epoca :)
(1) Implementando una Lista Global
Se puede compartir un lista (de elementos) a través de múltiples tipos de Work Items incluyendo la lista (de elementos) en uno o mas elementos GLOBALLIST.
Una Lista Global es un conjunto de elementos LISTITEM que puede ser almacenado y usado por todos los proyectos y servidores en una implementación de Team Foundation Server. Cada elemento GLOBALLIST debe tener al menos un elemento LISTITEM definido.
Las Listas Globales pueden ser utiles especialmente cuando una lista debe obtenerse a desde otro sistema. Por ejemplo, supongamos que una compañía mantiene una base de datos separada para algunas definiciones estandar de su metodologia (que es compartida a través de multiples sistemas), la lista de Disciplinas (en un campo del Work Item) debe ser actualizada periodicamente desde una fuente de datos externa.
Se pueden usar los comandos glimport y glexport para actualizar las listas globales de Team Foundation Server con los valores actuales de una base de datos y luego en un campo de un tipo de Work Item (por ejemplo Disciplinas) se hace referencia a dicha lista global.
En la figura se muestra un posible esquema de solución de lo descrito anteriormente:
Veamos los pasos a seguir para implementar una lista Global (se requiere ser Administrator de Team Foundation Server para trabajar con Listas Globales) :
a) Se debe crear el archivo XML con la definicion de los elemento de la lista Global (este puede ser generado a partir de una base de datos a través de algun programa)
<?xml version="1.0" encoding="utf-8"?>
<gl:GLOBALLISTS xmlns:gl="http://schemas.microsoft.com/VisualStudio/2005/workitemtracking/globallists">
<GLOBALLIST name="Disciplinas">
<LISTITEM value="Requerimientos Iniciales" />
<LISTITEM value="Analisis" />
<LISTITEM value="Diseno" />
<LISTITEM value="Desarrollo" />
<LISTITEM value="Pruebas" />
<LISTITEM value="Estabilizacion" />
<LISTITEM value="Implantacion" />
</GLOBALLIST>
</gl:GLOBALLISTS>
b) Grabar el archivo con el nombre Disciplinas.XML, en el directorio <drive>:\Program Files\Microsoft Visual Studio 8\Common7\IDE
c) Desde el mismo directorio anterior ejecutar:
glimport /f Disciplinas.xml /t "TFSRTM"
TFSRTM es, en nuestro caso, el nombre del servidor Team Foundation
d) Mostrar la lista global de TFS para comprobación:
glexport /t "TFSRTM"
Debe mostrarse una lista tal como:
<?xml version="1.0" encoding="utf-8"?>
<gl:GLOBALLISTS xmlns:gl="http://schemas.microsoft.com/VisualStudio/2005/workite
mtracking/globallists">
<GLOBALLIST name="Builds - ReportSample">
<LISTITEM value="Debugx86_20060513.1" />
...
</GLOBALLIST>
<GLOBALLIST name="Builds - Module09">
<LISTITEM value="VersionTask_20060807.1" />
...
</GLOBALLIST>
...
<GLOBALLIST name="Disciplinas">
<LISTITEM value="Requerimientos Iniciales" />
<LISTITEM value="Analisis" />
<LISTITEM value="Diseno" />
<LISTITEM value="Desarrollo" />
<LISTITEM value="Pruebas" />
<LISTITEM value="Estabilizacion" />
<LISTITEM value="Implantacion" />
</GLOBALLIST>
</gl:GLOBALLISTS>
e) Ejecutar witexport para exportar el tipo "Task" de Work Items.
witexport /f "TaskModified.xml" /t "TFSRTM" /p "TicTacToe" /n "Task"
"TFSRTM" es el nombre del servidor Team Foundation, "TicTacToe" es el nombre del Team Project. "Task" es el tipo de WorkItem.
Al finalizar, debe aparecer el mensaje:
Work item type export complete.
f) En el archivo TaskModified.xml, cambiar el elemento :
<FIELD name="Discipline" refname="Microsoft.VSTS.Common.Discipline" type="String" reportable="dimension">
<HELPTEXT>The discipline to which the task belongs</HELPTEXT>
<ALLOWEDVALUES expanditems="true">
<LISTITEM value="Development" />
<LISTITEM value="Test" />
<LISTITEM value="Project Management" />
<LISTITEM value="Requirements" />
<LISTITEM value="Architecture" />
<LISTITEM value="Release Management" />
</ALLOWEDVALUES>
</FIELD>
Debe verse de esta forma:
<FIELD name="Discipline" refname="Microsoft.VSTS.Common.Discipline" type="String">
<HELPTEXT>The discipline to which the task belongs</HELPTEXT>
<ALLOWEDVALUES>
<GLOBALLIST name="Disciplinas" />
</ALLOWEDVALUES>
</FIELD>
g) Importar los cambios a la definicion del WorkItem
witimport /f "TaskModified.xml" /t "TFSRTM" /p "TicTacToe"
h) Desde el Team Explorer refrescar el proyecto "TicTacToe"
i) Agregar un WorkItem de tipo Task
j) Verificar que se han actualizado los elementos de Disciplinas:
Pueden encontrar mayor información en:
Visual Studio Team System Global Lists
Populating Lists on Work Items from an External Source
(2) Modificando Propiedades mediante el uso de Web Services
Estableciendo el tamaño maximo de adjuntos para Work Items
Por defecto los adjuntos (Attachments) en un Work Item no pueden exceder de 4MB. Supongamos que desea crear un Work Item de tipo Bug con varias imagenes adjuntas que superan los 4MB, en estos casos necesitara modificar la configuracion de Team Foundation para ampliar el tamaño maximo de los adjuntos.
Los pasos son los siguientes:
a) En el Servidor de Aplicacion de TFS, navegar hacia:
http://localhost:8080/WorkItemTracking/v1.0/ConfigurationSettingsService.asmx
Se mostrará la siguiente pagina:
b) Si lo requiere, haga Click en GetMaxAttachmentSize para obtener el tamaño maximo actual (por defecto es 4194304 bytes)
c) Haga Click en SetMaxAttachmentSize, y especifique el tamaño en bytes (hasta un maximo de 2GB) y haga click en invoke.
Estableciendo el intervalo de procesamiento para los datos del warehouse
En Team Foundation Server los datos del warehouse se actualizan en un proceso que se ejecuta periodicamente cada hora. Normalmente notara un incremento en el uso de la CPU mientras se esta ejecutando el proceso.
Puede cambiar el intervalo de ejecución en la capa de aplicacion siguiendo los siguientes pasos:
a) Parar el servicio TFSServerScheduler usando 'net stop TFSServerScheduler'
b) Ir a http://localhost:8080/Warehouse/warehousecontroller.asmx utilizando un browser en la capa de aplicacion.
Se mostrará la siguiente pagina:

c) Haga click en ChangeSetting e ingrese los siguientes valores y luego presione el boton 'Invoke' (3600 segundos = ejecuta cada hora).

d) Reinicie TFSServerScheduler usando 'net start TFSServerScheduler'
Tambien puede ejecutar el proceso de carga del warehouse manualmente haciendo utilizando el metodo 'Run' desde http://localhost:8080/Warehouse/warehousecontroller.asmx
Al actualizar los datos del warehouse, se refrescara la informacion de los reportes.
Siempre que voy a viajar me gusta reconocer el terreno (y sus alrededores), si hay un mapa mejor. Cuando viajo a USA, reviso mi software Microsoft Streets & Trips, pero esta vez se me ocurrió revisar los mapas en live.com y la verdad me impresiono la vista en 3D que tiene. Por ejemplo el TechEd 2007 se realizara en el Orange County Convention Center en Orlando, FL.
El mapa como plano en 2D, en el formato que solemos usar hoy en día, se vería así:
El mismo mapa pero en vista fotográfica desde arriba:
Si aplicamos 3 dimensiones podemos acercarnos más y conocer el Orange County Convention Center :)
Bueno ahora que ya conozco donde será el TechEd 2007, luego me toca revisar sus alrededores para familiarizarme con el lugar y también la ubicación de los hoteles del evento.
No, no he olvidado de postear sobre TFS ni otros temas sobre la plataforma Microsoft ya pronto sale el siguiente articulo :)
En 3Dev hemos decidido poner a disposicion de profesionales de sistemas, estudiantes, comunidades y publico en general, los materiales que hemos venido utilizando durante el 2006, en entrenamiento interno y nuestros principales clientes.
Esperamos les sean de utilidad. Pueden bajar los materiales gratuitamente desde:
http://www.3devnet.com/download.aspx
No suelo hablar de cosas personales, pero en este caso tienen que ver con mi experiencia diaria, ademas como vi que el chino Fong puso "Guino ha revivido" comence a pensar que efectivamente el blog esta no solo para escribir articulos tecnicos sobre experiencias de trabajo, sino tambien para comentar cosas que a uno le pasan en estos menesteres de la informatica.
Como dice el dicho "Tras cuernos palos", la semana pasada habia ya cancelado mi viaje al MVP Summit, evento mundial de los MVPs al cual he venido asistiendo los ultimos 4 años, y cuando ya me estaba recuperando de la tristeza, el Sabado muere mi disco duro externo con casi 150GB de informacion y del cual solo tenia 4GB de la data mas importante como backup. Es una de las peores cosas que le puede suceder a una persona relacionada con la informatica perder su valiosa informacion.
Despues de consultar con varios amigos (gracias Ruben, Percy, Roberto y Ddaz) las esperanzas de recuperar mi data regresaron y con ello parte de mi alma. Encontre una herramienta llamada getdataback, con la que pude ver mi informacion y ahora solo espero comprarme un disco duro externo nuevo esta semana y comenzar a rescatar la data, cuando haya terminado con eso volvera mi alma completamente al cuerpo. ![Smile [:)]](/emoticons/emotion-1.gif)
Bueno y continuando con los dichos, hay otro que dice "No hay mal que por bien no venga", asi que el Domingo pude ver con alegria que a traves del programa MVP, al cual le estoy bastante agradecido por los beneficios que brinda (Gracias Fer y Nestor), a los MVPs nos toco un descuentazo para incribirse al TechEd 2007 en Orlando, FL, durante el 4 al 8 de Junio, asi que ya me incribi y alli estare!, mas aun que tambien estoy postulando a ser MCT Ambassador por el programa Microsoft Certified Trainer (la ventaja de ser MVP y MCT :) y a lo mejor me sale parte de las cosas gratis ![Wink [;)]](/emoticons/emotion-5.gif)
Por las exigencias propias del programa MCT tengo que dar mi examen 70-431 de SQL Server 2005, asi que pronto estare posteando articulos y tips de SQL Server (lo manejo desde la version 6.5) que les pueda servir tambien para el examen, ademas seguire posteando articulos de Team Foundation Server para el examen 70-510.
Una vez instalado Team Foundation Server y habiendo verificado la misma, veamos algunos aspectos iniciales de configuracion:
(1) Configurando Alertas
En lugar del tedioso trabajo de enviar E-mail manualmente cuando liberamos una nueva version o hacemos check-in de cambios en el codigo, en Team Foundation Server se puede configurar alertas de proyecto para enviar esos tipos de E-mails automaticamente via el menú Team->Project Alerts.
Hay cuatro opciones de notificacion via E-mail disponibles en una instalacion por defecto en Team System, estas son:
Alert when my work items are changed by others
Alert when anything is checked in
Alert when the build status changes
Alert when a build completes
Normalmente se envia notificaciones a un alias de grupo tal como: teamdevelopers@3devnet.com, pero tambien puede ser enviado a un correo en particular como se muestra en la figura:
Veamos una muestra de como se recibiria el E-mail de notificacion:
Si requiere una suscripcion personalizada, puede utilizar la herramienta BisSubscribe.exe del servidor (<Program Files>\Microsoft Visual Studio 2005 Team Foundation Server\TFSetup>BisSubscribe.exe). Por ejemplo en la siguiente expresion de filtro, solo los nuevos cambios generaran E-mails:
BisSubscribe.exe /userId <domain\username> /eventType WorkItemChangedEvent /deliveryType EmailHtml /domain <server name> /address <email address> /filter "PortfolioProject = '<project>' AND ChangeType = 'New' "
(2) Configurando Team Foundation Server para acceso extranet
La version inicial de Visual Studio Team Foundation Server solo soporta Autenticacion Integrada con Windows, la cual permite a los cliente utilizar sus credenciales de Windows para acceder a la funcionalidad de Team Foundation Server.
La Autenticacion Integrada con Windows es una buena alternativa para escenarios en un entorno corporativo, sin embargo no es la mejor alternativa en escenarios Internet donde los proxy servers y firewalls pueden limitar el uso de este tipo de autenticación.
Actualmente solo se soporta conexiones remotas a TFS a través de una red privada virtual (VPN) debido a las limitaciones de usar Autenticacion Integrada con Windows para escenarios Internet. Esto no significa que no pueda acceder a TFS a traves de internet, sino que puede usar una VPN si tiene que acceder a TFS fuera de la intranet local.
Team Foundation Server Service Pack 1 puede soportar modos de autenticacion Basic y Digest ademas configurando el despliegue de TFS para usar HTTPS con Secure Sockets Layer (SSL) y autenticacion Basic o Digest, se puede soportar conexiones externas al servidor TFS sin tener que utilizar una conexion VPN.
En la siguiente figura se muestra como configurar el metodo de autenticación desde IIS.
Puede encontrar mas informacion en:
Limitations on access to Visual Studio Team Foundation Server over the Internet
Team Foundation Server, Basic Authentication, and Digest Authentication
(3) Configurando opciones en tiempo de ejecución de TFS
La informacion de configuracion de Team Foundation Server esta contenida en varios archivos web.config. El archivo de configuracion global se encuentra en: \Program Files\Microsoft Visual Studio 2005 Team Foundation Server\WebServices\web.config, sin embargo dentro de dicho directorio se pueden encontrar carpetas por cada componente de Team Foundation (Build, Services, VersionControl, etc) cada una conteniendo su propio web.config.
Se puede modificar directamente los archivo s web.config o tambien se puede hacer desde el Internet Information Server 6.0.
(4) Habilitando el tracing para los componentes de Team Foundation Server
Se puede cambiar el directorio de salida para los archivos de trace de los componentes de TFS editando el web.config de dicho componente.
Desde Internet Information Server 6.0 se puede hacer accediendo a Administrador de IIS (inetmgr) y luego expandiendo "Web Sites" y finalmente "Team Foundation Server".
Luego tiene que hacer doble-click sobre el archivo web.config que se encuentra en la raiz o dentro de cada componente de TFS, se mostrara el cuadro ASP.NET Configuration Settings:
(5) Habilitando el rastreo de actividad (activity logging)
Los creadores de TFS disenaron un mecanismo para registrar la actividad de los metodos web para todas las aplicaciones web de Team Foundation.
No se proporciona forma de obtener dicha data, sin embargo desde la capa de datos se puede escribir consultas SQL para ver que estan haciendo las aplicaciones Web de TFS.
El rastreo de actividad es controlada por una configuracion en el archivo web.config de cada componente de TFS. La configuracion por defecto desahbilita el Logging pero es simple habilitarlo.
En el archivo de configuracion que se encuentra en %ProgramFiles%\Microsoft Team Foundation 2005\Web Services\Web.config o en el .config de cada componente revisar por commandLogging, dentro de AppSettings, como se muestra a continuación.
<!-- WEB METHOD LOGGING
Specify whether web methods are to be logged always, never, or only
when errors occurs. Without a value for commandLogging, web methods
are not logged. Valid values are:
None (web methods are never logged)
Normal (log everything, except certain high-frequency web methods)
All (log everything, even certain high-frequency web methods)
OnError (only log web methods that have errors)
Values specified here take precedence over values set administratively via
web method.
-->
<add key="commandLogging" value="None"/>
Si se cambia el CommandLogging a, por ejemplo "Normal", todos los comandos seran rastreados en la base de datos TFSActivityLogging.
Para ver la informacion del Log tendra que ejecutar un Query tal como "select * from tbl_Command" sobre la base de datos TFSActivityLogging de SQL Server.
El Log es utilizado para distintos propositos incluyendo el calculo de la carga y tambien determinar el patrón de uso de TFS.
Mas informacion en Snooping into TeamSystem activity logging
(6) Configurando el tamaño y ubicacion de la cache web
El cache de archivos, en la capa de aplicacion de TFS, esta habilitado por defecto y permite mejorar el rendimiento ya que los archivos se obtienen del cache el lugar de acceder directamente a la base de datos.
Es posible cambiar la configuracion del cache de archivos,editando el archivo web.config que se encuentra localizado por defecto en …\Program Files\Microsoft Visual Studio 2005 Team Foundation Server\Web Services\VersionControl
Por ejemplo se puede cambiar la ubicacion de la carpeta del cache mediante la opcion:
<add key="fileCacheRoot" value="NewCacheRootFolderLocation" />
Por defecto esta carpeta esta en …\Program Files\Microsoft Visual Studio 2005 Team Foundation Server\Web Services\VersionControl\Data
Se puede especificar un limite en la cantidad de espacio de almacenamiento que la capa de aplicacion utiliza para el cache de archivos, cuando se alcanza este limite los archivos antiguos en el cache son eliminados dejando espacio libre para colocar en dicho cache los archivos recientemente requeridos. Los archivos se eliminan basados en la fecha y hora en que fueron accedidos, los que no hayan sido accedidos por mayor tiempo son eliminados primero.
El siguiente ejemplo especifica que el cache debe llenarse hasta un 60% de la capacidad de espacio disponible en disco antes de remover archivos anteriores:
<add key="CacheLimitPercent" value="60" />
Tambien puede especificar un tamaño fijo en MB con el elemento <add key="CacheLimit">
Si instalo Team Foundation Server Proxy tambien puede habilitar el cache, para esto ubique la carpeta de instalacion del Servidor Proxy, por defecto es …\Program Files\Microsoft Visual Studio 2005 Team Foundation Server\Web Services\VersionControlProxy, y abra el archivo Proxy.config.
Especifique el servidor TFS y el puerto de comunicacion entre el servidor proxy y la capa de aplicacion de TFS, por ejemplo:
<Server>
<Uri>http://ApplicationTierServerName:8080/VersionControl</Uri>
</Server>
La comunicacion entre la capa de aplicacion de TFS y el servidor proxy es normalmente a traves de una WAN y entre los clientes y el servidor proxy a traves de una LAN.
Para configurar Visual Studio 2005 de modo que pueda usar un Team Foundation Proxy server, elija el menú Tools->Options->Source Control->Visual Studio Team Foundation Server. En la figura se muestra un ejemplo de configuración:
El puerto 8081 es el puerto por defecto diseñado para comunicación entre el cliente y el Team Foundation Server Proxy.
Para comprobacion, luego de haber seguido los pasos anteriores, realice un Check-out de un archivo desde el explorador del controlador de versiones, si no hay errores se debe mostrar algunas carpetas nuevas y archivos en “%program Files%\Microsoft Visual Studio 2005 Team Foundation Server\Web Services\VersionControlProxy\Data\<guid>” en el servidor proxy.
Tambien puede utilizar Internet Explorer y, desde el proxy server, navegar hacia http://localhost:8081/VersionControlProxy/v1.0/ProxyStatistics.asmx , luego comprobar si se muestran valores distintos a cero en los contadores de performance.
Puede encontrar mas informacion en How to: Configure Team Foundation Source Control to use Proxy Server
Luego de instalado Team Foundation Server nos tocaria verificar que todo esta Ok para lo cual se recomienda seguir los siguientes pasos:
(1) Examinar el Registro de la Instalación (Log)
Luego de concluido el proceso de instalacion, se crearan archivos de Registro o log (conteniendo la lista de operaciones realizadas) dentro de la ruta de instalacion (C:\Program Files\Microsoft Visual Studio 2005 Team Foundation Server\) SOLO si la instalacion se completo satisfactoriamente, de lo contrario estaran en el directorio C:\Documents and Settings\TFSSETUP\Local Settings\Temp, los archivos tienen prefijo dd_*.*.
Adicionalmente a los archivos de Registro, en el Visor de Eventos (Panel de Control), se registran los eventos de instalacion capturados durante el proceso de instalacion, recomiendo revisarlo porque siempre he logrado identificar problemas desde alli.
(2) Verificar los componentes de la base de datos
Verifique que en SQL Server 2005 se hayan creado las Bases de datos que se muestran en la figura:
ReportServer: La base de datos de Reporting Services que contiene los reportes y configuracion de los mismos para Reporting Services.
ReportServerTempDB: La base de datos temporal de Reporting Services es usada para almacenamiento de informacion temporal utilizada para ejecutar reportes especificos para reporting services.
STS_Config_TFS: La base de datos de configuracion de Sharepoint contiene informacoin de instalacion y configuracion para el sitio Team project de Sharepoint.
STS_Content_TFS : La base de datos de contenido de Sharepoint contiene el contenido actual en el site de Sharepoint del Equipo.
TfsBuild: La base de datos build contiene data de builds (Team Foundation Build) y resultados de pruebas publicadas.
TfsIntegration: Proyectos, Areas, Iteraciones y otros datos de registro.
TfsVersionControl: La base de datos del Control de codigo fuente de Team Foundation
TFSWarehouse: La base de datos de Analysis Services
TfsWorkItemTracking: La base de datos de seguimiento de Work Items de Team Foundation.
TfsWorkItemTrackingAttachments: La base de datos de adjuntos de work items de Teamn Foundation.
(3) Verificar los componentes del servidor Team Foundation
Ingresar a Internet Information Server ("inetmgr.exe" desde linea de comandos), luego:
Verificar que se hayan creado los siguientes Pool de aplicaciones:
- Verificar que se haya instalado las aplicaciones de Reporting Services tal como se muestra en la figura:
- Verificar que se haya instalado el sitio de administracion de Sharepoint, como se muestra en la figura:
- Verificar que se haya creado un sitio pata Team Foundation Server con las aplicaciones que se muestran en la figura:

(4) Verificar que el Cliente se puede conectar a un Servidor TFS:

(4) Verificar que el Team Project se crea satisfactoriamente:

Sobre este tema recibi muchas llamadas y mensajes de amigos preguntandome por problemas al instalar Team Foundation Server, cuando instale el Beta 2 y Beta 3 tuve muchos problemas al instalar, pero habiendo instalado varias veces la version final del RTM y superados los problemas, solo les aconsejo una cosa: "Seguir al pie de la letra la mas reciente guia de instalación", normalmente tienen problemas porque no han seguido estrictamente la guia, por ejemplo no han creado los usuarios con los permisos adecuados, no han instalado bien el WSS o algunos de los pre-requisitos no estaba instalado, en fin, hagamos un resumen de la instalación:
(1) Instalacion y configuracion de los pre-requisitos de TFS
Los requerimientos de CPU y procesados dependen de la cantidad de usuarios que va a soportar TFS y tambien si es Single-Server o Dual-Server. El software base simplicando es :
Windows Server 2003 SP1 o Windows Server 2003 R2 y IIS 6.o con ASP.NET habilitado.
TFS NO se puede ser instalado en un Domain Controller.
(2) Instalacion y configuracion de TFS
Asegurarse de crear las cuentas locales para Single-Server o a nivel de dominio para Dual-Server, esta son TFSSETUP, TFSSERVICE, TFSREPORTS y TFSPROXY , los nombres podrian varias pero hay que tener en cuenta los permisos y rol de cada cuenta.
Si estan detras de un firewall tener en cuenta los puertos TCP necesarios como el 80, 1433, 2382, etc.
El procedimiento de instalacion simplificado es:
- Loguearse a Windows con la cuenta Domain\TFSSETUP.
- Instalar Internet Information Services (IIS) con ASP.NET enabled (si no esta instalado)
- Instalar Microsoft SQL Server 2005 SP1 (Incluyendo Reporting Services)
- Instalar el hotfix para Microsoft SQL Server 2005, habilite, y restureel servicio SQL Browser.
- Instalar el hotfix para Microsoft .NET Framework 2.0.
- Instalar Windows SharePoint Services 2.0 con Service Pack2. (NO!, no se puede usar WSS 3.0)
- Instalar Team Foundation Server (Bases de Datos y Servicios)
(3) Instalacion y configuracion de TF Proxy Server
- Crear una cuenta dedicada (TFSPROXY) y añadirla el grupo Team Foundation Server Valid Users
- Instalar IIS 6.0 con ASP.NET y el .NET Framework 2.0 con el hotfix KB913393
- Ejecutar el wizard de instalacion de Visual Studio 2005 Team Foundation Server Proxy desde el CD e instalacion.
(4) Instalacion y configuracion de TF Build Server
- Team Foundation Build Server puede instalarse en Windows Server 2003 SP2, Windows Server 2003 R2 o aun sobre Windows XP Professional SP2.
- Ejecutar el wizard de instalacion de Visual Studio 2005 Team Foundation Build Server Setup
(5) Instalacion y configuracion de Team Explorer
Team Explorer tiene los mismos pre-requisitos de Visual Studio 2005. Dependiendo de lo que requiera de TFS necesitara instalar previamente Microsoft Office Excel 2003 o Office Excel 2007 (se requiere el SP1 de VS 2005) lo mismo para Microsoft Office Project.
En la pantalla de instalacion de Team Foundation Server setup wizard, haga clic en "Install Team Explorer".
Para detalles exactos del procedimiento de instalacion siga la Guia de Instalacion de Visual Studio Team Foundation
Ademas ya se encuentra disponible el Visual Studio 2005 Team Foundation Server Service Pack 1
El esquema de despliegue de Team Foundation Server variará dependiendo de las necesidades del negocio. Basado en esas necesidades puede elegir las caracteristicas de TFS que mejor encajen en su entorno.
En el siguiente diagrama se muestran los clientes y servidores de TFS:
Los clientes y servidores pueden estar distribuidos desde una forma simple hasta una forma compleja. Una topologia de TFS simple es con el servidor y los clientes contenidos dentro de un solo dominio como se muestra en esta figura:
En una topologia de TFS moderada, los componentes del servidor estan instalados en nodos de servidor separados siendo accedidos por clientes en múltiples dominios.Topologias de esta complejidad estan dirigidas a equipos de desarrollo muy grandes en el rango de 50 a 500 usuarios.
En una topologia compleja de TFS, los componentes de TFS estan en nodos de servidores separados y son accedidos por clientes en multiples dominios desde ubicaciones geograficamente distantes. Adicionalmente a los componentes de tolerancia a fallas, se ha instalado un TFS Proxy.
Algunas consideraciones para la planificación son:
Consideraciones de Rendimiento : Varios factores afectan el rendimiento, tales como
(1) Tamaño de la organizacion, por ejemplo para menos de 100 usuarios podria ser suficiente un instalación "single-server", para mas de 100 usuarios o una alta demanda se requeriria una instalación "dual-server".
(2) Alcance del despliegue, considerar los tipos de tareas que los usuarios deben realizar, por ejemplo si los usuarios requieren la ejecucion organizada de pruebas de software y cuantos usuarios estaran corriendo las pruebas? Que tan frecuentemente?.
(3) Hardware, el rendimiento de TFS esta ligado directamente a la velocidad de CPU, memoria y espacio en disco duro disponible en las computadoras donde se instalara cada componente, para eso hay que determinar exactamente los requerimientos de hardware.
(4) Conectividad de red, considerar la latencia de la red y como los usuarios clientes se conectaran a TFS. Una latencia de red de mas de 350 milisegundos puede afectar significativamente el rendimiento de TFS o hacer que el servidor no este disponible de forma intermitente. Durante las distintas operaciones TFS se conecta a los servicios y componentes apropiados en la capa de datos, capa de aplicacion y capa cliente, la velocidad con que TFS complete la transferencia de grandes cantidades de datos depende, en parte, de la velocidad de la red. Frecuentemente el establecer la tarjeta de red al modo full-duplex y una velocidad mas rapida (100Mbps) puede reducir el tiempo que demora la transferencia de datos.
(5) Mantenimiento, considere las tareas de mantenimiento diario o semanal que tendra que realizar, como se manejara los backups y cuanto tiempo tomaran? Por ejemplo una instalacion Dual-Server esta optimizada para rendimiento del servidor, pero tomara mas tiempo de mantener que una instalacion single-server. Hay que tomar estas consideraciones en cuenta junto con el tamaño de la organizacion y cantidad de usuarios.
Licenciamiento : Debe comprar licencias tanto del servidor como del cliente pata utilizar TFS. El numero de licencias que requiera dependeran del numero de computadoras sobre las cuales quiere instalar y el numero de usuarios que requiere que tengan acceso a TFS.
Estimacion de Necesidades : Aparte de considerar varios factores como el tamaño de la organización, las tareas y roles de los usuarios, las especificaciones de hardware actual y la configuracion de la red, tambien se debe tener en cuenta cuantas personas estan disponibles para hacer el soporte de TFS y realizar las tareas de mantenimiento.
La Arquitectura logica de Team Foundation Server esta basada en multiples capas: Una capa de datos, una capa de aplicacion y la capa cliente.
Capa de Datos : Esta basada en Microsoft SQL Server 2005
Capa de Aplicacion : Esta compuesta de SQL Server 2005 Reporting Services, Servicios Web Base de Team Foundation y Windows Sharepoint Services.
Tambien incluye Team Foundation Build Services, que permite conectarse a Build Servers y Team Foundation Server Proxy que maneja un cache de archivos del source control previamente accedidos para mejorar el rendimiento de las operaciones sobre conexiones de bajo ancho de banda.
Capa Cliente : Consiste del Team Explorer, aunque tambien se integra con Microsoft Office Project 2003 y Microsoft Office Excel 2003
La Arquitectura fisica de Team Foundation Server puede estar distribuida en una (Single) o mas computadoras (Dual)
Single-Server : La capa de datos y de aplicacion estan en la misma computadora. La capa cliente en las estaciones.
Dual-Server : La capa de datos y de aplicacion se encuentran en computadoras separadas. Se debe tener instalada la capa de datos antes instalar los componentes de la capa de aplicacion. La capa cliente en las estaciones
Team Foundation Build : Permite la automatizacion de los builds, se puede instalar en computadoras separadas o en la misma computadora de la capa de aplicacion de Team Foundation.
Team Foundation Server Proxy : Mejora el rendimiento del controlador de versiones de Team Foundation colocando en cache los archivos previamente accedidos. Se puede instalar en una computadora separada o en la misma computadora de la capa de aplicacion de Team Foundation.
En la figura se muestra las distintas aplicaciones y servicios involucrados en Team System, el software pre-requisito y sistemas operativos y la ruta de comunicacion entre componentes. Notar que toda la comunicacion entre la capa cliente y la capa de aplicacion es realizada sobre http y https. .NET Remoting es utilizado para manejar el servicio de releases en el build server. La comunicacion via SQL TCP entre el Cliente de Reporte y la capa de datos es solo para presonalizar reportes - los reportes estandar que vienen con Team System son alojados por SQL Reporting Services en la capa de aplicacion.

Puede encontrar mas informacion en capitulo "Team Foundation Installation" en el Visual Studio 2005 Team Foundation Installation Guide
Bueno esta era la pregunta que muchos me hacian y la verdad que no sabia que responder hasta que la semana pasada me llego un e-mail del MVP Lead de invitacion para el examen 70-510 TS: Visual Studio 2005 Team Foundation Server para la nueva certificacion MCTS: Visual Studio 2005 Team Foundation Server.
Justo al dia siguiente Rob Caron publico en su blog la invitacion para el examen.
El examen esta dividido en 5 grandes areas con su respectivo porcentaje de peso en el examen:
Installing and configuring Microsoft Team Foundation Server (12%)
Administering Team Foundation Server instances and team projects (25%)
Administering Team Foundation Server version control (19%)
Administering work item types and process templates (19%)
Administering a team build (14%)
Managing team project reporting and documentation (11%)
Se que he estado bastante alejado de los blogs pero ahora hay un motivo para mantenerlos informados, voy a ir colocando (eso espero) informacion sobre cada punto del examen con informacion de donde encontrarla y algun comentario personal.
Para los interesados que ya han visto charlas sobre Visual Studio 2005 Team Foundation Server y creen que estan preparados para un nivel 200 no se olviden de descargar el curso:
Visual Studio 2005 Team System Basics Training
Hace un tiempo dicte un curso de TFS Nivel 300 algunos materiales de ese curso los estare colocando de acuerdo al tema que se vaya posteando en el Blog.
Bueno, como siempre reaparezco de vez en cuando, espero poder aportar sobre cosas tecnicas mas seguido, esta vez solo queria colocar una de mis fotos favoritas con gente de Microsoft que conoci personalmente en distintos eventos y a quienes admiro.
Estan: Don Box (el padre de SOAP), Anders Heljsberg (creador de C#), Scott Guthrie (padre de ASP.NET), Michael Howard (Guru en Seguridad en Microsoft autor de "Writing secure code"), Keith Short y Jack Greenfield (Autores del libro Software Factories). Dejo la tarea para que ustedes reconozcan quien es quien :)