May 2009 - Artículos

SQL Server 2008: Error instalación MSXML 6.0 Parser (KB933579)

Aquí de nuevo posteando problemas, y la solución encontrada (de mi parte)…todo porque necesitaba instalar nuevas funcionalidades.

NOTA: Si alguien tiene otra alternativa por favor dirigirse a los comentarios del presente articulo . Gracias  :)

[Actualización] Gracias a un comentario de Willy Mejia, que tenemos una solución “menos riesgosa”.

Voy a aclarar que tengo SQL Server 2008 (sin SP1).. tampoco pude probarlo con un instalador con SP1

Lo que necesito es instalar nuevas características a una instancia que la tenia para desarrollo… es decir:

image

 

El mensaje:

Producto: MSXML 6.0 Parser (KB33579) – Error en la instalación

image

 

 

Tratando de instalar manualmente MSXML6.0

Si lo quería realizar manualmente desde la ubicación en el DVD de instalación para 32bits es por aqui:
\x86\Setup\x86
 

image

El mensaje era un poco mas elegante hacia el usuario

“La instalación de MSXML 6.0 Parser (KB933579) falló porque existe una versión superior en el equipo. Para continuar, desinstale la versión superior y vuelva a ejecutar el programa de instalación de MSXML 6.0 Parser (KB933579)”

image

 

 

Entonces…? Tenemos tres soluciones

  • Solución 1: (Optima) Utilizar SQL Server 2008 y SQL Server 2008 Service Pack 1 al mismo tiempo.

  • Solución 2: (Menos riesgosa!..) Limpiar los archivos de instalación de Windows Installer CleanUp Utility

  • Solución 3: (Riesgosa!) Desinstalando  MSXML 6 Service Pack 2 (KB954459)

 

Solución 1: (Optima) Utilizar SQL Server 2008 y SQL Server 2008 Service Pack 1 al mismo tiempo.

Aquí hay que utilizar el SQL 2008 (original) y agregando el SP1, y algún parche acumulativo…Para eso hay formas de integrar “TODO EN UNO”
Mas info:

 

Solución 2: (Menos riesgosa!..) Limpiar los archivos de instalación de Windows Installer CleanUp Utility

(Gracias a Willy Mejia por el comentario)
Aquí podremos ver el problema y esta solución:

La idea… de la solución by Microsoft Support

  1. Descargar Windows Installer CleanUp Utility
  2. Ejecutar (este paso es for dummy?)
  3. Seleccione MSXML6 Service Pack 2 (KB954459) [6.20.1099.0] en la lista y, a continuación, haga clic en Quitar
    image

 

 

Solución 3: (Riesgosa!) Desinstalando  MSXML 6 Service Pack 2 (KB954459)

Desinstalando MSXML 6 Service Pack 2 (KB954459)

Luego de unos segundos me decidí a desinstalar el MSXML 6 Service Pack 2 (KB954459), que es la versión que tenia instalada en el servidor de desarrollo

 

image

 

Y podremos ver un pequeño e importante mensaje… “Para evitar un comportamiento inesperado…”

Warning 26002. The following products depend on MSXML 6 Service Pack 2 (KB954459):
  - {listado de instancias del SQL Server que utilizan…}
If you unistall MSXML 6 Service Pack 2 (KB954459), dependent products might not function as expected. To avoid unexpected behavior, you should unistall dependent products first.

image  

Algunas de nuestras instancias de SQL Server (como ser algunos sitios de prueba/desarrollo sobre SharePoint, y base propias) y también herramientas de SQL Server…

Una vez desinstalado… (luego de pensar 1 min con café en mano)

 

 

Volviendo a paso de instalación de características de SQL Server 2008

Y por la imagen… todo siguió su curso el momento de instalar.

image

y finalizado.

image

 

 

Volver a instalar  KB954459: Microsoft XML Core Services 6.0

y luego instalar lo que desinstalamos… para no causar inconvenientes

 image

 

 

 

 

NOTA: Vuelvo a repetir, quien conoce otro método que tire la primera piedra el primer comentario

 

[Actualización] Gracias a un comentario de Willy Mejia, que tenemos una solución “menos riesgosa”.

Crossposting desde mi blog en Geeks.ms: http://geeks.ms/blogs/fernandezja

Posted 05-28-2009 12:10 por Jose A. Fernandez | 6 comment(s)

Archivado en: ,

IIS7 - Community Server: URL con carácter +. Error: The request filtering module is configured to deny a request that contains a double escape sequence

Hace unos días con Diego nos dimos cuenta que el sitio donde alojamos nuestro blog empresarial sobre IIS7 algunos enlaces no estaban funcionando. Esos enlaces tenían en común mismo mensaje de error que detallo mas adelante el post…algunos enlaces eran por imágenes especificas (como arma la url el CS=Community Server) y por algo que necesitábamos la URL del RSS de un tag (etiqueta) especifico con espacios.
La solución al problema (que es una limitación por razones de seguridad) no muy rebuscada, ya que el mismo IIS7 nos la brinda; pero quiero aclarar que es mejor realizarlo en el archivo de configuración del sitio (aplicación web) donde lo necesitamos para que nuestro IIS7 siga con este “bloqueo”

PD: Vuelvo a escribir un titulo largo para el post… mmm! algo me esta sucediendo. No tengo capacidad de resumen? tal vez… o quiero que sea mas “friendly a los buscadores” ;)

Vamos al tema…

Problema

Mas que un problema era una limitación por razones de seguridad

image

También teníamos problemas con los RSS de los tags que tenían espacios en blanco
image

Causa.

(by Microsoft Support)
"(…)La solicitud HTTP en el servidor Web contiene una secuencia de escape dobles. Sin embargo, la característica filtrado de solicitudes está configurada para que el servidor Web deniega secuencias de escape dobles.(…)

Mensaje de error:

HTTP Error 404.11 - Not Found
The request filtering module is configured to deny a request that contains a double escape sequence.

image

 

 

 

La solución viene dada directamente por el IIS7 ;)

Si estamos en el servidor web podremos ver un detalle mas fino del problema y su solución

image

Things you can try:  Verify the configuration/system.webServer/security/requestFiltering@allowDoubleEscaping setting in the applicationhost.config or web.config file.

image

Entonces para no estar manipulando el archivo del servidor applicationHost.config o el web.config de nuestra aplicación web

Solución con script

Ejecutando:
%windir%\system32\inetsrv\appcmd set config "Default Web Site" -section:system.webServer/security/requestfiltering - allowDoubleEscaping="true"

NOTA: No utilice este comando AppCmd  pero nos podemos dar cuenta que donde dice “Default Web Site” es el nombre de nuestro website.
MAS INFO:
  - IIS 7.0: Start Appcmd.exe
  - Getting Started with AppCmd.exe
  - Most Important AppCmd Commands
  - Cómo utilizar la herramienta de línea de comandos de appcmd.exe para habilitar y configurar el registro de HTTP y otras características de Internet Information Services 7.0

Solución manual (manipulando archivos .config)

Aquí manipulando archivo applicationHost.config o el web.config de tu aplicación en particular. Lo cual esto ultimo solo influye en el sitio (aplicación) que necesitamos
Entonces mi recomendación: hazlo en el web.config de tu app.

  • Ubicación del applicationHost.config
    %windir%\System32\inetsrv\config\applicationHost.config
  • Ubicacion del web.config:
    El directorio raiz de tu aplicacion web.
    En nuestro caso quedo :
    image

 

 

Enlaces

 

 

Crossposting desde mi blog en Geeks.ms: http://geeks.ms/blogs/fernandezja

Posted 05-26-2009 8:43 por Jose A. Fernandez | con no comments

Archivado en: ,

jQuery: Mensaje por x segundos idem Gmail. Visualizar/Ocultar un Label y/o Panel en ASP.NET por x segundos

Estaba leyendo el post de Sergio donde nos comenta sobre un snippet para visualizar/ocultar un Label. 

El articulo de Sergio:

En el articulo utiliza la función setTimeout que tenemos disponible en javascript para disparar eventos en intervalos previamente asignados.

 

Yo tenia un post (de hace varios siglos) de un ejemplo que utilizamos con Lautaro, y se dio la oportunidad de publicarlo. Como no sabia el titulo para bautizarlo deje los dos:

  • jQuery: Mensaje por x segundos idem Gmail.
  • Visualizar/Ocultar un Label y/o Panel en ASP.NET por x segundos

 

Pero con jQuery?

Ya en la pagina principal de jQuery tenemos algo para vislumbrar “el potencial de su sencillez”, así que basado en ese ejemplo aqui para embeberlo en nuestras paginas ASP.NET

 

Descargar el proyecto de ejemplo

Para ayudar “jugando un poco”, el proyecto para descargar

 

Que lo que queremos lograr?

Un mensaje por x segundos, like Gmail ;) … desvanecimiento…

 image  >> image >> image

Aquí utilizo un UserControl por comodidad pero esto es un firme candidato a WebControl.

 

Ejemplos

Para descargar el proyecto de ejemplo lo puedes hacer aquí, que consta de estos elementos:

image

El UserControl tiene algo? no nada simplemente hereda de una clase:

public partial class varios_Mensaje : YODA.Web.UI.MensajeBase 
{
      
}

y si no tiene nada para que lo necesitamos? para ubicarlo donde necesitemos y allí visualizaremos el mensaje

La clase bajo el namespace YODA.Web.UI contiene:

  • Registrar los .js necesarios
  • Agregar al contenido del UC (UserControl) un panel para contener el mensaje (Evento Init)
  • y luego una serie de métodos que lo único que harán será escribir script del lado del cliente

El código:

namespace YODA.Web.UI {
public abstract class MensajeBase : System.Web.UI.UserControl
{

    protected Panel Contenedor;
    private string TemplateScriptMensajeArmar = "mensajeArmar('{0}','{1}','{2}');";
    private string TemplateScriptMensajeArmarConTiempo = "mensajeArmar('{0}','{1}','{2}',{3});";
    
    public MensajeBase()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    protected void Page_Init(object sender, EventArgs e)
    {
        Contenedor = new Panel();
        Contenedor.CssClass = "mensajeContenedor";
        this.Controls.Add(Contenedor);
    }


    protected void Page_Load(object sender, EventArgs e)
    {

        //Registrando script
        ScriptManager.RegisterClientScriptInclude(this.Page, this.GetType(), "jQuery", ResolveClientUrl("~/js/jquery-1.3.2.min.js"));
        ScriptManager.RegisterClientScriptInclude(this.Page, this.GetType(), "YODA.Web.UI.Mensaje", ResolveClientUrl("~/js/YODA.Web.UI.Mensaje.js"));
    }


    /// <summary>
    /// Visualizar un mensaje
    /// </summary>
    /// <param name="Mensaje">Cadena de texto a visualizar</param>
    public void MostrarMensaje(String Mensaje)
    {
       Armar(Mensaje, 0, MensajeTipo.Normal);
    }

    /// <summary>
    /// Visualizar un mensaje
    /// </summary>
    /// <param name="Mensaje">Cadena de texto a visualizar</param>
    /// <param name="TiempoAVisualizar">Tiempo en milisegundos a visualizar el mensaje</param>
    public void MostrarMensaje(String Mensaje, Int32 TiempoAVisualizar)
    {
        Armar(Mensaje, TiempoAVisualizar, MensajeTipo.Normal);
    }

    public void MostrarMensaje(String Mensaje, Int32 TiempoAVisualizar, MensajeTipo Tipo)
    {
        Armar(Mensaje, TiempoAVisualizar, Tipo);
    }


    private void Armar(String Mensaje, Int32 TiempoAVisualizar, MensajeTipo Tipo)
    {
        String script = string.Empty;

        if (TiempoAVisualizar > 0)
        {
            script = String.Format(TemplateScriptMensajeArmarConTiempo, Contenedor.ClientID, Mensaje, Tipo.ToString(), TiempoAVisualizar);
        }
        else
        {
            script = String.Format(TemplateScriptMensajeArmar, Contenedor.ClientID, Mensaje, Tipo.ToString());
        }

        //Registrando script
        ScriptManager.RegisterStartupScript(this, this.GetType(), "MensajeArmar", script, true);

    }

}
}

 

O sea la magia es jQuery que nos proporciona funcionalidades muy nutritivas para nuestras web :), en este ejemplo encapsule MensajeArmar en una función en el archivo YODA.Web.UI.Mensaje.js

Allí tendremos la ubicación del contenedor (en este caso un DIV ya que es el ID del Panel que incrustamos en el evento Init anteriormente)  y luego manipulaciones de contenido HTML para armar algo que nos quede de esta forma:

<div id=Panel1_texto class=mensajeTexto>
     <span class='mensajeNormal mensajeTipoError'>Hola Mundo!</span>
</div>

Que con los estilos correctos quedara de siguiente forma:
image
No nos vamos a poner exquisitos con el diseño, ya que es un simple ejemplo. Queda por parte del lector descargar el ejemplo y manipularlo a su antojo, por ejemplo que acepte un template para el tipo de mensaje (template HTML)

El código js:

//Visualizar el mensaje
function mensajeArmar(contenedorId, mensaje, tipo, tiempoParaOcultar) {

    var contenedor = '#' + contenedorId;
    var contenedorTexto = '#' + contenedorId + '_texto'   
   
    //Tipo de Mensaje: 
    //por si queremos utilizar para definir mensajes de error, informacion, alertas...
    if (tipo == undefined) {
        tipo = 'Normal';
    }
    var tipoMensajeCss = 'mensajeTipo'+tipo;
    
    if (tiempoParaOcultar == undefined) {
        tiempoParaOcultar = 4000;

    }

    $(contenedor).html('<div id=' + contenedorId + '_texto' + ' class=mensajeTexto><span class=\'mensajeNormal '+tipoMensajeCss + '\'>' + mensaje + '</span></div>');

    //boton cerrar (cualquier objeto con clase = cerrar
    $(contenedor + " .cerrar").click(function() { mensajeOcultar(); })
    
    //visualizando el mensaje contenedor
    $(contenedorTexto).fadeIn(1000);
    
    //asignando el tiempo para ocultarlo
    setTimeout(mensajeOcultar, tiempoParaOcultar);
}


//Ocultar el mensaje
function mensajeOcultar() {
    $('.mensajeTexto').fadeOut(2000);
}

 

En la pagina (la única del proyecto) podremos ver los ejemplos
image

 

y bueno, empecemos…

Ejemplo 1: Básico

Simplemente visualizaremos el mensaje…en la ubicación que insertamos en la pagina el UserControl
image 
El código:

Mensaje1.MostrarMensaje("Hola Mundo!");

Resultado:
image

Ejemplo 2: Definiendo contenido

Enviamos un contenido de ejemplo, idem al anterior pero proponiendo el mensaje :)
image
El código del botón nos podemos imaginar como seria, para el que no:

Mensaje1.MostrarMensaje(txtMensaje2.Text.Trim());

 

Ejemplo 3: Mensaje con botón cerrar

Aquí el botón cerrar hará uso de la funcion mensajeOcultar, que lo armo desde el codebehind asi:

Mensaje1.MostrarMensaje(txtMensaje2.Text.Trim() + ". <a href=# class=cerrar>Ocultar</a>");

Como vemos que solamente el enlace tiene la clase “cerrar” y asigno inyectando condigo con jQuery, esta linea se encuentra en el archivo YODA.Web.UI.Mensaje.js, en el método mensajeArmar

//boton cerrar (cualquier objeto con clase = cerrar
$(contenedor + " .cerrar").click(function() { mensajeOcultar(); })

Se visualiza:
image

 

Ejemplo4: Con contenido HTML

Idem al ejemplo 2, pero aquí insertamos tags :O
image
Se visualiza
image

 

Ejemplo5: Con tipo de mensaje e icono ;)

Y ya que estamos, agregamos Tipo de Mensaje
image

image

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Los tipos de mensaje insertan una clase CSS para asignar algo en particular, en este ejemplo solamente imágenes
image image image
Podríamos hacer con CSS algo mas? SI! pero no era el objetivo de este “extenso articulo”

 

 



Espero que les pueda servir de ayuda o guía.

Para descargar como les decia aquí

Crossposting desde mi blog en Geeks.ms: http://geeks.ms/blogs/fernandezja

Posted 05-12-2009 21:31 por Jose A. Fernandez | con no comments

Archivado en: ,,

Live Mesh (mobile) error: “Time Mismatch with Server”

Llevo unos meses utilizando Live Mesh, y lo recomiendo a cada paso que voy :)

Esta ultima semana la versión para dispositivos móviles no estaba sincronizando sus carpetas y cuando quiero acceder manualmente el error de conexión era:

Time Mismatch with Server
Live Mesh refused connection. This is probably because the time and timezone settings on this device are not set correctly. Please check the settings and try again.

 

Estaba por publicar el feedback (ya que es un proyecto en etapa beta desde hace varios meses) y encontré justamente el mismo problema ya comentado

https://connect.microsoft.com/LiveMesh/feedback/ViewFeedback.aspx?FeedbackID=436129&wa=wsignin1.0

 

Respuesta by Microsoft:

(copy & paste…)
Please use the procedure below:
     1. Go to
http://m.mesh.com  from your mobile web browser.
     2. Sign in with your Live ID
     3. You will see a link to download the new client on the main page.
     4. Download the cab file to your mobile device and install it.
     5. During installation the installer will prompt you and inform you that the previous version will be removed and the new version installed. Select ‘OK’
     Publicado por Microsoft el 29/04/2009 a las 11:12

Síntesis: Actualiza tu app cliente en tu dispositivo móvil

La versión que me actualizo: 0.9.4014.2

Espero que le sirva a alguien…

Crossposting desde mi blog en Geeks.ms: http://geeks.ms/blogs/fernandezja

Posted 05-04-2009 22:08 por Jose A. Fernandez | con no comments

Archivado en: ,,