Programación y Estrategias de Negocios RSS 2.0
# Tuesday, November 25, 2008


Share

He empezado un nuevo proyecto para Microsoft Colombia y la Secretaria de Salud que es a la vez una prueba de concepto de una migración de una aplicación de VS2003 a VS2008 como la reconstrucción de la aplicación (refactoring) hacia un modelo orientado a Software + Servicios.

Uno de los entregables del proyecto es un Web Site, así que pareció una buena oportunidad para comenzar a explorar JQuery, que lo había visto por ahí con los anuncios de soporte en VS2008 y demás pero nunca lo había tocado.

Lo primero es hacerlo funcionar, eso lo explico mejor Scott Guttrie en un post, entonces yo cree un Web Application, luego una carpeta scripts, y en ella copie el archivo jquery-1.2.6.js y el archivo jquery-1.2.6-vsdoc.js, estos dos me permiten tener JQuery e IntelliSense en Visual Studio, se pueden descargar de Aquí.

Luego incluí el archivo de JQuery y el archivo de la documentación en el default.aspx así:

<script src="scripts/jquery-1.2.6.js" type="text/javascript"></script>

<script src="scripts/jquery-1.2.6-vsdoc.js" type="text/javascript"></script>

Si no se incluye el archivo de la documentacion JQuery funciona, pero no tengo intellisense.

Ahora, cómo funciona esto:

Recorriendo el DOM

var help = $("#help"); //obtiene el elemento que se llama help, es como usar document.getElementById solo que funciona en cualquier browser.

var p = $("p"); //obtiene todos los elementos de tipo <p>

var username = $("input[name='username']"); //obtiene un elemento de tipo input llamado username

Todas las funciones anteriores retornan un arreglo (array), de hecho, la función $(), conocida como función JQuery siempre retorna un array de 0 elementos, 1 elemento o el número de elementos que encuentre (y es en realidad una abreviación de JQuery(“p”) ).

Es una práctica recomendada nombrar las variables con el signo pesos, así que el último ejemplo debería ser algo como esto:

var $username = $("input[name='username']");

Al ser $username un array tiene un conjunto de métodos que se pueden usar para obtener su longitud, elementos, etc (var form = $form.get(0); var form = $form. length)

Manipulando el DOM

Una vez que tengo identificados los objetos puedo empezar a hacer algo con ellos, algunos consejos:

No es necesario crear todas las clases que se van a usar en la hoja de estilo, solamente se necesitan para que JQuery las identifique

Un elemento puede tener varias clases aplicadas asi: <table class=”VisualTable PopulationTable”>…</table>, de esta forma puedo separar las clases que modifican los diseñadores de las que yo utilizo en JQuery para manipular los objetos.

Eventos

Uno de los elementos importantes de JQuery son los eventos, estos responden generalmente a acciones de los usuarios, pero uno que siempre es útil es el evento ready del document. Algo como esto:

$(document).ready(function{ myCodigo});

Que quiere decir que se debe ejecutar el código {MyCodigo} cuando la pagina este lista. Algo interesante es la forma como se declarara la función a ejecutar, muy similar a un método anónimo y también con una notación de JSON. Sin embargo si por alguna razón a uno no le gusta esta forma de funciones en línea puede usar esta notación: %(document).ready(onLoaded); donde onLoaded es un método definido previamente en el script. (esto también puede ser útil cuando se combinan diversos scripts y se quiere invocar desde un evento una parte de otro script).

Muchos eventos reciben funciones como parámetros, incluso una función en cada parámetro, por ejemplo:

$("#partList .row").hover

(

function()

{

$(this).addClass("rowOver");

},

function()

{

$(this).removeClass("rowOver");

}

)

Recibe dos funciones, una para cuando se entra al hover y otra para cuando se sale. Aquí puede ser interesante notar el $(this) que significa un “apuntador” al elemento que está ejecutando el evento, algo parecido al $(document).

 

Juan Pelaez.

Arquitecto de Software.

 

Keywords: JQuery, Web Applications,

Technorati Tags: ,

Publicado en www.juanpelaez.com/blog

Tuesday, November 25, 2008 3:06:55 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
Articulos de Desarrollo | JQuery | VS2008
# Wednesday, August 20, 2008


Share

Me han preguntado un par de veces como invocar Web Services que tienen certificados digitales desde aplicaciones web (y tambien desde aplicaciones Windows), asi que aqui una nota de referencia rapida y algunos enlaces al respecto:

 

Existen muchas formas de invocar servicios web seguros desde aplicaciones web, pero basicamente dos son rapidas y eficaces y dependen de la tecnología que se este usando para invocar los servicios web. (es decir como los esta llamando), si esta usando framework 2.0 lo mejor es usar Web Services Enhancements (WSE) 3.0 for Microsoft .NET, una serie de extensiones para Visual Studio que implementan mejoras significativas en seguridad, gestión de archivos como parte del mensaje, etc. Con WSE* puede usar muchas de las características más avanzadas de Web Services y hacen parte de los estándares avalados por OASIS y otras sugerencias de Microsoft, incluidos los certificados digitales, mas información de esta técnica aquí. Este complemento es gratuito, no hay que pagar nada por él y se puede descargar del sitio de Microsoft haciendo clic aquí.

 

Ahora si está usando el framework 3.0 puede utilizar Windows Communication Foundation (WCF) que trae incluido desde el core el soporte para esquemas de seguridad como el que menciona, Microsoft ha desarrollado una guía de mejores prácticas de seguridad para servicios de WCF. Y una guía muy completa de casos practicos (how-to) y escenarios que se puede descargar de forma gratuita haciendo clic aquí.

 

 

Juan Peláez

Developer Evangelist

Microsoft Colombia.

Wednesday, August 20, 2008 8:33:57 AM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Articulos de Desarrollo | Developer Evangelist | Visual Studio | WCF | Web Services
# Friday, May 16, 2008


Share

Desde hace algunos meses vengo participando en un Proyecto Grande para Dunkin Donuts en Estados Unidos, básicamente la construcción del sitio www.DunkinDonuts.com y otros sitios afiliados como www.myicedcoffee.com, estos sitios utilizan diferentes tecnologías como Flash, JavaScript, WebServices, Certificados Digitales, y otra lista de cosas que son interesantes de poner a trabajar juntas y que son probadas en todos los sistemas operativos y navegadores populares.

 

Estos sitios esperan tener cantidades masivas de visitantes todo el tiempo con picos muy altos en ciertas campanas publicitarias y días especiales, así que hay que enfrentar el problema de la alta disponibilidad en serio, y si se le agrega que se usan muchas películas de flash (corriendo contra servicios web) algunas de ellas muy pesadas, entonces se tiene una combinación un poco complicada.

 

En este sitio se han implementado diferentes soluciones como un cluster de BD, un Cluster de servidores de presentación, cada servidor con 4 Gigas de RAM y sistemas redundantes de acceso a datos, etc, incluso tarjetas de red dedicadas para la comunicaciones entre las maquinas, la salida a internet e incluso la que me permite conectarme para tareas de administración.

 

Sin embargo, una de las tecnologías más interesantes que hemos empleado tiene que ver con la Red de Distribución de Contenido (CDN por Content Distribution Network) que se ha implementado, aquí algunas líneas al respecto. (No es la única, muchas decisiones de arquitectura de la aplicación, de infraestructura y de negocios deben tomarse e implementarse correctamente para que un sitio realmente soporte un tráfico fuerte, empezando por tener una idea de cuánto trafico se estima tener).

 

Que es una CDN?

 

Una red de distribución de contenido es un montón de infraestructura generalmente distribuida por todo el mundo (al menos puntos claves para internet) que guardan copias locales de ciertos tipos de archivos para entregue a los usuarios que los solicitan usando ventajas geográficas (están más cerca). (Usted de verdad no creía que youtube tenía los discos duros más grandes del mundo o sí?). De esta forma cuando un usuario solicita (a través del browser) un video, canción, imagen, o incluso una de las películas de flash, esta le es enviada desde el servidor que se encuentra más cerca. Más referencias e información en ingles aquí

Como toda esa infraestructura es arrendada se obtienen importantes beneficios en costos de hardware y uso del ancho de banda de su proveedor de hosting, y para los usuarios la experiencia es muy buena porque siente que su sitio es mucho más rápido de lo que en realidad es.

 

Como se usa?

 

Una de las cosas realmente increíbles de esto es la forma como funciona desde la perspectiva del desarrollador (es decir la mía) (la otra cosa increíble es como selecciona quien en realidad está cerca, pero ese es otro tema), para mi es transparente la localización del archivo, es decir no me importa.

 

Por ejemplo:

Supongamos que tengo unas imágenes muy grandes que quiero que se suban a esta red CDN, en mi estructura de archivos están en una carpeta images y yo las referencio como src=”images/imagengrande1.jpg” bueno, al afiliarse a la red de distribución de contenido ellos le van a crear un apuntador para su dominio del tipo assets.midominio.com, así que ahora en vez de apuntar el scr de la imagen como antes usted pone scr=http://assets.midominio.com/images/imagengrade.jpg, la magia ocurre cuando al hacer la solicitud un usuario por primera vez, la CDN busca en su propia lista de archivos, como no la encuentra va hasta su servidor y se la manda al usuario, pero al mismo tiempo saca una copia y la almacenan en sus propios servidores, es decir que entre más personas visiten el sitio de diferentes partes del mundo o del país, mas rápido funciona al sacar copias del contenido al momento de distribuirlo.

 

Es decir, usted no sube nada a la red, ella sola se alimenta a medida que sus usuarios piden los archivos, y no hay problemas de crosssite scripting por que los archivos si están en su dominio, solo que en otras maquinas.

 

Esto genera dos problemas, ambos fáciles de solucionar y que bueno, por el beneficio puedo vivir con ellos.

 

1. Obviamente si hay un cambio en el archivo que está cargado en la red, de alguna forma hay que notificarlo para que se actualice el archivo, sino la red de CDN va a seguir enviando el archivo desactualizado. Sin embargo todas estas redes tienen una consola de administración donde usted puede ver reportes de uso, pero también puede solicitar que un archivo sea actualizado, es un proceso automatizado generalmente basado en colas pero que dependiendo del trafico del sitio puede tomar desde minutos hasta horas, así que procure evitar los cambios.

 

2. Como en el proceso de desarrollo muchas veces hay que cambiar cosas (no debería ser, pero así es), es mejor tener alguna forma de “prender y apagar” el servicio, asi que una buen opción es poner en el archivo de configuración la ruta que se va a usar o en el load del control o en una función de JS o en CSS donde se pueda hacer el cambio en un solo sitio y afecte todos los archivos que se están cambiando.

 

Para tener una?

 

Los proveedores de este servicio son Akamai, LimeLight Network (ya que estoy usando) (por cierto que Akamai demando a LimeLight por 45 millones de dólares, según ellos Limelight violo la licencia concedida por MIT para usar la tecnología que permite hacer la reconstrucción de los URL de los archivos que se usan en la CDN), así que solo hay que ir y suscribirse, pagar el servicio mensual y listo hay diversos servicios incluido el de tener televisión de HD por internet hospedada en la red.

 

Espero que esto le ayude a salvar algunas horas y a construir sitios de altísima disponibilidad.

 

Juan Carlos Peláez

Arquitecto de Software

 

Keywords: Arquitectura, CDN, Content delivery Network, Content Distribution Network,

Friday, May 16, 2008 3:38:38 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
Arquitectura | Articulos de Desarrollo
# Tuesday, February 12, 2008


Share

Al usar VS2005, una de las cosas con las que se encuentran los usuarios (que vienen de VS2003) es un nuevo modelo de compilación de los proyectos Web. (Web Site Project).   Hay varias diferencias entre un modelo y otro, desde el sitio donde se seleccionan para crear un nuevo proyecto hasta los resultados de compilación. Para muchas cosas esto es muy importante, así que aunque este no es un tema nuevo vuelvo a él para referencia propia y de otros.

En el modelo Web Application:

·          Toda la aplicación se compila en un solo assembly (dll) que queda en la carpeta bin.

·          Todas las referencias, y archivos se relacionan en el archivo del proyecto.

·          Todo el proceso de compilación usa MSBuild así que se puede personalizar lo que pasa antes, durante y después de la compilación.

En el Modelo Web Project:

Se generan muchos dlls que viven en el directorio bin, es un poco complicado saber para que es cada uno y cual es cual.

Para mi entonces la principal diferencia esta relacionada con la compilación, y aquí es donde esto se vuelve importante hoy. (3 años después de VS2005.)

Ahora estoy desarrollando algunos proyectos para Sharepoint 2007, hay muchas opciones pero una interesante es crear una aplicacion asp.net normal, agregar las referencias a Sharepoint y publicarla en el directorio _layouts.

Para hacer esto y que quede bien es obligatorio que el assembly de la aplicación web sea uno solo, es decir que sea un proyecto Web Application. , hay otros escenarios como usar Enterprise services en los que eso del ensamblado único también es importante. Asi que para mucha gente, esto resulto tan importante que se creo una adición para VS2005 que permite volver a tener los proyectos Web Applications.

A continuación algunas fotos de mi maquina de desarrollo (gracias clo J) que permiten ver las diferencias al momento de creación, los resultados de compilación y el deployment resultante en sharepoint.

Cuando se entra a Visual Studio y se selecciona nuevo web site se ve una pantalla como esta:

clip_image001

si se crea una pagina, un botón, una clase, se compila y se publica (Publish) se obtiene algo como esto:

clip_image002

Como pueden ver hay dos dlls, una llamada application Code y Otra llamada App_web_xxxx.dll.

Para tener el soporte para Web Applications se puede ir al sitio de Microsoft y rápidamente instalarlo siguiendo estos pasos:

1. Primero Aplicar este parche y

2. Luego descargar el complemento de aqui.

Luego de instalar esto se siguen teniendo los web projects, pero también esta ahora la opcion de web applications, solo que se encuentran en otro lado como se puede ver aquí:  (new Project, Web…)

clip_image003

Y al agregar la misma página, el mismo botón, la misma clase que en el proyecto anterior, compilar y publicar se obtiene esto:

clip_image004

Como se ve una sola dll con el mismo nombre del proyecto.

Pues bien, esta dll es la que se puede colocar en el carpeta BIN del directorio virtual del sitio sobre el que se esta creando la aplicación en sharepoint.

asi : (En este caso mi aplicación dentro del Sharepoint se llama ProjectServer)

clip_image005 

Y las páginas del compilado si quedan en el directorio layouts:

clip_image006

 

Personalmente me gustan los proyectos que usan webApplications, y hasta el momento no he encontrado ninguna restricción o algo que no pueda hacer, incluso en otro proyecto que usaba Enterprise Services desde una de las clases del Web Site fue perfecto para registrar con facilidad los componentes en la consola de COM+.

 

espero que sea de ayuda.

 

Juan Carlos Peláez

MCTS

Distributed Applications

 

Keywords: VS2005, Sharepoint, Web Application Projects, Web Projects, Sharepoint Applications, Juan Peláez, MCTS Distributed Applications. Build, deploy, Desarrollo para Sharepoint, Consultor en Sharepoint.

 

Tuesday, February 12, 2008 5:12:22 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Articulos de Desarrollo | Sharepoint | Visual Studio | VS2005
# Wednesday, January 09, 2008


Share

Uno de los Blogs a los que estoy suscrito es el de Janne Mattila quien siempre tiene cosas muy interesantes sobre Sharepoint, generalmente avanzadas y muy pero muy útiles e interesantes, en las últimas semanas Janne publicó un post sobre Silverlight y Sharepoint que va en la misma línea de trabajo que estoy siguiendo en los últimos días. Con el permiso de Janne, traduzco el contenido a continuación para todos aquellos que prefieren el español. J .

(Nota: no me considero traductor, ni espero que esto sea una traducción textual, lo importante es el sentido general, comentarios son bienvenidos como siempre)

Creando aplicaciones de Silverlight 1.1 para SharePoint con VS2008

El título lo dice todo.:-) Mi plan es crear un pequeño instructivo paso a paso de cómo crear una aplicación Silverlight 1.1 con Visual Studio 2008 y luego ejecutarla en SharePoint. Y como no quiero instalar un montón de cosas en mi ambiente de Sharepoint cree una Web part que sirva de host a la aplicación Silverlight. Todo el desarrollo se ha realizado fuera del ambiente de Sharepoint.

Si Silverlight es algo nuevo para usted le sugiero que empiece revisando silverlight.net y un ejemplo muy interesante en Coding4Fun Silverlight 8-Ball example. El primer enlace es el punto de enlace para el desarrollo usando Silverlight y el segundo enlace es un ejemplo muy interesante que muestra cómo crear un juego de 8-bolas usando Silverlight.

Ahora sabe más de Silverlight :-) así que empecemos con el ejemplo:

Tengo VS2008 corriendo en Vista y he descargado e instalado Microsoft Silverlight 1.1 Tools Alpha for Visual Studio 2008 para ayudarme a desarrollar las aplicaciones Silverlight. Esto agrega una nueva plantilla con toda la configuración necesaria para construir aplicaciones de Silverlight 1.1. También tengo SharePoint corriendo en Virtual PC y está configurada para conectarse directamente a mi maquina host (Ej: al escribir http://demo1:1000 en mi maquina host se conecta al SharePoint virtualizado).

Lo primero es modificar el SharePoint de forma que pueda hospedar mi nueva aplicación. Agreguemos algunas carpetas bajo el directorio _LAYOUTS:

image

ClientBin es la carpeta que contendrá todos los archivos .dll requeridos en el cliente por Silverlight (=Si usted compila su proyecto Silverlight automáticamente tendrá en su proyecto la carpeta ClientBin que contiene todos los ensamblados del cliente necesarios para el proyecto.).

La carpeta Silverlight es usada para almacenar los archivos .xaml (=Las páginas Silverlight). También necesito cambiar la configuración de las dos carpetas para que las cosas funcionen. Primero cambiare la configuración de la carpeta ClientBin:

 

image

 

Asigne solo acceso de lectura (Read) y también permisos de ejecución (Execute) a nadie (None) :  

Luego adicionaré .dll para permitir tipos mime (y .pdb para propósitos de depuración en el futuro) :-):

image

Entonces cambiaré la configuración de la carpeta Silverlight para que soporten las extensiones .xaml:

image

Ahora el SharePoint está configurado... pero creemos una web part que sirva de host la aplicación Silverlight en la página. Aquí está el código que hace esto:

   1:  using System;
   2:  using System.Runtime.InteropServices;
   3:  using System.Web.UI;
   4:  using System.Web.UI.WebControls.WebParts;
   5:   
   6:  namespace Silverlight_Web_Part
   7:  {
   8:    [Guid("fc852641-9955-433c-945e-d773f46351eb")]
   9:    public class Silverlight_Web_Part : WebPart
  10:    {
  11:      string xamlFile;
  12:      [WebBrowsable(true), Personalizable(true)]
  13:      public string XamlFile
  14:      {
  15:        get { return xamlFile; }
  16:        set { xamlFile = value; }
  17:      }
  18:   
  19:      public Silverlight_Web_Part()
  20:      {
  21:        this.ExportMode = WebPartExportMode.All;
  22:      }
  23:   
  24:      protected override void Render(HtmlTextWriter writer)
  25:      {
  26:        if (string.IsNullOrEmpty(this.XamlFile) == false)
  27:        {
  28:          writer.Write("<div id='SilverlightControlHost' " + 
  29:            "style='width: 640px; height: 480px;'></div>");
  30:          writer.Write("<script type='text/javascript' " +
  31:              "language='JavaScript' src='/_layouts/Silverlight.js'></script>");
  32:          writer.Write("<script type='text/javascript' " +
  33:            "language='JavaScript' src='/_layouts/SilverlightStarter.js'></script>");
  34:          writer.Write("<script type='text/javascript' " +
  35:            "language='JavaScript'>createSilverlight('" + xamlFile + "');</script>");
  36:        }
  37:        else
  38:        {
  39:          writer.Write("Xaml file is not selected.");
  40:        }
  41:      }
  42:    }
  43:  } 

Mi web part usa los archivos Silverlight.js y SilverlightStarter.js. SilverLight.js es el mismo archivo que se incluye en el proyecto cuando se crea un proyecto Silverlight 1.1 en VS. SilverlightStarter.js es prácticamente una copia del archivo de la plantilla del proyecto pero lo he modificado un poco para que soporte que el archivo XAML sea pasado como parámetro:

   1:  function createSilverlight(filename)
   2:  {
   3:    Silverlight.createObjectEx({
   4:      source: filename,
   5:      parentElement: document.getElementById("SilverlightControlHost"),
   6:      id: "SilverlightControl",
   7:      properties: {
   8:        width: "100%",
   9:        height: "100%",
  10:        version: "1.1",
  11:        enableHtmlAccess: "true"
  12:      },
  13:      events: {}
  14:    });
  15:     
  16:    document.body.onload = function() {
  17:     var silverlightControl = document.getElementById('SilverlightControl');
  18:     if (silverlightControl)
  19:     silverlightControl.focus();
  20:    }
  21:  }

Y si verifica el código del web part en la línea 35 notará que paso como parámetro el archivo XAML que ha sido configurado en las propiedades del web part:

image

Ahora solo tenemos que adicionar algo de código Silverlight y estamos listos. Aquí está el contenido del archivo Page.xaml (=La Aplicación :-):

   1:  <Canvas x:Name="parentCanvas"
   2:      xmlns="http://schemas.microsoft.com/client/2007" 
   3:      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
   4:      Loaded="Page_Loaded" 
   5:      x:Class="MySilverLight.Page;assembly=/_LAYOUTS/ClientBin/MySilverLight.dll"
   6:      Width="640"
   7:      Height="480"
   8:      Background="White"    
   9:      >
  10:   
  11:   <Rectangle x:Name="MyRectangle" 
  12:         Canvas.Top="25" Canvas.Left="25" 
  13:         Width="50" Height="50" 
  14:         Fill="Gray" MouseLeftButtonDown="MyMouseLeftButtonDown" />
  15:   <TextBlock x:Name="MyText" 
  16:         Text="Click either rectangle or me" 
  17:         MouseLeftButtonDown="MyMouseLeftButtonDown" />
  18:  </Canvas>

 

Y el code behind Page.xaml.cs contiene el siguiente código:

   1:  using System;
   2:  using System.Windows.Controls;
   3:   
   4:  namespace MySilverLight
   5:  {
   6:    public partial class Page : Canvas
   7:    {
   8:      DateTime started = DateTime.Now;
   9:   
  10:      public void Page_Loaded(object o, EventArgs e)
  11:      {
  12:        // Required to initialize variables
  13:        InitializeComponent();
  14:      }
  15:   
  16:      public void MyMouseLeftButtonDown(object o, EventArgs e)
  17:      {
  18:        string runningTime = (DateTime.Now - started).TotalSeconds.ToString("F2");
  19:        System.Windows.Shapes.Rectangle rectangle = o as System.Windows.Shapes.Rectangle;
  20:        if (rectangle != null)
  21:        {
  22:          MyRectangle.Opacity = 1;
  23:          MyText.Text = "You clicked rectangle! Application has been running for " + 
  24:            runningTime + " seconds.";
  25:        }
  26:   
  27:        System.Windows.Controls.TextBlock textBlock = o as System.Windows.Controls.TextBlock;
  28:        if (textBlock != null)
  29:        {
  30:          MyRectangle.Opacity = MyRectangle.Opacity * 0.8;
  31:          MyText.Text = "You clicked text block! Rectangle is fading away...";
  32:        }
  33:      }
  34:    }
  35:  }

Ahora usted probablemente estará ansioso de saber lo que hace la aplicación :-) Aquí esta nuestra aplicación luego de un par de solicitudes (request):

image

Y si el usuario hace click en el rectangulo…

image

Si el usuario hace click en el texto…

image

Ahora tenemos el ambiente de desarrollo listo así que podemos construir y probar la aplicación Silverlight 1.1 y hospedarlo en SharePoint. Aquí están los pasos que tiene que seguir para probarlo usted mismo.

1) Cree un proyecto Silverlight en VS2008
2) Escriba el Código :-)
3) Construya la solución
4) Copie el contenido del folder ClientBin\*.* al folder _LAYOUTS\ClientBin del Sharepoint
5) Copie los archivos *.xaml de su proyecto a la carpeta Silverlight del SharePoint. (Nota: tiene que verificar que este correcto el path en x:Class! Vea mi Page.xaml y la línea 5 en el fuente)
6) Cree la página que usa el web part Silverlight y seleccione su nuevo archivo XAML

Esta fue mi pequeña introducción a Silverlight 1.1 con SharePoint. En este ejemplo yo use archivos .xaml estáticos ubicándolos en el sistema de archivos para hacer todo tan simple como sea posible… solo quería demostrar como usted puede empezar a experimentar con esta combinación. Esto puede ser ampliado y mejorado en muchas formas diferentes y probablemente volveré a este tema en futuros posts.


De todas formas... Happy hacking!
J

Hasta aqui el Post de Jane.

Espero que sea de Ayuda.

Juan Carlos Peláez

MCTS Distributed Applications

Arquitecto de Software.

Keywords: Silverlight, Sharepoint, VS2008, WSS 3.0

Wednesday, January 09, 2008 4:46:18 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Articulos de Desarrollo | Sharepoint | Silverlight | VS2008 | WPF
# Monday, October 29, 2007


Share

Aunque de esto ya se ha hablado mucho algunas anotaciones importantes sobre paginas maestras:

 

Definición:

Una página maestra es una plantilla de diseño y distribución que se puede aplicar a un sitio, (basicamente un archivo del mismo tipo del aspx, pero que tiene la extensión .master y la directiva @master en vez de la directiva @page de las páginas normales) de esta forma se facilita el control del Look and Feel de todo el sitio en un solo punto y se garantiza que el sitio en todas sus páginas se va a ver igual.  Por ejemplo un menú o cualquier ayuda de navegación que deba estar en todo el sitio es un buen candidato para estar en la página maestra y no en cada página del sitio.

 

La página maestra incluye uno o varios controles de tipo asp:content.:

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="server">

 

Creación de la página de contenido:

Las páginas de contenido en el proyecto de VS2005 que van a utilizar las página maestras son páginas del tipo Web Content Form, lo que implica que en la aplicación pueden haber páginas que usan el masterpage y otras que no, lo que dependiendo de cada escenario puede ser útil o no.

Cuando se crea la página Web Content Form, se obtiene algo como esto:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="ReportsApp._Default" MasterPageFile="~/ReportingApp.Master"%> <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1"  Runat="Server"> </asp:Content>

 

donde se nota que se está usando un master y que como ese contiene todo el código lo único que tengo aquí es mi área de trabajo que es el control asp:content.

En tiempo de diseño se ve la master al fondo más oscura y el área de diseño más clara al frente:

Ej: Web Content Form con Master Page

 

Asignación de la página maestra:

 

1. La página maestra puede asignarse a la página en la línea de directivas (la que empieza por @) usando el atributo MasterPageFile:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="ReportsApp._Default" MasterPageFile="~/ReportingApp.Master"%>

 

2. La pagina maestra puede asignarse a todo el sitio en el web.config de la aplicación web:

<configuration> <pages masterpagefile="~/ ReportingApp.master"> </configuration>

 

VS2008 y las Páginas maestras.

 

Bien, hasta aquí, poco o nada nuevo, pero algo que casi nadie sabe es que en VS2005 (Framework 2.0), se pueden utilizar masterpages anidadas, esto es una master que referencia a otro master page para tener más opciones de diseño, (es decir una masterpage que usa el atribute masterpagefile), por ejemplo se puede tener el master page del sitio, y luego el master del administrador y el master de reportes y que ambos apunten al master del sitio para tener, por ejemplo, encabezados iguales y cosas por el estilo. El problema era que en vs2005 no se tenía soporte gráfico en el editor para esto así que una vez que se ponía el código se perdía el editor. Pues bien, esto ha sido corregido en VS2008 ahora se tiene todo el poder del nuevo editor gráfico con las páginas maestras.

 

Otra cosa buena es que como VS2008 tiene soporte multitarget (para el framework 2 en adelante) no es necesario migrar todo el proyecto, solo se necesita abrir el VS2008, crear un proyecto en Framework 2.0 y usar las características del editor gráfico:

VS2008MultiTarget

 

Espero que sea de ayuda

 

Juan Peláez

MCTS.

Miembro del Microsoft Speakers Group Andino.

Miembro del Microsoft Influencer Framework.

 

Keyword: Paginas Maestras, Master Pages, VS2005, VS2008, Visual Studio 2008, Visual Studio 2005,  MasterPageFile, Como unificar diseño y estilos en sitios Web, ASP.NET 2.0, Microsoft.Net, Framework 2.0, Framework 3.5.

 

Monday, October 29, 2007 11:30:06 AM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Articulos de Desarrollo | ASP.NET | Visual Studio


Share

Hace un par de días Miguel Mendoza (El Miguel Mendoza) MVP y uno de los muchachos de DevSynergy me llamo para ofrecerme un pequeño problema con MIIS 2003, después de preguntar MIIS What?, descubrí que no existe mucha información en Internet sobre el desarrollo de Aplicaciones que involucren esta aplicación así que como resultado del trabajo realizado para resolver el problema y la investigación respectiva se genero este Post.

 

1. Que es MIIS?

MIIS es el acrónimo de Microsoft® Identity Integration Server (MIIS) 2003, una herramienta de software extremadamente potente de Microsoft que permite desarrollar soluciones de Single Sign-On en entornos distribuidos, esto significa que los usuarios solo tendrán un nombre de usuario y contraseña para todas sus aplicaciones, el nuevo santo grial de las organizaciones con decenas de sistemas o aplicaciones cada una de ellas con su propio sistema de usuarios.

MIIS permite realizar una sincronización entre los sistemas de usuarios para que cada uno de los sistemas tengan el mismo nombre de usuario y contraseña, el usuario tendrá que seguir ingresando por el login de la aplicación que quiera usar (CRM, SAP, Intranet, Red, VPN, etc) pero ahora solo tendrá una contraseña y usuario sin importar cuantos sistemas tenga, que tipo de sistemas sean y cuando actualizó la contraseña.  Para poder hacer esta maravilla MIIS recolecta información de fuentes externas como el Directorio Activo, SQL Server, SAP, o cualquier otra cosa a la que se pueda conectar y mezcla la información en un repositorio central llamado el Metaverso. Una vez que la información se ha recopilado en el metaverso se puede seleccionar que tipo de información se traslada a cada sistema de información durante el proceso de sincronización.

 

2. Como funciona?

Luego de instalar MIIS (en WK2003 enterprise), se instalan los conectores que requieran sus sistemas, por ejemplo, el del SUN, el de SAP, los de SQL server para sus aplicaciones que almacenan usuarios en SQL, etc. hecho esto se configuran las aplicaciones que quieren compartir usuarios, por ejemplo, en SQL hay una aplicación de Intranet que usa una lista de usuarios con nombre y teléfono, esta SAP y tienen un servicio de Directorio Activo de SUN y de Microsoft. Así que configura esos conectores, crea el metaverso con la información mínima que requiera cada sistema, apunta cada campo del metaverso a los campos del sistema de identidad que tenga, ej: ID (De usuario) es accountname en el directorio activo, mientras que en SAP es user name y en el SQL es CodigoUsuario, con esta información el MIIS se conecta a los sistemas, extrae la información y crea una tabla única (metaverso donde están todos mis id, otros datos y mi información de usuario).

Después de construido el metaverso se configura para que sincronice todos los sistemas con el campo AccountName por ejemplo, y esta aplicación hace un trabajo de sincronización para que en todos los sistemas el usuario sea el mismo.

Cada vendor puede construir conectores para el MIIS de forma que puedan integrarse cada vez más sistemas.

Algunos de los conectores más usados ya los nombramos pero también existen conectores para Live ID, el servicio de Microsoft de identidades centralizadas y que era el objeto de este problema, La nueva versión de MIIS es Microsoft Identity Lifecycle Manager 2007 (ILM 2007)

 

3. Entendiendo la Base de Datos de MIIS 2003

La base de datos de MIIS está en SQL Server y está conformada por un conjunto de tablas medianamente grande de las cuales las tres más importantes son mms_connectorspace, mms_agent, mms_metaverse

De ellas se puede obtener la siguiente información:

a. La lista de todos los agentes cargados en MIIS 

select * from mms_management_agent

b. La lista de todos los conectores (sincronizadores)

select * from mms_connectorspace

c. La lista y los atributos de los usuarios creados por los procesos de consolidación de identidades.

select * from mms_metaverse

 

4. Desarrollando algo para MIIS.

Ahora MIIS tienen un modelo de objetos en unos ensamblados que están disponibles al instalar la aplicación, estos son de la versión 1.1. del framework, así que para desarrollar algo para MIIS se recomienda usar VS2003, una de las clases mas útiles es Utils que contiene una serie de métodos que le permiten ubicar un objeto (usuario).

Sin embargo muchas cosas se pueden hacer realizando una consulta directa sobre el metaverso, (incluso los ejemplos más completos del MSDN usan esta técnica), por ejemplo si quiere saber qué nombre de cuenta de usuario le asigno Live a un usuario que usted creo puede hacer algo como select LiveAccount from mms_metaverse where AccountName = 'jpelaez', importante eso si verificar que exista un índice (se crean en la consola del MIIS) para el campo AccountName para que el rendimiento de la consulta sea efectivo.

 

5.Recursos:

http://www.server-management.co.uk/index.php?option=com_content&task=view&id=130&Itemid=50

http://www.puttyq.com/

 

6.Ejemplos

Aprovisionamiento delegado de grupos de usuarios usando MIIS 2003

http://www.microsoft.com/technet/technetmag/issues/2006/07/Automate/

Flujos de trabajo para aprobación de usuarios usando MIIS 2003

http://www.microsoft.com/technet/technetmag/issues/2007/05/Workflow/default.aspx?loc=es/

 

Espero que sea de Ayuda.

 

Juan Carlos Peláez

MCTS

Miembro del Speaker Group de Microsoft Andino

Miembro del Microsoft Influencer Framework Andino.

 

Keywords: MIIS 2003, Identidad unica, Windows Live ID, mms_metaverse, metaverso, sincronización de contraseñas, sincronización de usuarios, Single Sign-On.

Monday, October 29, 2007 11:28:01 AM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Articulos de Desarrollo | MIIS 2003
# Thursday, October 11, 2007


Share

Durante el desarrollo de los proyectos de Gattaca con Microsoft Expression Blend 2 Preview de Septiembre se nos ha presentado este error al compilar desde Blend

error MSB4126: The specified solution configuration "Debug|MCD" is invalid. Please specify a valid solution configuration using the Configuration and Platform properties

Compilando desde Visual Studio funciona perfecto, Juan Diego ha encontrado la solución como comenta en este Post.

Espero que sea de Ayuda.

Juan Carlos Peláez

MCTS.

Keyword. Debug, MCD, Blend, Expression, Errores Compilación, Tips.

Thursday, October 11, 2007 9:41:47 AM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [1] - Trackback
Articulos de Desarrollo | Blend Expression | WPF
# Tuesday, October 02, 2007


Share

Hace algunas semanas Miguel Mendoza me encargo un proyecto para autenticar usuarios contra los servicios de Windows Live (ID) y reenviarlos a la página principal de Windows Live donde podrían contar con los servicios de la plataforma  de Servicios de Microsoft.

Como esta es una aplicación web y después de revisar el tema, la mejor alternativa fue utilizar el SDK for Windows Live ID para autenticación Web, que se descargar desde aquí., sin embargo al momento de instalarlo tuvimos muchos problemas, cada vez que tratábamos de ejecutar obteníamos problemas de permisos que impedían la instalación. Reiniciamos con varios roles, promovimos los usuarios, etc, pero nada servía. Luego de una búsqueda por internet encontramos la solución que público aquí con la esperanza de que ayuda a varios a no perder tiempo.

Problema: Al instalar el SDK de Windows Live ID para Web Autentication se reporta problemas de permisos que impiden finalizar la instalación.

Causa del Problema: Por un error en la compilación del archivo, el instalador requiere la existencia de los grupos User y Power User, como mi maquina esta con el sistema operativo en Español  no existen dichos usuarios (por eso siempre se recomienda no referenciar los grupos por nombres si no por el ID del Grupo, parece que este grupo de desarrollo de MS no lee el sitio de Patterns and Practices).

Solución: Crear dos grupos con los Nombres Users y Power Users, agregar su usuario (del dominio y de la maquina local), incluir de las políticas de la maquina los usuarios Autenticados e Interactivo (NT Authority\Interactive).

Cerrar la sesión, ingresar nuevamente y correr el Instalador.

Ahora sí debería poderlo instalar. 

WindowsLiveWebAuth

(despues de 3 días,  finalmente se instalo ;-))

 

Espero que sea de Ayuda

 

Juan Carlos Peláez

MCTS

Miembro del Microsoft Speaker Group Andino

Miembro de Microsoft Influencers Colombia

 

KeyWords: Windows Live ID, Live ID SDK, Problemas, Instalación, Permisos, Autenticación usando Windows Live ID, Autenticación usando Passport

Tuesday, October 02, 2007 12:53:48 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Articulos de Desarrollo | Web Services | Windows Live | Windows Live ID
# Monday, September 24, 2007


Share

En el CodePlex se ha publicado la version 1.0.10920.0 del toolkit de ajax, un conjunto de controles que en conjunto con las extensiones AJAX para ASP.Net facilitan la construcción de páginas web que utilicen los beneficios de AJAX, este conjunto de controles puede descargarse de este link más de 1000 bugs han sido correguidos en esta versión y se han incluido algunas mejoras especificas en controles como el calendario, el control de autocompletar, el slider entre otros.

Si usted viene usando este conjunto de controles no deje de actualizarse para poder tener todos los beneficios de las correcciones, muchas de ellas generadas por la comunidad ya que este proyecto es en la practica un proyecto Open source de Microsoft.

 

Hace poco en un evento de Microsoft Colombia se dió una discusión sobre AJAX y el toolkit, una recomendación importante para que el rendimiento de las aplicaciones AJAX sea eficiente es no solo tener el ultimo toolkit sino usar el toolkit script manager que mejora en casi un 80% el rendimiento de las aplicaciones que usan el script manager de la extension ajax de asp., esto es posible al combinar el script antes de enviarlo al cliente y eliminar todos los espacios en blanco del archivo, lo anterior genera un archivo .js más pequeño que se envia para el cliente. (que es lo que hace el toolkitscriptmanager)

 

Asegurese que la version de la referencia sea 1.0.10920, tambien puede darse cuenta que esta usando una versión más actualizada revisando los iconos en el panel de herramientas (toolbox).  Anexo imagen.

AJAX10920

 

Espero que sea de Ayuda

 

Juan Carlos Peláez

MCTS

Miembro del Speaker Group de Microsoft Andino.

Miembro del Grupo Influencers de Microsoft Colombia.

 

Keywords: AJAX, ATLAS, ASP.Net, Control Toolkit, Version 10920, Microsoft, Juan Peláez, Aplicaciones Web, Framework AJAX, Proyectos Web.

Monday, September 24, 2007 8:44:08 AM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | AJAX | Articulos de Desarrollo | Java | Visual Studio


Share

Microsoft ha publicado una nueva versión del producto Blend versión 2. El preview de Septiembre, en esta versión se han implementado algunas nuevas funcionalidades que son realmente importantes y que facilitarán la vida de los que están haciendo una transición o están haciendo convivir Flash y Expression.

Algunas de las más notorias características de la versión de Septiembre de Blend 2 son :

 

Integración con Visual Studio 2008 Beta 2.

Con esta versión de Blend pueden abrirse proyectos de Visual Studio 2005 y 2008, sin embargo los proyectos por default no son de VS2008 ya que no es posible abrirlos en VS2005 aunque se tenga Microsoft .Net Framework versión 3.5.

 

Creación de Controles desde objetos existentes.

Ahora Blend incluye una nueva funcionalidad que permite convertir contenido existente en un control que puede ser usados nuevamente (instanciado). El elemento seleccionado, sus recursos y sus animaciones son refactorizados en un nuevo control.

 

Mejoras en el Editor del XAML y una vista Split

El nuevo Blend permite abrir un documento XAML y ver al mismo tiempo el código y el diseño en una vista "Split", también permite modificar la fuente, el tamaño y la indentación del código XAML, en esto se acerca mucho a lo que puede hacerse con VS2008 que contiene esta misma vista Split para HTML y XAML.

BlendSeptiembreSV

 

Selector de StoryBoards.

El selector de StoryBoard (Picker) reemplazo la caja de storyboard anterior, el selector permite salir del modo de grabación, le permite crear una nueva animación, duplicar, reversar o eliminar la animación seleccionada. También puede renombrar la animación seleccionada.

BlendSeptiembreSBP

Propiedades del StoryBoard y KeyFrame.

Blend de Septiembre permite modificar las propiedades desde el panel de propiedades, ahora se puede modificar la dirección de la animación y el modelo de repetición de la misma.

 

Animación Vertex

Blend de Septiembre contiene una nueva funcionalidad para animar vértices individuales (puntos y tangentes) en una línea. Antes si se modificaba el vértice la  forma original se modificaba de forma permanente. Creo que esto resuelve un problema de animación de formas que era muy extraño para los diseñadores de Flash.

 

Barra de "Controles"

Una nueva barra sobre la tabla de arte permite identificar e incluso seleccionar objetos dentro de la jerarquía del template, esto permite cambiar rápidamente el alcance en los procesos de edición de las plantillas y los estilos en WPF.

BlendSeptiembreBC

 

Inserción de Fuentes

Blend 2 contiene nueva funcionalidad para garantizar que las fuentes que se seleccionaron en el proyecto son las mismas que el usuario verá al momento de ejecutar la aplicación, las fuentes ahora se insertan en el proyecto para garantizar su adecuada distribución.  El nuevo menó Font Embeding permite insertar la fuente.

BlendSeptiembreFE

 

 

 

Espero que sea de ayuda

 

Juan Carlos Peláez

MCTS

Miembro de Microsoft Speaker Group Andino

Miembro del grupo Influencers de Microsoft Colombia.

 

Keywords: Expression Blend, Microsoft, .Net, WPF, Nuevas Caracteristicas, StoryBoards

Monday, September 24, 2007 8:35:46 AM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Articulos de Desarrollo | Blend Expression | SilverLigth | WPF


Share

Extractado del Blog de Jesse Ezell, quien ha tenido una amplia experiencia en desarrollo de herramientas, proyectos y soluciones usando flash.

Comparación entre Silverlight y Flash, principales características diferenciadoras de ambos productos.

(...)

Animaciones

Las animaciones en Flash son del tipo de transformación de matrices, uno puede aplicar una matrix a un elemento basado en frames para generar el movimiento, quiere mover algo a través de la pantalla en 3 segundos?, calcule cuantos frames estos 3 segundos necesitarán, luego calcule las matrices que cada frame requiere. No olvide que el reproductor no mantiene la misma tasa de frames a no ser que se coloque un archivo de audio en blanco, así que los 3 segundos pueden convertirse en 2, 6 o 5, dependiendo de que está haciendo el procesador.

Silverlight soporta el modelo de animaciones de WPF, que no solo es basado en tiempo más que en frames, sino que permite definir las condiciones de principio y fin y él se encargará de llevar la animación a donde se desea, no hay que trabajar con matrices, no hay que calcular posiciones en varios frames. La animación simplemente funciona.

Formas

Flash almacena sus formas usando un registro binario. Para escribir definiciones de forms, se necesita la licencia de un tercero del SDK del archivo flash o construir su propio SDK, no es muy difícil, pero requiere un curva de aprendizaje y la habilidad para manipular cosas al nivel de bit, no es el tipo de cosas que la mayoría de las personas puede escribir y depurar en una tarde.

Silverlight usa XAML, XAML está basado en texto y puede ser exportado usando cualquier simple objeto XAML, no se requiere comprar librerías especiales para escribir los archivos, tampoco hay necesidad de escribir sus propias librerías, solo se coloca algún texto en un archivo y listo, el tipo de cosas que pueden ser depurados y completados en una tarde.

Texto

Flash almacena sus fuentes usando la misma definición que usa para las formas. El reproductor no entiende archivos TTF, así que al final uno termina sumergido en las definiciones del API de Win32 y la vaga definición del formato de archivo de Flash, es posible que uno tarde años tratando de entenderse con todas las complicaciones de las fuentes.

Silverlight le permite a usted insertar la información de las fuentes true type directamente en su proyecto, y descargar esa información con el objeto que se descarga. No se necesita nada especial, no se necesita manejar nada especial, simplemente funciona.

Video / Audio

Flash soporta múltiples formatos de video, el último codec es realmente de alta calidad y con un excelente uso del ancho de banda. El problema es que si usted está creando una herramienta que exporta contenido flash...el formato que usa no está soportado por nadie más. El video codec original, la implementación H.263 propietaria de sorenson es una versión mutante de H.263. La compresion sigue la especificación muy cerca, pero hay un lista de características que se salen de la especificación y no permiten completar la construcción de un encoder propio. el ultimo encoder de On2 lo pone en una posición peor. Licenciar el Codec Sorenson no es muy costoso, pero el de On2 si lo es, la compañía está tratando de aumentar su valor de acción de los 2 dólares actuales a través del modelo de licenciamiento del codec usado por Flash. Los formatos de Audio que soporta flash son todos propietarios, excepto por el ADPCM, que nadie usa por sus problemas de compresion, y MP3 que requiere licencias de terceros para las librerías de conversión.

Comparando eso con la historia de Silverlight, Silverlight implementa el codec VC-1 para video (un estándar de la industria), también soporta WMV and WMA.  Casi todo el mundo tiene Windows Movie Maker, pero si lo no tiene no importa, por que?, porque Microsoft libero un encoder gratuito para producir WMA y WMV. Así que, no solo usa formatos que la gente puede usar comúnmente, sino que Microsoft también provee su producto con SDKs si usted quiere hacer el encoding por sí mismo. La mejor parte de esto es que Microsoft no está basado en el licenciamiento de WMA/WMV para mantenerse. No solo es fácil de integrar sino que es barato.

Scripting

Usted puede reusar clases de C# (o de VB. Nota JCP) de su propia herramienta dentro del contenido exportado. Si se toma la ruta de flash todas las clases deberan escribirse dos veces, usted necesitara clases en .net para manejar la experiencia de tiempo y clases Flash para manejar el tiempo de ejecución. Si tiene componentes de servidor tendrá que volver a .net y escribir todas las clases que el componente de runtime están usando.  Por ejemplo, digamos que uno está escribiendo un herramienta que exporta exámenes con gran contenido gráfico, con Silverligth/.Net las mismas clases y entidades que trabajan con los resultados en el player pueden usarse en el servidor. Con Flash, usted tiene que escribir toda la lógica 2 veces y tenerla sincronizada en cada cambio.

Tools

Se puede crear contenido Silverlight con las mismas herramientas que usted usa a diario. Visual Studio.net es de lejos la más poderosa herramienta de desarrollo y el IDE más popular. Usted puede poner todo el código de los componentes del servidor, los componentes de ejecución del player y las herramientas suyas en el mismo proyecto, no se requiere habilidades extras, no hay que contratar un experto en Flash para hacer  las partes gráficas. Cada desarrollador puede contribuir a completar la aplicación. (...)

Para nosotros en Gattaca la experiencia ha sido muy buena, hemos desarrollado una aplicación que llama por teléfono, imprime, se conecta con servicios web usando WCF y tiene una riqueza gráfica inmensa y todo trabajando en equipo el desarrollador en .net y visual studio y el diseñador en blend.

 

Espero que sea de ayuda.

 

Juan Carlos Peláez

MCTS

Miembro del Speaker Group de Microsoft Andino

Miembro del Grupo Influencers de Microsoft Colombia

 

Keywords: Silverlight, WPF, Flash, Visual Studio, .Net, Video, Audio, Encoders, Comparación

Monday, September 24, 2007 8:30:27 AM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Articulos de Desarrollo | Blend Expression | SilverLigth | WPF
# Thursday, September 20, 2007


Share

Durante el desarrollo de nuestro proyecto Real en Blend, hemos entrado en la fase final de pruebas e instalación en el cliente. A pesar de nuestra recomendación de comprar una maquina con Windows Vista, se han comprado una maquina Dell bien bonita pero con Windows XP, por lo que nos enfrentamos a diversos problemas que serán objeto de otro post, pero este me pareció bastante especial y aburridor como para ser publicado inmediatamente.

El Problema: Al instalar la aplicación desarrollada con Blend Expression (preview de agosto) y Visual Studio 2008, los efectos de sonido asociados al StoryBoard se perdieron.

Aunque los archivos se encontraban en la misma carpeta del ejecutable, con el mismo nombre, y con todo bien creado y configurado no se ejecutaban cuando llegaba el momento. Tocándolos por aparte si estaban sonando.

La solución: Buscando en Internet encontramos que uno de los workarounds detectados de Blend (incluso publicados en la página de readme en internet que no leímos y que anexamos aqui el link: Blend) indican que tiene que tenerse la versión 10 de Windows media player o superior , asi que bajamos la version 11, y funciono perfecto, ahora nuestros storyboard tienen audio.  (y lo más increíble, es un control, es animado, tiene audio y es una camiseta!!!, adjunto una foto, Juan Diego después hablará más del tema, pero la camiseta roja, sobre la que caen flores, se mueven los tambores y tiene el sonido es un control, como un botón o una lista tiene propiedades de databind, y es un gráfico vectorial que no se pixela en ningún tamaño, toda una lista de características y tecnologías nuevas. -:)),

 

BlendReal1

Corolario: Para poder instalar una aplicación desarrollada en Microsoft Expression Blend y Visual Studio 2005 en una maquina XP, esta máquina tiene que tener el framework 3.0 instalado, lo anterior puede que no sea muy claro para todos, pero el componente que permite hacer el render del XAML que es el núcleo gráfico de la aplicación solo está disponible a partir del framework 3.0. De todas formas esta es una buena noticia para nosotros como desarrolladores por qué podemos hacer aplicaciones con Blend que tienen diseños, interactividades y experiencias de usuario muy novedosas pero que corren (en general) en la base instalada de usuarios con XP SP2.

Preguntas: Analizando este problema de hoy con Juan Diego nos entró la duda sobre lo que pasara con silverligth, es decir si meto audio a una aplicación silverlight y no tengo windows media player 10 o superior no sonará?, habrá que probarlo.

Espero que sea de ayuda, nosotros pasamos varias horas tratando de encontrar la causa de este comportamiento.

 

Juan Carlos Peláez

MCTS

Miembro de Microsoft Speaker Group Andino

Miembro del Grupo Influencer de Microsoft Colombia.

Keywords: Microsoft Expression Blend, Gattaca, Visual Studio, Framework 3.0, .Net, Windows XP, Audio, Sonido, Windows Media Player, Problemas, storyboard.

Thursday, September 20, 2007 8:24:10 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Articulos de Desarrollo | Blend Expression | SilverLigth | WPF
# Wednesday, September 19, 2007


Share

Me pregunta Ivanov Cepeda de Microsoft Colombia como conectar una aplicación Java a SQL Server 2005, con la ayuda de algunos de los muchachos del grupo COS (Commercial Open Source) de Gattaca hemos revisado el tema y tenemos la siguiente alternativa:

 

1. Descargar de este URL el JDBC Driver para SQL 2005.

2. Seguir con mucha atención las instrucciones del archivo Install.txt,  este driver es tanto para sistemas operativos windows como linux, para los linux trae el tar.gz, para los windows el .exe.

3. Ahora si puede escribir una clase como esta

 
package persistencia;

import java.util.*;
import java.sql.*;


public class Consultas {

    
    
    public static void main(String[] args) {
        
        // Create a variable for the connection string.
        String connectionUrl = "jdbc:sqlserver://192.168.16.19:1433;forwardReadOnlyMethod=direct" +
            "databaseName=MyDataBase;user=UserSQL;password=xxxxxxxx";

        // Declare the JDBC objects.
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        
            try {
                // Establish the connection.
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                    con = DriverManager.getConnection(connectionUrl);
            
                    // Create and execute an SQL statement that returns some data.
                    String SQL = "SELECT TOP 10 * FROM ApplicationUser;";
                    stmt = con.createStatement();
                    rs = stmt.executeQuery(SQL);
            
                    // Iterate through the data in the result set and display it.
                    while (rs.next()) {
                        System.out.println(rs.getString(4) + " " + rs.getString(6));
                    }
            }
        
        // Handle any errors that may have occurred.
        catch (Exception e) {
            e.printStackTrace();
        }

        finally {
            if (rs != null) try { rs.close(); } catch(Exception e) {}
                if (stmt != null) try { stmt.close(); } catch(Exception e) {}
                if (con != null) try { con.close(); } catch(Exception e) {}
        }
    }

}

Espero que sea de Ayuda, y Gracias a Carlos Andres Valencia que le saco un rato a sus 11 proyectos para ayudarnos a resolver esto.

 

Juan Carlos Peláez

MCTS

Miembro del Microsoft Speaker Group Andino

Miembro de Influencers Group Colombia.

 

Keywords: SQL Server 2005, JDBC, JDBC Driver for SQL Server 2005, Conectividad, JAVA, SQL2005, SQL Server 2005, Drivers, Interoperabilidad

Wednesday, September 19, 2007 3:51:29 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
Articulos de Desarrollo | Java | SQL Server 2005
# Monday, September 10, 2007


Share

Microsoft ha anunciado el lanzamiento de la version final (1.0) de Silverlight un plugin para los diferentes browsers de internet que permite ejecutar código manejado y/o javascript con presentaciones innovadoras basadas en XAML, así como mejoras en aspectos como el video.

Una de las características principales que son necesarias para que esto sea exitoso y pueda competir realmente con Flash Player es que sea interoperable entre plataformas y entre los browsers. para lograr que funcione correctamente sobre Linux el grupo de Mono (en Novell) con Miguel Icaza a la cabeza han establecido una alianza para crear MoonLight, la version Linux, de SilverLight.

Algunas de las caracteristicas importantes de Silverlight incluyen:

  • · Render de XAML en el browser, animaciones, gráficos vectoriales y todos los juguetes que contiene esta tecnología.
  • · soporte para streaming desde cualquier web server, esta característica es muy útil ya que simplifica la infraestructura y la experiencia de usuario al implementar video en un sitio web.
  • · Soporte opcional para servidores de Streaming como Windows Media Server. (Producto gratuito que hace parte de Windows Server)
  • · Muchas mejoras en la experiencia del usuario al trabajar con Video en el Servidor.

También fue anunciado el lanzamiento de la versión final de Expression Encoder, una aplicación realmente buena para generar videos que pueden usarse con Silverlight, esta aplicación permite tomar un video de casi cualquier formato y convertirlo en WMV.

Sobre la propagación de este componente, algunos cálculos independientes demuestran que los sitios propiedad de Microsoft tocan las dos terceras partes de los usuarios de internet en un año, esto sin contar con muchos otros sitios como terra, MBL, etc. que ya están usando Silverlight en sus sitios garantizarán la rápida popularización de este componente y sus aplicaciones.  

Convirtiendo Archivos a XAML.

Como una de las características fundamentales de Silvelight es el uso de XAML para el manejo de los aspectos gráficos muchos necesitarán convertir sus activos (assets) de otras herramientas o formatos a XAML, para ello algunos han creado herramientas que siguen avanzado en ese tema, una bien recomendada (aunque no la he usado personalmente) está publicada en WPF-Graphics site

Gattaca y Silverlight.

La primera compañía colombiana en anunciar la capacidad de realizar proyectos con Expression Blend y  Visual Studio, así como proyectos que utilicen las funcionalidades de Silverlight es Gattaca S.A. Esto beneficia especialmente a los clientes de Gattaca en España, Colombia y Latinoamérica.

 

Pd:

Un buen ejemplo de cómo usar Silverlight: MSN's new Election '08 site, también creo que es un buen ejemplo de cómo debería ser usada la tecnología en un proceso electoral, como el que se avecina en Colombia,  sin embargo se requiere contenido de parte de los diferentes candidatos que es algo que parece que ninguno tiene.

 

Espero que sea de Ayuda.

 

Juan Carlos Peláez

MCTS

Miembro del Speaker Group de Microsoft Andino

Miembro del Influencers Group  Colombia.

 

Keywords: Silverlight, Microsoft Expression Encoder, Microsoft Expression Blend, Encoder, Visual Studio 2008, Convertir a XAML, Proyectos con Silverligth, Proyectos con Microsoft Expression.

Monday, September 10, 2007 11:42:58 AM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [1] - Trackback
.net | Articulos de Desarrollo | SilverLigth | Visual Studio | WPF
# Tuesday, August 21, 2007


Share

Otra de las áreas de interés de la Plataforma Microsoft son los servicios de SharePoint, que en la versión 3.0 corren en maquinas Windows 2003 y permiten construir rápidamente intranets, aplicaciones Web y Sistemas de Colaboración muy integrados con la plataforma Windows y Office.

Sin embargo para los desarrolladores que usamos Windows Vista (o Windows XP) en la máquina de desarrollo ha sido un poco complicado desarrollar webparts y otros tipos de proyectos para sharepoint ya que no instalan sobre Windows Vista, esto nos ha llevado a usar soluciones de maquinas virtuales y demás.

Sin embargo buscando en internet he encontrado la forma de instalar las extensiones de SharePoint para Visual Studio 2005, lo que simplifica mucho el desarrollo de estos proyectos sobre mi maquina de trabajo.

La solución es crear la siguiente llave en el registro para que el instalador se ejecute normalmente.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\12.0]
"Sharepoint"="Installed"

Referencia: http://blogs.msdn.com/jannemattila/default.aspx ,

Yo lo acabo de probar y funcionó perfectamente. Aquí una foto de mi Visual Studio en Windows Vista listo para crear un proyecto de SharePoint.

SharePointVSExtensionsOnWindowsVista

Recursos

Windows SharePoint Services

Windows SharePoint Extensions for Visual Studio 2005.

Espero que sea de ayuda.

 

Actualizacion Nov 24 de 2008: Me ha escrito Jesus Arantegui desde España. Él ha descubierto que este procedimiento solo funciona cuando el visual studio estan en el mismo idioma que la extensiones de sharepoint, si uno baja las extensiones en ingles, por ejemplo, pero el VS esta en espanol, parecera estar bien instalado pero los proyectos no apareceran en la ventana de creacion de proyectos. 

 

Juan Carlos Peláez

MCTS.

Miembro del Microsoft Speaker Group Andino  

Miembro del Microsoft Influencers Group de Colombia.

KeyWords: Sharepoint Services 3.0,  Juan Peláez, .Net, Windows Vista, Extensiones para Visual Studio 2005, Instrucciones, Instalacion, Programación, Soluciones SharePoint, WSS 3.0. Web Parts, Templates

Tuesday, August 21, 2007 2:04:38 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
Articulos de Desarrollo | Sharepoint | Visual Studio | Windows Vista


Share

Este post es una continuación del anterior sobre FastCGI y el IIS7, en Windows 2008 Beta 3 y Windows Vista, se incluye como soporte nativo FastCGI, lo que permite correr en maquinas Windows aplicaciones PHP y otros lenguajes de Script con altísimo rendimiento y estabilidad, incluso en ambientes en producción. El FastCGI CTP preview 2 también pueden montarse sobre IIS 5.1 y 6.0.

En este post, más allá de las instrucciones de cómo instalar una aplicación PHP en Windows Vista o Windows 2008, hablaré un poco de las razones por las que el rendimiento de las aplicaciones se incrementa al usar FastCGI.

Primero un poco de Antecedentes.

Common Gateway Interface (CGI)

El estándar de facto para aplicaciones en servidores web es CGI, que fue implementado inicialmente por el servidor NCSA. CGI tiene varios beneficios:

· Simplicidad. es fácil de entender

· Independencia del Lenguaje. Las aplicaciones CGI pueden ser escritas en cualquier lenguaje

· Independencia de Procesos. Ya que las aplicaciones corren en procesos separados, las aplicaciones con problemas no pueden dañar el servidor web o acceder al estado interno y privado del servidor.

· Estándar Abierto. Alguna forma de CGI ha sido implementada en todos los servidores web

· Independencia Arquitectónica. CGI no está atado a ninguna arquitectura particular de servidor 

CGI también tiene algunas deficiencias importantes. El problema principal es el rendimiento: debido a que se crea un nuevo proceso para cada request y este se elimina cuando el request se completa, la eficiencia es pobre.

CGI también tiene una funcionalidad limitada: solo soporta el Rol "responder", donde la aplicación genera la respuesta que es enviada al cliente, los programas CGI no pueden asociarse a otras partes del procesamiento del request como autorización o registro de errores.

 

APIs de Servidor

En respuesta a los problemas de rendimiento de CGI, diferentes compañías han desarrollado APIS para sus servidores. Los dos más relevantes son NSAPI de Netscape e ISAPI de Microsoft. El servidor Apache también tiene un API.

Las aplicaciones asociadas al API del servidor pueden correr mucho más rápido que los programas CGI. El problema del Inicio / iniciación se ha mejorado, ya que la aplicación corre en un proceso dedicado de servidor y se persiste entre las solicitudes. Las API del servidor Web, ofrecen mucha más funcionalidad que CGI, cada persona puede escribir extensiones que realizan control de accesos, acceder a los archivos de registro del servidor, y pueden conectarse en otras etapas del procesamiento del request. 

 

Entonces que es  FastCGI?

La interface FastCGI combina los mejores aspectos de CGI y las APIs propietarias. Como CGI, las aplicaciones FastCGI corren en procesos separados e independientes. Las ventajas de FastCGI's incluyen:

· Rendimiento. Los procesos FastCGI son persistentes –se re usan en manejar múltiples solicitudes. – Esto resuelve los problemas de rendimiento de CGI de crear nuevos procesos para cada request.

· Simplicidad, fácil migración desde CGI. La librería de aplicación FastCGI simplifica la migración de las aplicaciones CGI existentes. Las aplicaciones construidas con FastCGI pueden correr programas CGI para compatibilidad con Web Servers antiguos.

· Independencia de Language. Como CGI, las aplicaciones FastCGI pueden ser escritas en cualquier lenguaje.

· Independencia de Procesos. Una aplicación FastCGI con errores no puede corromper el core del servidor web o alguna otra aplicación. Una aplicación FastCGI no puede robar ningún secreto (como las llaves de sesión para encripción) del servidor Web.

· No-propietario. FastCGI es soportado por todo los productos del Open Source del Mercado, incluyendo apache, NCSA y ahora es soportado por servidores comerciales de Microsoft y Netscape.

· Independencia Arquitectónica. La interface FastCGI no está atada a ninguna arquitectura particular de servidor. Cualquier servidor puede implementar la interface FastCGI. De igual manera, FastCGI no impone ninguna arquitectura a la aplicación: las aplicaciones pueden ser single o multi-threaded, sin importar la arquitectura de hilos del servidor web.

· Soporte para computación distribuida. FastCGI prove soporte para correr aplicaciones remotamente, lo cual es útil para distribuciones de carga y manejo externo de web sites.

 

La interface FastCGI

La funcionalidad que provee la interface FastCGI es muy similar a la que provee CGI. Para entender mejor el protocolo FastCGI. El procesamiento de peticiones CGI es así:

1. Para cada Request, el servidor crea un nuevo proceso y el proceso se inicializa por sí mismo.

2. El servidor web pasa la información del request( como host remoto, nombre de usuario, encabezados HTTP, etc) a las variables  de entorno del programa CGI.

3. El web server envía cualquier input del cliente  (como valores entrados por el usuario en un formulario HTML) al estándar input del programa CGI.

4. El programa CGI escribe cualquier output para que sea retornado al cliente como salida estándar. La información de error es escrita por el web server.

5. Cuando el proceso CGI se cierra, la solicitud queda completa.

FastCGI es conceptualmente muy similar a CGI, con dos diferencias principales:

· Los procesos FastCGI son persistentes: después de finalizar una solicitud, los procesos quedan en espera en vez de finalizar. 

· En vez de usar variables de ambiente del sistema operativo y pipes,  el protocolo  FastCGI multiplexa la información del ambiente, el input  estándar, el output estándar y error sobre una conexión full-duplex. Esto permite a los programas FastCGI correr en maquinas remotas, usando conexiones TCP entre el servidor web y las aplicaciones FastCGI.

El procesamiento de una solicitud en una aplicación single-threaded FastCGI ocurre así :

1. El Web server crea la aplicación FastCGI para manejar las solicitudes al servidor. El proceso puede ser creado en el inicio o creado por demanda.

2. El programa FastCGI seinicializa  por sí mismo, y espera una nueva conexión con el web server.

3. Cuando llega una solicitud de un cliente, el servidor  web abre una conexión a los procesos FastCGI. El servidor envía la información de ambiente y el input estándar sobre la conexión.

4. el proceso FastCGI envía la salida estándar y la información de errores de regreso al servidor sobre la misma conexión. 

5. Cuando el proceso  FastCGI cierra la conexión, la solicitud se completa. El proceso FastCGI queda a la espera de otra conexión desde el servidor web.

Las FastCGI pueden correr localmente  (en la misma máquina que el web server) o remotamente. Para aplicaciones locales, el servidor usa un  full-duplex pipe para conectarse con el proceso de la aplicación  FastCGI . Para aplicaciones remotas, el servidor usa conexiones TCP.

Las aplicaciones FastCGI pueden ser  single-threaded or multi-threaded. para aplicaciones  single threaded, el servidor web mantiene un pool de procesos  (si la aplicación corre localmente) para manejar las solicitudes de los clientes. El tamaño del Pool es configurable por el usuario. Las aplicaciones FastCGI Multi-threaded pueden recibir múltiples conexiones del web server y manejarlas de forma simultánea en un solo proceso.  (De esta forma lenguajes, con soporte para multi thead, garballe collection, entre otros, lo hacen lenguajes naturales para implementar aplicaciones multithread usando FastCGI)

 

Roles de Aplicación.

Un problema importante con CGI es su funcionalidad limitada: los programas CGI solo proveen respuestas simples al request.  FastCGI provee funcionalidad ampliada con soporte para tres diferentes roles de aplicación: 

· Responder. este es el rol básico en  FastCGI y corresponde a la funcionalidad básica ofrecida por CGI hoy. 

· Filter. las aplicaciones FastCGI filtran los archivos solicitados al web server antes de que sean enviados al cliente. 

· Authorizer. El programa FastCGI realizan una decisión de control de acceso para el request ( por ejemplo realizando una búsqueda a la base de datos del tipo Usuario/password).

Otros roles serán definidos en el futuro. Por ejemplo,  un rol "logger" podría ser útil, donde el programa FastCGI podría recibir el registro del log del servidor para procesamiento y análisis en tiempo real. 

 

Que tan rápido es FastCGI?

La respuesta depende de la aplicación, algunas pruebas hechas en internet muestra lo siguiente:

En esta medición se usa un archivo, una solicitud CGI y una fastCGI, usando una aplicación que retorna un número fijo de bytes. 

Archivo  

21ms + 0.19ms per Kbyte

FastCGI

22ms + 0.28ms per Kbyte

CGI

59ms + 0.37ms per Kbyte

Con este dato podemos trata de calcular la velocidad después de migrar una aplicación típica CGI de base de datos a FastCGI, asumiendo que la aplicación toma 50ms para inicializar las conexiones a las bases de datos y genera 5k de datos. Los resultados finales pueden calcularse así: 

CGI

59ms + 50ms + (0.37ms)(5) = 111ms

FastCGI

22ms + (0.28ms)(5) = 23ms

En esta prueba, FastCGI tuvo una ventaja de rendimiento de 5x sobre CGI, más que nada debido a no tener que crear e iniciar un nuevo proceso para cada solicitud.

 

En resumen

FastCGI es un protocolo estándar que permite a ejecutables que usen Frameworks CGI interactuar con un Web Server.

La mayor diferencia con el Protocolo CGI Estándar es que FastCGI rehúsa los Procesos CGI para múltiples peticiones, lo que incrementa el rendimiento en comparación con CGI.

El soporte de IIS para FastCGI permite a IIS hospedar programas CGI normales como PHP, o Ruby On Rails, usando el protocolo FastCGI, ofreciendo alto rendimiento y estabilidad en ambientes de producción

Para usar el soporte  FastCGI en IIS se requieren tres elementos:

· El web server IIS (IIS5.1, IIS6, and IIS7).

· El componente FastCGI para IIS

· EL programa CGI que será hospedado.

Como funciona?

El servidor web despacha las solicitudes http que se han realizado a su aplicación usando el componente FastCGI, este a su vez lanza el programa ejecutable CGI y reenvía el request para que sea procesado. Una vez la solicitud se procesa y la respuesta se finaliza y es retornada al servidor y al cliente, el proceso CGI es usado para llamadas siguientes. Esto permite evita las penalidades de alto rendimiento de iniciar un nuevo proceso para cada solicitud, lo que resulta en mucho mejor rendimiento y escalabilidad en ambientes de producción.

El protocolo FastCGI es estándar si quiere tener más información sobre FastCGI puede ver más aquí. http://www.fastcgi.com/devkit/doc/fcgi-spec.html.

El paquete FastCGI es totalmente compatible con la distribución actual y oficial  PHP 5.x disponible para Windows desde  www.php.net/downloads. También puede usar el preview de Fast CGI con la instalación existente de  PHP 5.x (sin embargo usar la versión ThreadSafe incrementa el rendimiento hasta un 30%)

La versión 5.2.3 también contiene las mejoras desarrolladas por Zend para mejorar el rendimiento del motor de PHP sobre Windows.

Espero que sea de Ayuda

Juan Carlos Peláez

MCTS

Miembro del Microsoft Speaker Group Andino  

Miembro del Microsoft Influencers Group de Colombia.

Keywords: PHP, FastCGI, Windows Vista, Windows 2008, IIS7, Arquitectura.

Tuesday, August 21, 2007 9:20:38 AM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
Arquitectura | Articulos de Desarrollo | FastCGI | IIS7 | PHP | Windows Server 2008 | Windows Vista
# Thursday, August 16, 2007


Share

Con el lanzamiento de Windows 2008 Beta3 (del que Gattaca es Early Adopter gracias a Invitación de Microsoft Colombia) hemos comenzado la fase final de la migración de nuestras aplicaciones para esta plataforma. Sin embargo hay algunas cosas nuevas en este servidor que merecen verse con atención, una de ellas es el soporte nativo de PHP y otros lenguajes de Script como IronRuby a través de una iniciativa conjunta de Microsoft y Zend para desarrollar algo llamado FastCGI que es una nueva forma mejorada para multiprocesamiento de CGI.

 

En este post comentaremos sobre la experiencia de instalar y correr aplicaciones de PHP sobre IIS7 usando FastCGI.

 

El Ambiente.

 

Esto puede hacerse en Windows 2008 Beta3 que tiene el soporte FastCGI nativo ó

En una maquina corriendo Windows Vista con IIS7, en este caso debe instalarse el soporte FastCGI CTP 2 disponible en este link

 

También hay que contar con PHP, este puede descargarse de http://www.php.net/ , aunque hay gente corriendo esto con php4, yo lo hice con la versión 5.2, en esta página pueden descargarse diversas versiones pero la recomendación es bajar la que se llama PHP 5.2.3 Non-thread-safe Win32 binaries [9,523Kb] - 01 June 2007, esta versión está optimizada para correr con IIS7 y FastCGI. (Las otras también corren y muy bien, pero esta tiene un rendimiento 30% superior según las pruebas realizadas por Microsoft y Zend)

 

La Instalación

 

El PHP

 

Descomprimir el PHP en una ruta sin espacios en el nombre, por ejemplo c:\php o d:\php, renombrar el archivo php.ini-recomended por php.ini, abrir el archivo php.ini y cambiar las siguientes variables:

 

Redirect cgi a falso (cgi.force_redirect = 0), modificar la ruta de las extensiones (extension_dir = "D:\PHP\ ext") (o la ruta en donde haya puesto el PHP),

También debe crear las variables de Entorno (En Panel de Control, Sistema, Configuración Avanzada del Sistema, Opciones Avanzadas, Variables de Entorno) Agregar la variables de Usuario “PHPRC = d:\php\php”, agregar en la variable del Sistema Path la ruta: “d:\php\php”

Con eso el PHP debería estar listo para correr en el modo anterior de PHP y también en el modo nuevo. Algunas Variables opcionales que hemos configurado que podían ser de utilidad (short_open_tag = On, error_reporting = E_ALL & ~E_NOTICE, upload_max_filesize = 10M, session.save_path = "D:\PHP\TempSessions")

Finalmente hay que darle permisos en la carpeta PHP al usuario del IIS Process.

 

El FastCGI

 

Descomprimir el archivo que descargo en alguna ruta del Disco, por ejemplo D:\FastCGI

En el archivo de readme.txt vienen las instrucciones muy sencillas que son básicamente:

Instalar FastCGI corriendo desde la consola de comandos con permisos de administrador:

fcgisetup.exe /install

Relacionar el Php con el FastCGI:

fcgisetup.exe /add d:\php\php-cgi.exe PHP, (La ruta donde dejo el PHP)

Listo, esto debería crear los módulos y handlers necesarios en el IIS 7.0, para verificar que quedo correctamente instalado debería encontrar algo como esto en su consola de administración del IIS7.

En la lista de Módulos (por vista de Características) un modulo nativo llamado iisfcgi apuntando a C:\Windows\system32\inetsrv\iisfcgi.dll,

En la lista de asignaciones de controladores (Handlers) una asignación de Script llamada PHP-iisfcgi apuntando a su PHP (por ejemplo: D:\PHP\php-cgi.exe) con una ruta de acceso de solicitudes apuntando a los archivos PHP (*.PHP).

Si tienen otros manejadores apuntando a *.PHP seguramente ya tenia php corriendo o trato de hacer algo similar a esta instalación. En nuestra instalación eliminamos los modulos y controladores asociados a PHP que no eran FastCGI. (Pero antes de hacer esto usted debe entender correctamente que es lo que hacen los módulos y controladores que está eliminando y por que los elimina).

 

Si llego hasta aquí, toda parece está bien instalado y configurado, puede crear una aplicación apuntando a un directorio y crear una página PHP sencilla como esta para probar (modinfo.php que contiene unicamente "<?php phpinfo(); ?>", esta página vista desde el browser debería mostrarle el status del PHP y en la línea Server Api indicar :

 

Server API : CGI/FastCGI

 

La Aplicación.

 

Ahora que ya está corriendo aplicaciones PHP en IIS7 y con el nuevo soporte mejorado de alto rendimiento de PHP FastCGI puede ejecutar sus aplicaciones PHP, nosotros corremos Sugar CRM versión 4.5.1 sobre SQL Server. (Como distribuidores y consultores de Sugar CRM es muy útil poder ofrecer a nuestros clientes el producto sobre IIS7 y estar listos para cuando vayan a los nuevos servidores Windows 2008, pero otra razón importante de escoger esta aplicación es que Sugar ha venido trabajando desde hace más de un año  con Microsoft para ofrecer lo mejor del mundo open source sobre la plataforma Microsoft, esto es soporte mejorado para IIS, optimización para integración con el Directorio Activo, y soporte para SQL Server (incluyendo Express, Standard y Enterprise) y Soporte para el Modelo de Licenciamiento Microsoft Community License. (Parte de la iniciativa Microsoft Shared Source Initiative) entre otros aspectos.

 

En otro post hablaremos de por que esto funciona mejor que antes (las razones) y como correr Ruby o algun otro lenguaje de Scripting usando FastCGI.

Nota: Tengo que agradecer a Ivan Suárez y German Cárdenas del Grupo Commercial Open Source de Gattaca quienes son expertos en PHP, y me han ayudado mucho en la instalación, configuración y comprensión de los conceptos propios de PHP. Gracias Muchachos.

Espero que sea de Ayuda.

 

Juan Carlos Peláez

MCTS

KeyWords: PHP, Windows Vista, IIS7, Windows Server 2008 Beta 3, FastCGI, Sugar CRM, Juan Peláez

Thursday, August 16, 2007 12:41:06 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
Articulos de Desarrollo | FastCGI | IIS7 | PHP | Sugar CRM | Windows Server 2008 | Windows Vista
# Monday, August 13, 2007


Share

Hola a todos, en las últimas semanas hemos estado desarrollando con el grupo de diseño de Gattaca un Juego para uno de nuestros clientes y hemos decidido usar WCF y WPF, estamos usando el preview de Agosto de Blend  y hemos encontrado diversas cosas que pueden parecer interesantes a otras personas que estén llevando a cabo proyectos similares.

 

Desde la perspectiva del Diseñador Gráfico la cosa siempre se ve diferente así que estaremos publicando es este blog algunas notas sobre lo que podemos y no podemos hacer en blend, lo que es fácil y lo que no.  : http://tatuajefalso.wordpress.com/

 

Espero que sea de Utilidad.

 

Juan Carlos Peláez

MCTS

 

Keywords: Blend, Expression, WPF, Diseñadores Gráficos, Juan Peláez, Juan Diego Velazco, WCF.

Monday, August 13, 2007 7:22:08 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Articulos de Desarrollo | Blend Expression | WPF
# Monday, August 06, 2007


Share

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

Monday, August 06, 2007 11:05:07 AM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Articulos de Desarrollo | Pruebas | Visual Studio
# Friday, July 13, 2007


Share

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.

Friday, July 13, 2007 7:35:09 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Articulos de Desarrollo | Visual Studio


Share
 
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
Friday, July 13, 2007 7:33:19 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Arquitectura | Articulos de Desarrollo | WCF | Web Services


Share

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.

Friday, July 13, 2007 7:31:05 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Articulos de Desarrollo | nunit | Pruebas
# Tuesday, July 10, 2007


Share

Aunque no sé si sea  un escenario muy común, (para nosotros en Gattaca si lo es), 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 derivo 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 postUrl

postUrl = "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 asi 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 parametros que se van a pasar al metodo 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 estan 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 articulo 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",

Tuesday, July 10, 2007 1:12:34 PM (SA Pacific Standard Time, UTC-05:00) 

Bookmark and Share

#    Comments [0] - Trackback
.net | Arquitectura | Articulos de Desarrollo | WCF | Web Services
Contácteme
mail: jpelaez at juanpelaez.com
Actualizaciones en Twitter
FeedBurner
Maps
Locations of visitors to this page
Blogroll
[Feed] Eugenio Pace
Arquitecto del grupo Software as a Service en Microsoft
[Feed] Juan Diego Velazco
El mejor diseñador gráfico conocido y un gran tipo
[Feed] Scott Hanselman
Sponsors
Estadísticas
Total Posts: 93
This Year: 3
This Month: 1
This Week: 0
Comments: 42
Archivo
<March 2010>
SunMonTueWedThuFriSat
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910
Acerca de...

Aviso Legal
Las opiniones expresadas en este sitio representan el punto de vista de Juan Peláez sobre diferentes temas y no representan la posición de 3Metas Corp, Microsoft, Studiocom.com.Inc. o de cualquier otra compañía que haya contratado los servicios de consultoría de Juan Peláez

© Copyright 2010
Juan Carlos Peláez
Sign In

Technorati Profile
All Content © 2010, Juan Carlos Peláez
El tema 'Business' para DasBlog fue creado por Christoph De Baene (delarou) y modificado para español por Juan Peláez
Powered by FeedBurner