Our Blogs
English
Español
Skip Navigation Links
News
Our Team
Mentoring
Español
Go to home page
Go Search

  Quick Launch

 Últimas Entradas

El rincón del DBA
6/29/2009 11:01 PM
¿Discos pequeños?, ¿Short stroking?, ¿10K, 15K, SSD?

Cuando nos planteamos el diseño de nuestro almacenamiento para OLTP de alto rendimiento tenemos que plantearnos muchas más variables que simplemente el volumen total de la información a almacenar. En los últimos años la capacidad de los discos duros ha crecido de forma muy significativa mientras que las revoluciones por minuto de los discos se han mantenido en un máximo de 15.000. Las razones de esto es que incrementar el número de revoluciones de un disco duro implica importantes retos tecnológicos debido al calor, las vibraciones, calibración, etc. mientras que el aumento en el rendimiento no sería tan alto como esperaríamos.

El coste de una operación aleatoria en función del número de revoluciones sería la suma del coste del posicionamiento del cabezal, la espera hasta que la parte del disco apropiada pase por debajo del cabezal y la lectura de datos en sí misma. En un disco empresarial típico de 10K, de 15K y un SSD los costes serían los siguientes:

RPM

Posicionamiento

Latencia

Lectura

Total

10K

4.6 ms

3 ms

0.1 ms

7.7 ms

15K

3.3 ms

2 ms

0.1 ms

5.4 ms

SSD

-

-

0.075 ms

< 0.1 ms

 

Como podemos ver, la diferencia en aumentar un 50% la velocidad de rotación respecto al disco de 10K disminuye en un 50% la latencia pero esto únicamente repercute en 2.3ms en el tiempo total de lectura aleatoria (~30% de mejora). Un hipotético disco de 30K disminuiría el tiempo total respecto a uno de 15K (si no mejoramos el posicionamiento) únicamente en 1 ms (~18% de mejora) pese a haber duplicado las revoluciones. Si la latencia de acceso aleatoria es crítica en nuestro sistema los SSDs son la vía a seguir sin lugar a duda.

El tradicional uso de discos pequeños para mejorar el rendimiento se basa en el mayor número de IOPS por GB que podemos obtener con discos pequeños. A efectos prácticos es como si dispusiéramos de más de un brazo actuador por cada uno de los discos de mayor capacidad. El inconveniente de esta aproximación es que los fabricantes están eliminando estas unidades de pequeño tamaño de sus catálogos quedando únicamente unidades de alta capacidad. Por otra parte el uso de unidades dedicadas para tempdb, log de transacciones, etc. se hace más y más complicado debido al fuerte desaprovechamiento que se hace de las unidades de disco de gran tamaño. En un entorno SAN el impacto de las operaciones aleatorias (especialmente escrituras) puede ser fuertemente atenuado con el uso de una caché de generoso tamaño. Con dicha caché se consigue evitar parcialmente las interferencias que ocurren principalmente entre lecturas sobre ficheros de datos y las escrituras en el log de transacciones sin olvidarnos tampoco de los picos de escrituras que producen los checkpoint. Desgraciadamente el tamaño de las cachés de muchas cabinas es escaso o incluso ridículo para los tiempos que corren. Pese a ello a continuación veremos que existen alternativas para optimizar el uso del disco en función de las necesidades particulares de rendimiento que tengamos.

Por tanto la situación en la que nos encontramos habitualmente es que disponemos de discos de gran capacidad y un número menor del que desearíamos de éstos. En estos escenarios es donde podemos obtener ventajas mediante el uso de short-stroking. El short-stroking es una técnica que consiste básicamente en utilizar únicamente una pequeña parte de los discos (la parte exterior) de forma que los tiempos de posicionamiento se reduzcan muy considerable a la vez que aprovechamos la zona de máximo rendimiento de lectura/escritura secuencial del disco. La zona de alto rendimiento utilizable sería un anillo del disco donde los desplazamientos del cabezal serían muy cortos:

El uso del resto del disco tendrá que quedar relegado a un uso muy secundario (almacenamiento de datos históricos) o bien a cargas que no se ejecuten simultáneamente con la carga OLTP sobre la que intentamos mejorar su latencia. La preparación de los discos para short-stroking puede realizarse de forma manual mediante particionado o bien mediante utilidades especializadas de los fabricantes. Utilizando IOMeter y un perfil de pruebas de lecturas pequeñas aleatorias sobre dichas particiones podemos realizar mediciones para analizar la mejora en los IOPS obtenida:

Disco de 15K

Disco de 10K

Como podemos apreciar en las gráficas desde profundidades de cola muy bajas hasta profundidades altas el número de IOPS mejora de forma muy considerable tanto en discos de 10K como de 15K. Si comparamos el disco de 15K en full-stroke (todo el disco utilizado) y el 10K con un stroke de un 5% vemos como el número de IOPS alcanzados con el disco de 10K es superior al 15K hasta una profundidad de cola de 8.

La siguiente gráfica muestra los IOPS medios para cada una de las alternativas:

La mejora media en porcentaje se muestra en la siguiente tabla:

Disco

Average of 10% stroke IOPS

Average of 5% stroke IOPS

10K

+55,91%

+77,54%

15K

+62,44%

+81,57%

 

La conclusión de este post es que no tenemos que atender únicamente al número de revoluciones de nuestros discos sino también al grado de utilización de éstos. El uso de short-stroking es una alternativa válida para reducir los tiempos de respuesta y aumentar el número de operaciones por segundo que nuestro disco es capaz de ofrecernos.

 

 

 

 


Daniel Seara
6/26/2009 9:02 PM
Material de aprendizaje de programación con Visual Studio
Nueva versión del Visual Studio Learning Pack (2.0) disponible para descarga, donde junto con un excelente grupo de colegas MVPs, tuvimos la posibilidad de colaborar. ¡Buen aprendizaje!

BICorner
6/6/2009 6:11 PM
Configurando Reporting Services 2008 en modo Integrado con MOSS

Instalación detallada de una Instancia de Reporting Services 2008 en modo integrado. El artículo se complementa con la configuración necesaria en MOSS para utilizar Report Builder 2.0 y en él también se explica cómo configurar una biblioteca de documentos para generar contenidos de tipo Informes, Orígenes de datos o Modelos de datos.

En primer lugar hacer una pequeña introducción muy resumida de cuales serán los pasos que vamos a seguir a muy alto nivel:

  1. Instalación de SharePoint technology.
  2. Instalar SQL Server 2008 Reporting Services +SP1 y especificar que el servidor de informes use modo integrado de SharePoint.
  3. Configurar Reporting Services.
  4. Descargar e instalar Reporting Services Add-in.
  5. Configurar el servidor de informes en la instancia de SharePoint technology.
  6. Establecemos los permisos.
  7. Verificar la instalación

Fuente: ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10rs_4deptrbl/html/06a737c5-5cd4-4d89-af0d-40d026ec9041.htm

 

El paso uno no lo detallo porque creo que queda fuera del ámbito de la guía que nos ocupa y esa parte de detalle haría generaría un documento excesivamente largo y pesado de seguir.

En el punto 2 he realizado una instalación de una segunda instancia de RS que configuro en modo integrado, la instalación de SQL Server Reporting Services tampoco la encontrareis detallada en el documento por las mismas razones expuestas para la de SharePoint y por que además es muy sencilla de realizar.

 

 

La configuración de una instancia de Reporting Services se realiza desde una herramienta propia de SQL Server de nombre Reporting Services Configuration Manager disponible en el grupo de programas de SQL Server 2008 en Configuration Tools, lo primero que nos pide al asistente es el nombre de la instancia a la que nos queremos conectar para configurarla.

 

 

 

Conexión a la instancia

 

A continuación y siguiendo el orden de los objetos que aparecen en el panel de la izquierda vamos configurando. En primer lugar especificamos un nombre para la URL del servicio WEB, debido a que en mi caso esta es la segunda instancia que instalo y configuro no dejo las opciones por defecto por que ya están siendo utilizadas por la instancia anterior. Entonces especifico el nombre de"ReportServer _RSINTEGRATED "

 

A continuación configuro la instancia que contendrá la base de del repositorio de objetos que generaremos en nuestro servidor de informes.

 

Configuramos nombre de la base de datos el lenguaje y si queremos modo integrado o nativo, en mi caso la base de datos se llama ReportServerIntegrated , que difiere del nombre propuesto por defecto porque ya lo estoy usando para otra instancia que tengo instalada.

 

Especificación de las credenciales que se usaran para conectar desde el servidor de informes a la base de datos del repositorio, en mi caso especifico una cuenta de sistema por tratarse de una demo, pero lo recomendable es usar una cuenta de dominio dedicada.

 

  

 

Por último veremos una ventana donde de forma resumida podremos repasar las opciones que hemos especificado antes de pulsar sobre siguiente para comenzar realmente con la configuración.

 

Fase final de configuración con el resumen de estado

 

 

A continuación configuramos la dirección URL del servicio de gestión de informes. En mi caso uso el siguiente nombre Reports_RSINTEGRATED.

 

Creación de la URL de gestión de informes

 

A continuación procedemos con el punto 4 descargar e instalar Reporting Services Add-in para Microsoft SharePoint Services, el componente está disponible en el link que se proporciona a continuación.

http://www.microsoft.com/downloads/details.aspx?FamilyID=200fd7b5-db7c-4b8c-a7dc-5efee6e19005&displaylang=en

Instalación del Add-in.

1

2

3

4

5

 

 

La finalización de la instalación se produce en un sexto paso donde terminamos , esta operación consume bastante tiempo, tanto que olvide tomar esa ultima captura.

Descargamos e instalamos también la última actualización de Report Builder 2.0 para el Reporting Services Add-in desde la siguiente URL (Ojo solo si tu instancia de RS está en versión SQL Server Reporting Services 2008)

http://www.microsoft.com/downloads/details.aspx?FamilyID=58edd0e4-255b-4361-bd1e-e530d5aab78f&displaylang=en

 

El siguiente paso el 5 de nuestra lista inicial de alto nivel consiste en configurar las opciones de MOSS para poder utilizar las capacidades de integración.

 

En primer lugar activamos la capacidad de integración a nivel de todos los sitios siguiendo estos pasos:

Start, click Herramientas Administrativas y SharePoint 3.0 Central Administration.

Click Site Actions.

Click Site Settings.

Click Site Collection Features.

Localizar Report Server Integration Feature en la lista y después activar.

Podéis encontrar más ayuda sobre esta configuración en el siguiente enlace de los libros en pantalla de SQL Server 2008 (BOL)

Link ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10sq_GetStart/html/c7f64a54-c555-4d31-bf99-3abe57dc8626.htm

 

Configurar elementos de integración desde SPS, aquí es donde especificamos la URL del servidor de informes, conexión a la base de datos y otras configuraciones que veremos en detalle.

 

En primer lugar pulsando sobre el enlace Manage Integration Settings marcado con un circulo bajo la sección Reporting Services y especificamos la dirección URL previamente configurada y elegimos uno de los modos de autenticación.

 

 

A continuación damos permisos de escritura en la sección Reporting Services apartado Grant Database Access y Proporcionamos una cuenta administrativa con permisos para realizar la operación

 

 

Establecemos los permisos sobre la base de datos mediante la opción Grant Database Access procediendo de la siguiente forma, hacemos clic en el enlace Grant Database Access de la sección Reporting Services y especificamos los valores de la base de datos e instancia solicitada y una cuenta con permisos para la configuración.

 

A continuación establecemos los valores predeterminados para la configuración de Reporting Services, en este apartado vamos a configurar el uso de Report Builder 2.0 en lugar de la versión predeterminada Report Builder 1.0, en la casilla Custom Report Builder Launch URL escribimos el valor: /_vti_bin/ReportBuilder/ReportBuilder_2_0_0_0.application

 

A continuación estaríamos en el último paso de nuestra lista de pasos iniciales el punto 7 verificaciones de la instalación, para verificar la instalación lo primero que haremos será configurar una biblioteca de documentos para que permita gestión de contenidos de tipo Reporting Services, para lo que procedemos de la siguiente forma:

 

Desde una biblioteca de documentos que designemos pulsamos sobre Library Settings

En el apartado de General Settings verificamos que podemos gestionar contenidos para la biblioteca

 

 

Permisos de gestión de contenidos habilitados

 

El siguiente paso consiste en añadir a la biblioteca los tipos de contenidos de Reporting Services que queremos incorporar a nuestra biblioteca, para esto en la ventana de Settings inicial buscamos la opción de add from existing Content Types en el apartado de Content Types.

En los tipos de contenidos disponibles elegimos el grupo Report Server Content Types, seleccionamos los tres disponibles y los incluimos pulsando sobre el botón Add.

Finalmente pulsamos Ok.

 

 

Finalmente para invocar Report Builder desde la biblioteca de documentos configurada navegamos a sitio que contiene la biblioteca abrimos la biblioteca en el menú nuevo hacemos clic sobre Report Builder Report.

 

A continuación se nos pedirá que confirmemos si queremos ejecutar la aplicación(Windows Vista y Windows Server 2008) Report Builder, pulsamos sobre Run (Ejecutar)

Por último después de unos instantes se ejecutará Report Builder 2.0 para que podamos comenzar a diseñar nuestros informes.

 

En definitiva se trata de una guía paso a paso con enlaces útiles para descargar las actualizaciones y Add-in necesarios, que espero resulte útil y ayude, aprovecho para avanzar que en un próximo artículo configuraremos Report Center para gestionar los informes y orígenes de datos de forma ordenada y veremos cómo implementar informes generados desde Visual Studio 2008 a nuestro Report Center en SharePoint.


Antonio Soto
5/20/2009 3:44 PM
El futuro de Groove.... cerquita de SharePoint
No podía ser de otra manera, porque realmente existen similitudes, y porque las características se ambos productos se complementan. A partir de ahora, oireis hablar de SharePoint Workspace 2010. Bienvenido!! http://blogs.msdn.com/groove_development_team/archive/2009/05/13/makeover-for-groove-sharepoint-workspace-2010.aspx

El blog de Fernando G. Guerrero
4/30/2009 6:29 PM
El Profesor Manuel Chueca Pazos: un excelente mentor de mentores

Estaba buscando algo por Internet, cuando me encontré con una vieja noticia, del año 2006, pero completamente nueva para mí: El ingeniero cartográfico Manuel Chueca ingresa en la Real Acadèmia de Cultura Valenciana (http://www.lasprovincias.es/valencia/prensa/20061024/cultura/ingeniero-cartografico-manuel-chueca_20061024.html)

Mucho de lo que soy, mucho de mis principios vitales, de mi ética de trabajo y social, se debe a este gran ser humano. Aunque fui formalmente alumno suyo durante un curso académico, tuve el privilegio de trabajar en su departamento durante 6 años, durante los cuales aprendí lo que está y lo que no está escrito.

En tiempos en los que, quizá debido a mi juventud e impaciencia por volar independientemente, no encontraba el camino adecuado, en una encrucijada de caminos muy importante para mí, me ofreció una oportunidad que cambiaría mi vida para siempre.

Este hombre de inmensa cultura, y de asombrosa capacidad didáctica, ha sido un luchador imparable durante toda su vida. Con una inspiradora capacidad para fijarse objetivos imposibles, y lograrlos ante el asombro de todos.

Pero lo que más valoro en él es su capacidad para inyectar capacidad de superación en la gente que le rodea. Donde uno se ve impartiendo rutinariamente clases de prácticas, el veía un aclamado catedrático. Al que se ve ingeniero, él le ve como Doctor. Donde hay un par de despachos con unos pocos aparatos topográficos, el veía una Escuela de Ingeniería Cartográfica. Y el caso es que en la mayoría de estos casos, acertó de pleno.

No es fácil propagar ese espíritu de superación entre gente muy heterogénea, y menos aún en empleados de un organismo público, con tendencia a sentirse funcionarios, sin más ilusión que esperar tranquilamente la jubilación. Sin embargo, siempre supo involucrar a todos en una dinámica más propia de una empresa privada que la de un organismo público.

Por otro lado, siempre supo estar detrás de su gente, apoyándola sin excusas, dándoles la mano en los momentos malos, y sirviendo como parapeto de defensa ante ataques externos.

Con él aprendí a detectar talento temprano en la gente que me rodea, a confiar en sus criterios, a defenderles sin reservas, a ayudarles a descubrir su potencial futuro. Con él aprendí a fijarme metas difíciles, a creer en ellas y hacer todo lo posible por conseguirlas. Con él aprendí que nadie regala nada, y que hay que trabajar muy duro para conseguir lo que quieres.

Él creyó en mí cuando nadie más creía, soportó y sufrió mis errores, y me apoyó en la adversidad.

Ahora me llena de orgullo el ver que le han honrado con esta nueva distinción. Espero que podamos disfrutar muchos años de su lúcida mente y de su inmenso valor humano.

 


Javier Loría
1/28/2009 8:31 PM
Visita a Teotihuacán

La gente de Datavisión (partner de Microsoft con experticia en SQL) tuvo la gentileza de llevarme a Teotihuacán el pasado 10 de enero. Teotihuacán es uno de los lugares arqueológicos más importantes de América y lugar de visita obligatoria cuando se está en México. Durante esta visita finalmente pude cumplir mi sueño de subir tanto la pirámide del sol como la de la luna. Antes había estado en Teotihuacán pero siempre subía primero la pirámide del sol, y me quedaba sin fuerzas para subir la pirámide de la luna. Esta vez la hice a la inversa, y con duras penas, pero llegue.

En orden acostumbrado: Héctor Eugenio Jiménez, Javier Loria, Miguel Angel Granados y Jesús Gil Velasco.

Subiendo la pirámide de la Luna

Pirámide del Sol, vista desde la pirámide de la Luna

Arriba, en la pirámide del Sol.

Pirámide de la Luna vista desde la pirámide del Sol

 

 


Gustavo Larriera (aka Gux)
9/23/2008 2:09 PM
Bases de datos de ejemplo para SQL Server 2008

Las bases de datos de ejemplo AdventureWorks, en sus distintos sabores, están disponibles para descargar en el sitio Codeplex. Las bases de ejemplo Pubs y Northwind clásicas también pueden usarse en SQL Server 2008, para descargarlas ir al sitio de descargas de Microsoft en este otro link.

Recomiendo tener a mano la base Pubs pues ocupa poco lugar, es simple de entender y además mucha documentación de SQL Server (incluyendo libros y artículos famosos) ejemplifica usando dicha base.


La Cueva de Desarrollo y Colaboración
8/8/2008 12:59 AM
Invocar código de Silverlight C# o VB desde JavaScript y viceversa

Hay diferentes formas de incrustar una aplicación Silverlight en una Web, podemos ocupar toda la web con la aplicación, en cuyo caso no nos sería útil este manual. O podemos realizar varias aplicaciones colocadas en diferentes partes de nuestra web. Para los que necesiten que sus pequeñas aplicaciones Silverlight se comuniquen, están leyendo el manual idóneo.

 

Si pensamos un poco el funcionamiento de una aplicación Silverlight, al fin y al cabo tiene que poder llamar a funciones JavaScript, de lo contrario, ¿Cómo lanzaría un alert en una Web?¿Cómo sería capaz de responder a eventos?

Pues sí, debajo de la capa tan bonita que tenemos en Silverlight mediante la cual programamos todas las acciones producidas en la Web en código C# o VB hay unas bibliotecas que traducen ese C# o VB compilado a código entendible por la Web, por ejemplo, JavaScript.

 

Sin más explicaciones de arquitectura de Silverlight, cabe decir que Silverlight está preparado para ejecutar funciones JavaScript y para permitir que sus funciones sean invocadas desde código JavaScript.

 

Voy a ir poniendo pequeños ejemplos que irán formando una aplicación web, en la que habrá dos aplicaciones Silverlight comunicándose usando como puente las funciones JavaSript.

 

Los ejemplos los haré en C#, pero se dejarán los proyectos tanto para C# como para VB (a petición de mi amigo Dani Seara).

 

Requisitos (más info en http://silverlight.net/getstarted):
- Visual Studio 2008

-
Silverlight Tools Beta 2 for Visual Studio 2008
- Expression Blend 2.5 June Preview
- Silverlight 2 beta 2

 

1.       Invocar función JavaScript desde C# o VB

 

Supongamos este código JavaScript en una página HTML.

 

<script type="text/javascript">

   function mostrarPantalla(cadena)  

   {  

         alert(cadena);  

   }

</script>

 

Y una aplicación Silverlight con un botón que al pulsarlo ejecuta el siguiente código:

 

HtmlPage.Window.Invoke("mostrarPantalla", txtEnviar.Text);

 

Solamente con este código ya podemos invocar la función mostarPantalla de JavaScript desde C#. El resultado es:

 

Ejemplo1

Viendo esta función JavaScript tan sencilla, podríamos pensar que esa función la ejecuta cualquiera, pero ¿Qué pasa si lo que queremos pasar por parámetro no es un String sino un objeto .Net llamado Mensaje con su Nombre, Fecha y Texto?

Pues serializamos el objeto.

Serializar es el proceso de codificación de un objeto con el fin de transmitirlo en red (o en este caso de Silverlight a JavaScrip) en forma de una serie de bytes (serialización binaria) , o en formato texto legible por los humanos (XML o Json). 

En nuestro caso vamos a serializar en formato texto y de los formatos de texto el que menos ocupa  y el más fácil de deserializar por JavaScript es Json. Json es un formato que serializa los objetos de con la misma sintaxis con la que JavaScript crea los obetos.

Así que usando JSON estamos optimizando la cantidad de datos pasados por parámetro y el rendimiento de la deserialización.

 

Imaginemos que estamos haciendo un chat y necesitamos pasar un objeto Mensaje entre las dos aplicaciones Silverlight. Lo  primero es etiquetar la clase Mensaje con el atributo DataContract para indicar que la clase es serializable y las propiedades de la clase con el atributo DataMember por lo mismo. Estos dos atributos pertenecen al ensamblado System.Runtime.Serialization.

 

[DataContract]

public class Mensaje

{

[DataMember]

public string nombre { get; set; }

 

[DataMember]

public string fecha { get; set; }

 

[DataMember]

public string texto { get; set; }

}

 

Para serializar un objeto cualquiera en Json realizamos el siguiente método extensor (.Net Framework 3.5):

 

/// <summary>

/// Metodo extensor que serializa cualquier objeto en JSON

/// </summary>

/// <param name="obj"></param>

/// <returns></returns>

public static string ToJson(this object obj)

{

using (MemoryStream ms = new MemoryStream())

{

DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());

serializer.WriteObject(ms, obj);

ms.Position = 0;

using (StreamReader reader = new StreamReader(ms))

{

return reader.ReadToEnd();

}

}

}

Tener en cuenta que para poder usar la clase DataContractJsonSerializer tenemos que añadir al proyecto la referencia:

 

System.ServiceModel.Web => using System.Runtime.Serialization.Json;

 

Aunque parezca raro, el using de arriba va asociado con esa referencia, me costó bastante averiguarloJ.

 

Hasta ahora, ya sabemos cómo llamar desde Silverlight a una función JavaScript, incluso si los parámetros de la función son objetos complejos. Vamos a ver un ejemplo:

 

function enviarMensajeObjeto(mensaje)

{

//El formato JSON coincide que tiene la misma sintaxis que la

//creacion de objetos en JavaScript, por eso es facil crear el //objeto simplemente usando eval.

var jsMensaje = eval('(' + mensaje + ')');

 

alert(mensaje);

}

 

Esta función JavaScript de arriba recibe como parámetro un string con el objeto Mensaje serializado en Json y para guardarse el objeto en una variable de tipo Mensaje en JavaScript solamente tiene que usar la función eval, que evalúa una cadena de texto como si de código JavaScript se tratase.

 

private void enviarMensaje(Mensaje msg)

{

HtmlPage.Window.Invoke("enviarMensajeObjeto", msg.ToJson());

}

 

La función de Silverlight es simplemente una invocación a la función JavaScript serializando la variable msg, antes de enviarla como parámetro.

 

El resultado al invocar a la función enviarMensaje desde Silverlight es el Mensaje en Json:

 

Imagen2 

 


 

2.       Invocar función C# o VB  desde JavaScript

 

Ahora vamos a aprender lo contrario, queremos llamar desde JavaScript a una función Silverlight.

 

Para poder invocar una función Silverlight primero tendremos que poder referenciar al UserControl (Page) que es el objeto que tendrá el método que queremos invocar.

Para referenciar desde Silverlight el UserControl tenemos que hacer varias cosas:

 

a)      Declarar la clase Page (UserControl) como ScriptableType y el/los métodos que queremos invocar desde JavaScript etiquetarlos con el atributo ScriptableMember:

 

[ScriptableType]

public partial class Page : UserControl

{

 

[ScriptableMember]

public void setMensaje(ScriptObject scriptPerson)

{

Mensaje mensaje = scriptPerson.ConvertTo<Mensaje>();

listaNombres.AddMensaje(mensaje);

}

//Constructor, resto de métodos, etc...

}

 

Nota:

Hay que hacer notar que el parámetro de la función setMensaje no es un objeto Mensaje, sino ScriptObject. Y es que todos los objetos que se vallan a pasar desde JavaScript son ScriptObject, aunque internamente tenga la misma estructura que el objeto Mensaje, de ahí que la conversión sea automática con el método ConverTo.

 

b)      Exponer la instancia del objeto Page al navegador y darle un nombre con el que será llamado desde JavaScript (Page también).

 

public Page()

{

InitializeComponent();

HtmlPage.RegisterScriptableObject("Page", this);

}

 

Una vez hecho esto ya podemos invocar al método setMensaje desde JavaScript con la siguiente función:

 

function enviarMensajeS1(mensaje)

{

//Se obtiene el objeto Silverlight con getElementByID

var silverlight1 = getSilverlight1();  

if(silverlight1)

{

//El formato JSON coincide que tiene la misma sintaxis que la

//creacion de objetos en JavaScript, por eso es facil crear el //objeto simplemente usando eval.

var jsMensaje = eval('(' + mensaje + ')');

 

//Llamada a la funcion de Silverlight 2

silverlight1.content.Page.setMensaje(jsMensaje);

}

}

 

Esta función será invocada desde la Aplicación Silverlight 2, se pasará como parámetro un objeto Mensaje serializado con Json, y la función creará el objeto Mensaje con eval y después llamará a la función setMensaje pasándole como parámetro el objeto creado por JavaScript que será de tipo (.Net)  ScriptObject.

 

 

Como conclusión de todo este documento, cabe destacar que todo esto explicado tiene muchas utilidades: comunicar dos aplicaciones Silverlight, o comunicar una aplicación Silverlight con una Flash, o simplemente Silverlight con JavaScript.

 

En concreto el ejemplo que he implementado es la comunicación de dos aplicaciones Silverlight y está tanto en C# como en VB.

 

 

Ejemplo Final

 


Miguel Egea
11/21/2007 9:30 PM
Presentación en la I Microsoft Bussines Intelligence Conference en madrid
Buenas noches
 
Ya estoy de vuelta en casita, con un principio de gripe que he mitigado algo pegandole la mitad de los virus a mi compañero Antonio Soto e intentando cumplir con parte de la promesa que hice a los valientes que atendieron mi presentación en el día de hoy.
 
Espero que la presentación les gustase, yo desde luego disfruté dandola. Se me hizo algo corta, porque intenté contar en demasiado detalle alguna de las demos del principio, no quería dejar pasar ningún fundamento, pero bueno, solo me salté una demostración :)
 
Sobre las demos, tengo aún que ver como lo voy a resolver desde el punto de vista técnico, voy a consultar si podemos colgarlas como videos y si es así entre mi compañero Francisco Gonzalez y yo las grabaremos y las pondremos a disposición de todos (Por cierto muchas gracias Paco por ayudarme con las demos, no me habría dado tiempo tiempo a hacerlas si tí) y Gracias también a Rubén por que la que enseñe de Workload es de un post del blog del rincón del DBA que él mismo hizo
 
Bueno, sin más rollos, pinchad aquí para descargar la presentación.
 
Un abrazo
Miguel Egea

Eladio Rincón Herrera
10/22/2007 7:11 PM
De mudanzas...
Hola,
 
que estoy de mudanzas... me cambio de blog; a partir de ahora, publicaré con Carlos Sacristán, Rubén Garrigós en:
 
 
Nada, nos vemos aquí al lado...
 
Eladio

Rubén Garrigós
10/20/2007 12:50 AM
De mudanzas...
Me mudo de blog por lo que a partir de ahora publicaré junto a Carlos Sacristán y Eladio Rincón en: