Visual Studio 2008 Beta 2

El grupo de desarrollo de Microsoft ha liberado la versión beta 2 de visual studio 2008 así como la actualización del framework (version 3.5), también la actualización RC de Silverlight y una actualización del Control Toolkit de Ajax para VS2008, (sin mencionar el update de agosto del blend2 de expression). Con todo esto cada vez estamos más cerca de la actualización final de las herramientas de desarrollo y siguiendo con la tendencia de los últimos meses (años) no solo son correcciones de algunos bugs, es toda una nueva forma de enfrentar los problemas de desarrollo con herramientas como LINQ, WWF, WCF y sobre todo Silverlight y WPF que seguramente cambiaran la forma como entendemos la experiencia del usuario en internet.


Todos los geeks que están conectados con scott guttie y su grupo de desarrollo han visto ya instrucciones y procedimientos de instalación, pero para aquellos que lo prefieren en español y paso a paso aquí está el paso a paso de poner mi maquina de pruebas en VS2008 y demás bits nuevos.


Nota: Yo hice todo esto en una maquina virtual corriendo Windows 2003 server, recomiendo mucho hacer esto para no tener problemas con la máquina de “producción” en la que están desarrollando actualmente, aunque todas las instalaciones son compatibles side by side es la mejor y más segura práctica. (También es posible descargar la maquina virtual ya instalada con todo en el mismo sitio de VS2008.)


Entonces:


1. Desinstale Visual Studio 2008 Beta 1, MSDN y Visual Studio express que tenía en esa máquina, también desinstale acrópolis.

2. En el sitio de Silverlight descargue la versión RC actualización Alpha 1.1. para desarrolladores, la instalación es muy simple e inteligente y me dejo la maquina en la ultima versión disponible., Download the Silverlight Alpha.

3. Gracias a Ivanov de Microsoft Colombia tuve acceso al DVD con los 3.5 gigas de Visual Studio 2008 Professional, gracias parce!! 🙂

4. Para los que no tienen esa fortuna existen dos formas, la primera para los que no están detrás de firewalls:

a. Instale Microsoft Secure Content Downloader

b. Seleccione Visual Studio Pro SKU de la lista y dígale salvar como…

5. Para los que están detrás de un firewall deben usar la pagina de Microsoft VS2008 Beta 2 donde pueden descargarla instalando un complemento de descargas inteligentes para IE7 o pueden hacer una descarga normal http (no recomiendo esto último son 3.5 gigas). Pueden descargar la imagen ISO del DVD o los archivos estan las versiones Team Sytem, Profesional, etc.

6. Yo instale Visual Studio 2008 Team System Beta 2, seleccione la versión full, no tuve ningún problema en la instalación aunque se tardo un rato pero creo que es más por mi maquina virtual.

7. Después de Instalar debe correrse un script que pueden descargar de aquí: Run this file post installation. , esto es muy importante porque permite tener proyectos en Ajax con el framework 2.0 (los que estan haciendo ahora) y también proyectos con el Framework 3.5, sin correr este archivo se tendrá el siguiente problema: al abrir el proyecto de ajax actual se establecerá una referencia con el framework 3.5 que hará obligatorio instalar esta versión del framework en la maquina donde se instala el proyecto. (A diferencia de otras versiones de VS como 2005 y 2003 el VS2008 permite desarrollar proyectos para cualquier versión del framework, pero eso será tema de otro blog).

8. Ahora, si su máquina alguna vez tuvo instalado algún beta vaya a la ventana de línea de comando de VS2008 en herramientas de VS2008, y ejecute el siguiente comando “DevEnv /resetsettings” (esto solo debe hacerse por una vez y es importante porque garantiza el rendimiento adecuado del nuevo editor web incluido con VS2008).


Con esto ya podrá crear nuevos proyectos o cargar los actuales en Visual Studio 2008, en una rápida exploración de características solo en la creación de proyectos podrá ver la opción de crear proyectos para frameworks diferentes (Derecha arriba de la ventana de crear proyecto), también encontrará los proyectos de tipo WCF y WWF sin tener que instalar complementos adicionales (y si, él sabe que no puede crear proyectos de WCF para el Framework 1.1). Los proyectos de Acrópolis (nueva versión de Windows Forms para WPF) merecen su propio blog y una de las mejores cosas: los proyectos de tester de Visual Studio Team System estan incluidos, no se si esto será asi en la versión final pero deberia serlo, los proyectos de pruebas son demasiado importantes para que estén por fuera en otra versión de visual studio.


Ahora, si lo que usted quiere (como yo) crear aplicaciones para internet con la última tecnología disponible no puede dejar de instalar los siguientes:


1. Expression Blend 2 August Preview


2. Silverlight Tools Alpha for VS2008.



Espero que sea de Ayuda.


Juan Carlos Peláez
MCTS


Miembro del Microsoft Speaker Group Andino


Miembro del Microsoft Influencers Group de Colombia.


Keywords: VS2008 Beta 2, Instalación VS2008, Juan Peláez, .Net, Visual Studio, Framework 3.5, Visual Studio 2008, Instrucciones Instalación

Por que el riesgo?

(…)Es por eso que uno trepa montañas, rema furiosamente en las aguas blancas, camina en el desierto y busca lugares remotos; para quitarse de encima lo superfluo, para eliminar las barreras protectoras entre lo que llama su yo y algo mucho mayor.

Y las montañas vuelven a tentarte a treparlas y los ríos a navegar por ellos. Y los lugares remotos te llaman.

La pregunta no es si volverás a arriesgarte.
La pregunta es: A donde la próxima vez?
Y la otra pregunta también: Hasta donde?

Peter Stark

Último Aliento, Historias acerca del límite de la resistencia humana.

Ventana de Performance Explorer Perdida.

Durante la presentación de Visual Studio Team System en Medellín tuve oportunidad de discutir con Freddy Angarita un problema que se presentaba en mi maquina con la ventana de Performace Explorer en Visual Studio, gracias a sus instrucciones ahora puedo ejecutar análisis de código, comparto aquí el problema y la solución.


Problema: No puedo ver la ventana Performance Explorer dentro de Visual Studio Team System, debido a ello no puedo iniciar análisis de rendimiento para mis aplicaciones.


Solución: ejecutar desde la línea de comandos de Visual Studio la instrucción devenv /resetskippkgs (Si es una maquina corriendo vista tiene que abrir esta consola como administrador).


Investigando un poco más esta línea de comando lo que hace es borrar todas las etiquetas skip VSPackage que se han colocado en el entorno de desarrollo, al eliminar las etiquetas el sistema carga nuevamente todos los Paquetes de VS, en este caso particular el de Análisis de Rendimiento (Performance Explorer)

Todas las funcionalidades Out-Of-The-Box de visual studio (editor de c#, por ejemplo) se implementan a través de VSPackage, por los tanto este mismo comportamiento y solución puede aplicar para otros elementos de visual studio como diseñadores de páginas, clases, etc, y no solo para visual studio team system sino para otras versiones como professional y express.


Espero que sea de utilidad


Juan Carlos Peláez
MCTS


Keywords: Visual Studio Team System, Visual Studio Express, Visual Studio Professional, Performance Explorer, Visual Basic, C#, Microsoft, Juan Peláez.

Problemas en WCF con VB.net y Data Contract

Durante el desarrollo de la nueva versión de nuestras aplicaciones usando arquitecturas distribuidas con WCF encontré los siguientes problemas en las herramientas de Visual Studio que quiero compartir aqui.
El primero, que muchos habran identificado, es que al generar el código usando la opción de nueva libreria de WCF en visual basic genera una clase datacontract1 que no tiene marcada ninguna de sus propiedades como datamember, por lo que cuando se publica el servicio y se genera el proxy esta clase no tiene ninguna propiedad publica que pueda trasmitirse con por el cable, esto se soluciona facilmente marcando como datamember la propiedad generada para que quede asi: (en negrillas lo que hay que adicionar)

<DataContract()> _

Public Class DataContract1

Private m_firstName As String

Private m_lastName As String

<DataMember()> _

Public Property FirstName() As String

Get

Return m_firstName

End Get

Set(ByVal value As String)

m_firstName = value

End Set

End Property

<DataMember()> _

Public Property LastName() As String

Get

Return m_lastName

End Get

Set(ByVal value As String)

m_lastName = value

End Set

End Property

End

Class

El segundo tiene que ver con el nombre por default para el namespace que coloca Visual Studio a los proyectos, este namespace genera un problema en la serialización de los objetos marcados como datacontract ya que estos llegan correctamente al servicio pero no estan inicializados, si se depura el cliente se ve correctamente creado el objeto pero en el servicio no estan los valores.
Este punto se puede resolver usando alguno de los siguientes procedimientos:
a. Eliminado el namespace colocado por default en el cliente, el host y el servicio. (usando las propiedades del proyecto dentro de visual studio).
b. al generar el proxy del servicio usando la herramienta svcutil.exe usar el modificar /n para indicar que se quiere generar un proxy con el namespace del cliente, algo como esto:
svcutil.exe *.wsdl *.xsd /namespace:*,MyNamespace /language:VB
siendo MyNamespace el nombre del namespace del cliente del servicio.
Estos problemas no se presentan cuando se usan servicios con tipos basicos del CRL como strings o enteros o en algun otro tipo de contracto (operacion,fault,etc), es unicamente para cuando tiene contratos de datos del tipo datacontract, tampoco se presentan en C#.
espero que sea de utilidad.
Juan Carlos Peláez
MCTS
KeyWords: WCF, svcutil, Visual Basic, Framework, net, Arquitectura, Componentes Distribuidos, Cliente, Servicio, Host, Microsoft

Pruebas Unitarias en Visual Studio Professional

El concepto de las pruebas unitarias ha venido desarrollando todo un nuevo modelo de programación, los modelos basados en pruebas (TDD por Test Driven Development) han demostrado sus beneficios entre los que se pueden contar rápidamente la confianza en el código generado, la habilidad de hacer refactoring mucho más rápido y con más confianza y la reducción en los tiempos de depuración.


Visual Studio Professional versión 2005 es una de las herramientas de desarrollo más usadas en el mundo, y la herramienta preferida de los desarrolladores sobre plataforma Microsoft, sin embargo los equipos de desarrollo que no utilizan Visual Studio Team System versión Developer o Tester no tienen la posibilidad de realizar pruebas unitarias Out-Of-The-Box, esta guía ayudar a configurar Visual Studio Professional para la ejecución de pruebas unitarias.


1. Preparando el Ambiente.

Lo primero es descargar un framework de pruebas unitarias, aunque existen varios recomiendo el uso de NUnit, en nuestras pruebas ha funcionado bastante bien, tiene funcionalidad consistente y es fácil de configurar y usar. Descárguelo e instálelo del siguiente link: (Para el Framework de NUnit (.NET)) http://www.nunit.org/

Instalando nUnit podrá escribir, ejecutar y tener resultados de pruebas unitarias, pero aún desde fuera de Visual Studio, Para la integracion con el IDE de Visual Studio deberá instalar un Add-in que puede descargar de esta dirección: http://www.testdriven.net/, esto permitirá la ejecución de pruebas unitarias, con depuración, cobertura (coverage) y otras características desde el propio entorno del IDE de Visual Studio.


2. Escribiendo el Código de Pruebas.

Con el entorno listo podemos crear el proyecto de Pruebas para nuestro ensamblado, yo recomiendo crear otro proyecto para poder tener clara independencia entre el proyecto de código y el proyecto de pruebas, una ventaja adicional de hacerlo de esta forma es que puede subir el proyecto de pruebas a su sistema de control de versiones. (Una recomendación adicional tiene que ver con la nomenclatura del namespace, cree un namespace de pruebas para su proyecto).

En el nuevo proyecto creado debe agregarse una referencia al ensamblado nunit.framework.dll que encontrará en la carpeta nUnit 2.4/Bin, en la ubicación de archivos de programas o donde haya instalado el framework del nUnit.

También debe agregar una referencia al proyecto o ensamblado que quiere probarse.

Ahora puede escribir una clase de pruebas unitarias que se parecerá a esta:


Imports NUnit.Framework
Imports TestClass = NUnit.Framework.TestFixtureAttribute
Imports TestMethod = NUnit.Framework.TestAttribute
Imports TestInitialize = NUnit.Framework.SetUpAttribute
Imports TestCleanup = NUnit.Framework.TearDownAttribute

<TestClass()> _
Public Class eMailTest

end Class.


Como puede verse aquí, se han usado unos alias para los atributos del framework que facilitan su uso en la clase, estos alias le permitirán al framework de nunit identificar la clase de pruebas, los métodos de pruebas, los métodos de inicialización y finalización del proceso de pruebas.

Estos alias permitirán decorar la clase como en el ejemplo anterior que la clase ha sido decorada con el atributo TestClass

Lista la clase, ahora podemos construir métodos de pruebas, un método básico de pruebas quedaría parecido a este:

<TestMethod()> _
Sub AddFolderTest()

…Su Código aqui.

End Sub

Ahora con el botón derecho del mouse sobre el método o la clase de pruebas puede ejecutar la prueba unitaria.

Ahora bien la idea de esta pequeña guía no es reproducir todo el manual de nunit pero hay algunos tips que pueden ser interesantes, 1. Use las funciones assert dentro de sus métodos de pruebas, 2. en los casos en que la prueba debe retornar una excepción utilice la decoración expectedexception para indicarle a nunit cual es el tipo de excepción que espera, 3. Puede configurar el ambiente de pruebas usando un método decorado como TestInicialize y limpiar todo usando TestCleanup.

En próximos artículos hablaré de 1. Como usar BD para ejecutar conjuntos de pruebas automaticos simulando la funcionalidad de Visual Studio Team System y 2. cómo crear un modelo de pruebas usando Enterprise Services que al finalizar las pruebas realice un rollback de todos los datos de pruebas insertados.

Espero que sea de utilidad.

Juan Carlos Peláez

MCTS

Keywords: Visual Studio Team System, Visual Studio Proffesional 2005, nUnit, Mejores Practicas, Metodología, Microsoft, VB, Pruebas Unitarias, Desarrollo basado en Pruebas, Eventos Microsoft Colombia.

Problemas al Invocar un Web Service de .Net desde una página ASP Clasica

Aunque no sé si sea un escenario muy común, hay aplicaciones legacy escritas en ASP clásico que empiezan a integrarse con aplicaciones en .Net, bien sea como parte de un proceso paulatino de migración o como parte del proceso de agregar nuevas funcionalidades a la aplicación existente, en ambos escenarios una forma simple de integrar la aplicación ASP con la nueva aplicación .NET es exponer las nuevas funcionalidades de la aplicación .Net por medio de servicios web.

Aunque existe en La Red literatura respecto a la forma como debe hacerse esta invocación del Web Service desde la página web no todos los ejemplos apuntan a escenarios reales, el objetivo de este post es mostrar cómo debe realizarse esta integración para aplicaciones del mundo real.

1. El primer problema consisten en identificar cuáles son los tipos de datos que se van a transferir entre la aplicación ASP y la aplicación .NET, mi recomendación es pasar datos de tipos básicos del CRL, es decir, strings, longs, integers. Aunque es posible pasar objetos representados como XML para que después sean des-serializados por la aplicación .NET esto complica bastante el escenario e incluye nuevos elementos de error. (Nosotros transferimos solo strings y creamos los objetos en la aplicación .NET, para lo cual creamos los constructores adecuados)

2. El siguiente problema es identificar quien es el realmente el cliente del servicio, en la mayoría de los escenarios el cliente del servicio es código del lado del servidor, (el código que esta entre los tags es el código del servidor), también es posible que el cliente sea alguna de las funciones JavaScript de la página que se quiere invocar. (Este es el escenario que derivó en la existencia de AJAX Asynchronous JavaScript And XML). Por ahora nos enfocaremos en el escenario donde el código del lado del servidor es quien consume el web service.

3. Ahora debemos seleccionar la forma como se comunicará la aplicación asp con el servicio web, básicamente hay dos opciones, usar SOAP, o usar el parser de xml (HTTP Post) que contiene un objeto poco conocido llamado MSXML2.ServerXMLHTTP que puede ayudarnos a realizar estas llamadas. Básicamente es un tema de gusto, facilidad y conveniencia, sin embargo como es necesario tener instalado el Toolkit de SOAP para poder usar los objetos de SOAP desde ASP clásico y dicho componente se queda sin soporte a partir de Marzo 31 del 2008, entonces nosotros preferimos usar HTTP Post.

4. Bien lo siguiente es escribir el código del servicio web y modificar la página ASP para que lo consuma, lo del servicio web no lo vamos a profundizar, es una clase con la decoración WebService con algunos métodos decorados WebMethod, etc. un ejemplo sencillo puede ser algo como esto:


Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
<System.Web.Services.WebService(Namespace:="
http://MyNameSpace/services/MyProduct
> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class WorkFlowServices
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function ServiceTest() As String
Return "En Ejecucion..."
End Function
<WebMethod()> _
Public Function MyMetodoconParametros(ByVal Client As String, ByVal UserID As Long, ByVal IDProcessCase As Long, _
ByVal Sequence As Long, ByVal EntryDataType As String, ByVal IDEntryData As String, ByVal EntryData As String) As Long
...hacer algo, retornar algo.
End Function
End Class

5. Ahora como consumir este Web Service desde la página ASP clásica, es algo como esto:


<%
Dim xmlhttp
Dim DataToSend
Dim postUrlpostUrl = "http://IPMyServer/Services/WorkFlowServices.asmx/MyMetodoconParametros"
DataToSend="Client=Tester&UserID=1&IDProcessCase=80&Sequence=0" & _&EntryDataType=TestWebService&IDEntryData=0&EntryData=1"
Response.write postURL
Response.write "<br>"
Set xmlhttp = server.Createobject("MSXML2.ServerXMLHTTP")
xmlhttp.Open "POST",postUrl,false
xmlhttp.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
xmlhttp.send DataToSend
Response.Write(xmlhttp.responseText)
%>

Lo importante de este segmento de código, es la forma como se construye la invocación del método, la variable postURL tiene la dirección del servicio web así como el nombre del método que se va a invocar. Luego la variable DataToSend tiene la información de los valores que toman los diferentes parámetros que se van a pasar al método del web service (la recolección de estos parámetros depende del tipo de uso e interfaz que se tenga con los usuarios pero puede ser la recolección de una forma usando request.form o la recolección de los parámetros del QueryString que invocó la páginas ASP).

Otra cosa importante es la definición del encabezado en la linea xmlhttp.setRequestHeader “Content-Type”,”application/x-www-form-urlencoded” .

Listo, se invocó el web service, ahora el resultado puede recuperarse de una de estas propiedades: responseBody, responseStream, responseText, and responseXML., (nosotros usamos response.text que nos retorna todo el entity body como un stream)

Tips Súper Importantes:

• Cuando su cliente del servicio web sea el propio código ASP (“del lado del servidor”) se recomienda usar el objeto MSXML2.ServerXMLHTTP que ha sido diseñado y optimizado para comunicaciones entre servidores.
• El código anterior genera un error en la mayoría de los servicios web del framework 2.0, es un error del tipo “Request format is unrecognized for URL” o en español “Formato de solicitud no reconocido para la dirección URL” esto se debe a que los protocolos Get y Post están deshabilitados por omisión (default) en las aplicaciones del framework 2.0 para todas las peticiones de orígenes diferentes a Localhost. (Esa es la razón por la que la página de prueba de los servicios web como se ve desde otra maquina no tiene el formulario Test Service), por lo tanto para que efectivamente se realice la invocación hay que habilitar estos protocoles, eso se hace incluyendo las siguientes líneas en el archivo web.config del servicio web de .net.


<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
(...)
</system.web>

En este artículo hay más información del comportamiento de los protocolos, aunque solo habla del framework 1.1. También ocurren con en el framework 2.0.

Espero que sea de utilidad

Juan Carlos Peláez
MCTS

Keywords: Web Services, ASP Clasic, .Net, Framework 2.0, VB, “Formato de Solicitud no reconocido”,

Capurgana

Muy probablemente el paraiso se parece a Capurgana, Colombia. Esta pequeña población cerca a la frontera de Panama tiene una de las más increibles playas, zonas de buceos y senderos de todo el Caribe.