[ASP.NET] Vulnerabilidad de Seguridad (Todas las versiones)

[Actualización 28/09/2010] FINAL
Actualización de seguridad Microsoft Security Bulletin MS10-070 – Important Asi que a descargar…. Primeramente mediante Microsoft Download Center (forma manual), o puedes (si quieres) esperar unos días  y estará entre nosotros por Windows Update /Windows Server Update Service.

[Actualización 24/09/2010]
Se actualizo la solución provisoria en el aviso de seguridad Microsoft Security Advisory (2416728) para agregar un filtro mas de “protección” para este caso especifico que lee los mensajes de error de nuestra aplicación. La idea es implementar el filtro de URL para no permitir peticiones con “aspxerrorpath=” en el IIS, aquí podremos utilizar Request Filtering o URLScan (leer mas abajo la Tarea 2)

[Actualización 21/09/2010]
Doy enlace a un post de Sergio Tarrillo donde da un timeline de los últimos días y un ejemplo de aplicar la solución provisional: Reciente vulnerabilidad de ASP.NET y BlogEngine.Net

[Actualización 20/09/2010]
Doy enlace al post de Alberto Diaz donde aplica la solución provisional en SP 2010: SharePoint 2010. Vulnerabilidad 0 days de ASP.NET.
Donde en los comentarios nos da el enlace al blog de Sharepoint: Security Advisory 2416728 (Vulnerability in ASP.NET) and SharePoint.

[Actualización 19/09/2010]
Doy enlace a un post de David Salgado donde da su punto de vista (el cual comparto): El 0 day de asp.net… modo de evitarlo? y referencias 

 

Mas de uno ya se habrá enterado pero ayer se presento en una conferencia esta vulnerabilidad (ekoparty), yo por mi parte lo encontré por un comentario de un amigo en el trabajo cuando hace dos días me envió un articulo, así que lo venia siguiendo.

Que me llevo ver los resultados de la Conferencia de Seguridad ekoparty http://www.ekoparty.org/ que presentaron el tema

La vulnerabilidad fue publicada luego de presentarse:

Y como lo comenta Scott Guthrie… , It’s important (el tiene su blog mas información). También publicó unas preguntas frecuentes


Cuando se publica la vulnerabilidad tenemos unas “soluciones de compromiso/provisionales” y también unas herramientas para que los responsables de infraestructura pueda escudriñar los sitios del IIS de un server y detectar posibles configuraciones débiles


Problema

Ayer a la tarde en la conferencia se expuso una vulnerabilidad de ASP.NET para todas las versiones de ASP.NET(desde la 1.1 a la 4.0) para todos los sistemas operativos:

“Un atacante que aprovechara esta vulnerabilidad podría ver los datos, como el estado de vista, que fue cifrado por el servidor de destino, o leer datos de archivos en el servidor de destino, como el web.config…”

Como hablamos con Lautaro, si el web.config encima tiene datos sensibles (acuérdense que se puede encriptar la cadena de conexión) estamos en graves problemas.

Mas Técnico:

 


Solución (provisional)

[Actualización 28/09/2010] FINAL
Ya esta la solución final (un parche de seguridad) leer aquí Microsoft Security Bulletin MS10-070 – Important
No es necesario aplicar las “soluciones provisionales” una vez aplicado la solución final

A las horas… se publicó “la contra oferta”, (para salir del paso como se diría) básicamente es:

“Habilitar los errores ASP.NET personalizado y mapear todos los códigos de error a la misma pagina de error”

Pero también utilizar una página de error “con un poco de código” (miren el enlace de Secuity Advisor) donde establece un timeout

Dos tareas a realizar “provisionalmente” para nuestra protección [Actualización 24/09/2010]

  1. [En la App Web] Habilitar los errores ASP.NET personalizado y mapear todos los códigos de error a la misma pagina de error (independientemente del error detectado)
  2. [En el Servidor IIS] Bloqueo de los request que especifican la ruta de error. Es decir no permitir “aspxerrorpath=” en el querystring

 

La solución final se desplegara mediante Windows Update, así que a estar atentos. Cuando vea la luz la solución final, estos “filtros de protección” ya no lo debemos aplicar.

TAREA 1: Habilitar los errores ASP.NET personalizado y mapear todos los códigos de error a la misma pagina de error

 

Ejemplos:

  • ASP.NET 3.5 o anterior…
    <location allowOverride="false">
       <system.web>
         <customErrors mode="On" defaultRedirect="~/error.html" />
       </system.web>
    </location>


  • En ASP.NET 3.5 SP1 o superior (NET 4.0)
    <location allowOverride="false">
       <system.web>
         <customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/ErrorPage.aspx" />
       </system.web>
    </location>

Como comenta Scott en su blog, también es recomendable un “delay” en la pagina de error

Ejemplo:

<script runat="server">
   void Page_Load() {
      byte[] delay = new byte[1];
      RandomNumberGenerator prng = new RNGCryptoServiceProvider();

      prng.GetBytes(delay);
      Thread.Sleep((int)delay[0]);
        
      IDisposable disposable = prng as IDisposable;
      if (disposable != null) { disposable.Dispose(); }
    }
</script>

 

TAREA 2: Bloqueo de los request que especifican la ruta de error (aspxerrorpath)

Aquí tenemos dos alternativas,

Opcion A) Request filtering
Si estamos en Windows Vista Service Pack 2, Windows Server 2008 Service Pack 2, Windows 7, Windows Server 2008 R2.

Podremos utilizar un característica del IIS 7 Request Filtering

Windows 7 Windows 2008
Activando una característica…
image
Agregando un rol…
image

Una vez instalado debemos ir a denegar: aspxerrorpath=
Por linea de comando utilizando AppCmd

     appcmd set config /section:requestfiltering /+denyQueryStringSequences.[sequence='aspxerrorpath=']

Opcion B) URLScan

Aqui utilizaremos URLScan para filtrar las peticiones en nuestros IIS (versiones 5.1/6/7)

Hay que modificar la el archivo UrlScan.ini (%windir%\system32\inetsrv\urlscan) y en la linea bajo [DenyQueryStringSequences] agregar:

aspxerrorpath=

Nos quedaría:

[DenyQueryStringSequences]
aspxerrorpath=

 

 

Herramienta (Script) para detectar las aplicaciones vulnerables

Para comenzar a fixear, ejecute la herramienta (es un script) que nos informa en un servidor ”las web con la vulnerabilidad a flor de pecho”, que los responsables de infraestructura pueden ejecutar en un server y verificar todas las web del IIS.

 

 

Espero que les sirva de ayuda o guía,… o a modo informativo.

 

 

Enlaces

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

Posted 09-18-2010 13:07 por Jose A. Fernandez | con no comments

[VS2010] Enfocarnos en “solo un” Área de ASP.NET MVC como raíz en VS2010 gracias a las Productivity Power Tools

Trabajando con ASP.NET MVC y Áreas, en un proyecto con múltiples Áreas, es conveniente para “enfocar el cerebro” tener en el explorador de soluciones solo los controladores y vistas del área en que estamos trabajando.

Me ayude de las extensiones de  Visual Studio 2010 Productivity Power Tools, tiene una funcionalidad que es el “Navegador de Solucion” (Solution Navigator) que es una herramienta/funcionalidad All-In-One … “unión entre el explorador de soluciones, el de objetos, buscador… etc“ que nos brinda una serie de ricas funciones.

Ya nos comentaba Jersson:

Para empezar a utilizarlo…

image

Una de estas funciones: Crear una vista a partir de un elemento (nodo/carpeta) 

En cada elemento del navegador de soluciones tenemos un botón contextual “View this as root”

image 

Lo cual me crea un filtro en mi árbol del navegador de solución, con la raíz en el elemento que seleccionamos para “concentrarme” en el Área especifica

image

NOTA: Se puede hacer desde cualquier elemento ;)

Y hasta la búsqueda es contextual al “ámbito de la raíz que definimos”

image

 

Espero que les pueda ayudar como a mi.

 

 

Mas info

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

Posted 08-30-2010 9:02 por Jose A. Fernandez | con no comments

[Formación] Workshop Scrum… UTN-FRRE Agosto/2010. Finalizado

La semana pasada con Diego tuvimos nuevamente la grata responsabilidad de facilitar un taller sobre Scrum, el segundo de los workshop planificados en el marco del proyecto de extensión: “Formación de RRHH orientados al desarrollo de la industria del software de la región NEA” (programa La Universidad en el Medio).

Esta vez participaron docentes de la carrera de Sistemas de la UTN-FRRE y profesionales del Polo IT Chaco.

Presentamos el framework de trabajo pero nos llevamos como siempre un rico intercambio de experiencias.

20100821-WorkshopScrumUTN (21)

… aquí nuevamente faltan algunos participantes por tenían que retirarse un poco antes de la “foto del recuerdo”

20100821-WorkshopScrumUTN (1) 20100821-WorkshopScrumUTN (3)20100821-WorkshopScrumUTN (7) 

Mas imágenes aquí

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

Posted 08-26-2010 19:11 por Jose A. Fernandez | con no comments

[ASP.NET] Nuevos snippet de código en VS2010 para HTML, Javascript … y sumando para jQuery

Cuando trabajamos en ambientes web con Visual Studio 2010 tenemos a nuestra disposición los nuevos snippet de código para HTML y Javascript algo que nos puede ayudar en nuestro día a día (además de los que ya teníamos ASP.NET y sus webcontrols de versiones previas y por supuesto de ASP.NET MVC 2).

En estos días estamos en la empresa “aumentando” nuestra formación en jQuery así que saque a relucir algo que tenia en borrador desde hace un par de meses por los snippets para este framework javascript.

O sea tenemos del lado del cliente snippets:

    1. Snippet “out-the-box” para HTML (lo que viene con VS2010)
    2. Snippet “out-the-box” para Javascript (lo que viene con VS2010)
    3. Snippet para jQuery (no viene preinstalado, aquí hay que crear al snippet … o mejor si alguien ya lo hizo y lo compartió… menos doloroso)

 

1 - Snippet para HTML

Esto lo tenemos disponible “out-the-box” (o sea preinstalado) para acortarnos camino al escribir una tag a o table… incluso para silverlight ;)

Etiqueta/Snippet para HTML Snippet generado
image 
image
Asi tenemos desde los “básicos” como div, table, span, etc…. image
Como algo completo (y doloroso para escribirlo o copiarlo) como es el tag object para insertar Silverlight


NOTA: En breve veremos como hacer uno para swfObject para insertar películas Flash
image

Listado Completo: Si quieres tener un listado John Sheehan (@johnsheehan) (el que armo y compartió los snippet de jQuery) tiene un “cheat sheets” de estos snippets

 

Inserción de un Snippet

Existen tres formas de disparar la inserción de un snippet

  1. La primera escribiendo el “código” del snippet (en vista del código fuente del marcado html) y luego presionando [Tab]
    (No es lo mismo que los snippet de webcontrol donde hay que presionar dos veces Tab para que complete el nombre del control y luego que escriba el snippet)
  2. La segunda mas “grafica” con el famoso menú contextual (botón derecho)
    image
  3. También con las “hot-key” presionando Ctrl+K, Ctrl+X (en ese secuencia) y aparece el selector para “Insert Snippet”…
    image

 

Envolver nuestro código con… en el editor HTML

También tenemos posibilidad de insertar y/o envolver nuestro código (como lo hacemos en el codebehind) pero en el editor HTML, ya nos comenta elBruno

 

Donde está la configuración de snippet?

Tools >> Code Snippets Manager (Ctrl+K, Ctrl+B)

image

 

Crear un Snippet, “encapsulando conocimiento”

Si quieres crear uno propio puedes escribirlo en XML (si te gusta martirizar con abrir y cerrar tags) o utilizar

En todos los casos se debe copiar el archivo miSnippet.snippet

C:\Users\{usuario}\Documents\Visual Studio 2010\Code Snippets\Visual Web Developer

Alli tienes dos carpetas My HTML Snippets y My JSScript Snippets respectivamente

image

NOTA: Ahora que recuerdo, tengo un post relacionado “tipo tutorial” para crear un snippet para insertar peliculas flash con  swfobject, así que lo publicare en breve.

 

 

2 - Snippet para Javascript

Tenemos también “out-the-box” snippet para Javascript (lo justo y necesario)

image

Ejemplos:

Etiqueta/Snippet para JS Snippet generado
image  
image
image image

 

 

 

3 - Snippet para jQuery

Aquí hacemos uso de jQuery Code Snippets for Visual Studio 2010 que es proyecto hosteado en CodePlex que nos agrega unos cuantos snippet. O sea o lo hacemos nosotros o utilizamos lo que alguien compartió (y nos ahorro un par de horas) esto gracias John Sheehan (@johnsheehan)

Para ayudarnos en vez del copy&paste nos da un instalador y copia en las carpetas para snippets personalizados que comente mas arriba (My HTML Snippets y My JSScript Snippets)
image

Entonces luego podremos ver que nos instalo unos cuentos

Snippet para jQuery en HTML Snippet para jQuery en JScript
image image

NOTA: (para el quisquilloso) La versión que nos inserta para la registración de la libreria jQuery es para la 1.3.2, para tenerlo en cuenta. Tampoco creo que cambiar 1.3.2 a 1.4.2 que es la ultima sea muy difícil. Por ejemplo abriendo todos los archivos con Notepad++ y reemplazando valores.
O también te vas a la ultima revisión de código y te descargas el repositorio y reemplazas archivos.

 

Ejemplos:

Etiqueta/Snippet para jQuery Snippet generado
  image
image
los CDN tanto de Google como Microsoft
 image
image
… el $(document).ready…

image
image
   

Listado completo de Snippet para jQuery aquí

Video de uso :

http://www.screencast.com/users/JohnSheehan/folders/Jing/media/e0787da7-5e1c-4eef-bbb9-648426204be5

 

[Actualización 27/08/2010]

Leyendo el blog @Jersson di con un post interesante referente a tips en la utilización de los fragmentos de código, dejo (y linkeo) el enlace

 

 

 

Enlaces:

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

Posted 08-02-2010 11:25 por Jose A. Fernandez | con no comments

Gmail con firma de Texto Enriquecido (por fin!)… y también en Google App

Esto era algo que lo necesitábamos “en los viajes” ;) para seguir manteniendo nuestra imagen institucional en las conversaciones vía email

(Si bien esto es vox-populi, dejo por aquí asentado para hacer referencia interna)

Desde hace unos días tenemos disponible esta funcionalidad (sin recurrir a scripts de Greasemonkey como plugins de Firefox )

En la configuración de la cuenta podremos ver que podemos configurar por cuenta una firma diferente

Por ejemplo para cargar una imagen

image

Insertar una imagen podremos acceder a ella mediante la URL Absoluta … (que raro que no la podamos subir tipo nuestra imagen)

Pero tranquilamente podemos utilizar cualquier servicio que nos permita acceder a la imagen directamente por web PicasaWebAlbum, Flickr, o en nuestras carpetas en SkyDrive (o se llama Office Documents Online??)

image

Posted 07-14-2010 20:48 por Jose A. Fernandez | con no comments

Archivado en: ,

[OT] DESNEA.SuperTazón… estrenando las tazas empresariales (con sentido de pertenencia incorporado)

Siempre es bueno sentir la pertenencia a un grupo, y mas aún si se “materializa” ;)

Estamos estrenando en Desarrollos NEA nuevas tazas

SDC13743
Imagínense el valor que hay que tener para al armar esta pirámide!!! estaba contando cuanta $$ tenia que devolver… en caso de terremoto ;)


NOTA FINAL: Aquí hay un mensaje subliminal enviado a todos para detectar quien deja las tazas sucias en la cocina y prevenirlo

Posted 07-13-2010 14:03 por Jose A. Fernandez | con no comments

Archivado en: ,,

[ASP.NET] Error: Could not load file or assembly [XXX] The parameter is incorrect … HRESULT: 0x80070057 (E_INVALIDARG). Solución
Esos errores que aparecen en tu vida y vaya a saber que planetas se alinearon…

En una aplicación web con ASP.NET 3.5/VS2008 en una de las maquinas de desarrollo dio este mensaje de error el momento de debugear

Mensaje de Error:

Could not load file or assembly ‘…’ or one of its dependencies. The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))

Y para “colmo de males” el mensaje directamente era por el assembly de AJAX Control Toolkit

Could not load file or assembly 'AjaxControlToolkit' or one of its dependencies. The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))

Solución efectiva y eficaz (al estilo del botón reset)

Con Diego dimos en la solución eliminando la carpeta temporal de Temporal de Archivos de ASP.NET que es donde “la magia” de la compilación dinámica genera sus archivos

Esta carpeta generalmente se encuentra aquí:

%SystemRoot%\Microsoft.NET\Framework\versionNumber\Temporary ASP.NET Files

Como estamos trabajando con ASP.NET 3.5 en core del framework es 2.0 así que la carpeta específicamente se encuentra aquí:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files

NOTA IMPORTANTE: Desarrollando en Vista/Windows 7

Justamente en la maquina donde generaba el error es un Windows 7, y si utilizamos un usuario que no es administrador local de la maquina la carpeta temporal se “redirecciona” aquí

%LocalAppData%\Temp\Temporary ASP.NET Files

Ejemplo:

c:\Users\[Usuario]\AppData\Local\Temp\Temporary ASP.NET Files 

 


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

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

Posted 07-12-2010 21:42 por Jose A. Fernandez | con no comments

[Formación] Workshop Scrum… UNNE Jun/2010. Finalizado.

Se realizó la semana pasada el primero de los dos workshop sobre Scrum como ya había comentado, para acercarlo y poder “sentirlo” (vivenciarlo)

Esta vez participaron en su mayoría docentes de la carrera de Licenciatura en Sistemas de la UNNE – FACENA, pero también asistieron profesionales del Polo IT Corrientes y Polo IT Chaco.

Con Diego comunicamos de diferentes maneras (con dinámicas de grupo, dibujando, explicando, moviéndonos, con gráficos, y escribiendo) dejando de lado un poco “la clase magistral”

  SDC13662
…aquí en la foto nos faltan dos personas :(

A medida que transcurrían la horas nos íbamos compenetrando e intercambiábamos tanto experiencias como compresión en los diferentes roles, artefactos y momentos que nos propone Scrum.

Y al final realizamos algo vivencial, sentir y “sufrir” lo que veníamos hablando… Practicar Scrum.

Aquí tengo que agradecer a Alan Cyment por facilitarme la dinámica del pajarraco (ya hace un par de meses para otro workshop) para realizar la simulación completa de Scrum, además con Diego hicimos unos retoques.

SDC13654SDC13659 SDC13657  SDC13652

 

Aquí un par de imágenes mas…. del proceso ;)

Mas imágenes aquí


Quisiéramos agradecer a Cristina Liliam Greiner y Laly Dapozo (ambas de la UNNE) por la gestión para realizar todo esto.

Ahora se viene el segundo workshop en la UTN FRRE…

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

Posted 07-06-2010 10:17 por Jose A. Fernandez | con no comments

[Formación] Workshop Scrum. UNNE/UTN FRRe (Jun/Jul 2010). Cupos Limitados

Nuevamente tengo la oportunidad junto con Diego Morales, de facilitar un workshop de Scrum, en marco del proyecto de extensión: “Formación de RRHH orientados al desarrollo de la industria del software de la region NEA” (programa La Universidad en el Medio).

La ultima vez que hicimos en un curso de Scrum publico fue en la JUTI 2009 (…allí tuvimos 6 horas apretadas y ahora tenemos un poco mas) Algunas repercusiones de esa vez:

Este vez estaremos dictando este curso de capacitación y taller destinado “preferencialmente” para profesionales de empresas de los polos tecnológicos del Chaco (Polo IT Chaco) y de Corrientes (Polo IT Corrientes), docentes de carreras informáticas/sistemas de la UNNE y le UTN FRRe., alumnos avanzados; pero también invitamos a toda persona que desea darle una mirada y un acercamiento a Scrum.

…desde hace unos meses en reuniones con responsables de formación de ambos Polos IT (Chaco/Corrientes) y de responsables de ambas instituciones (UNNE / UTN FRRe), se llego a un convenio de una serie de cursos de formación desde las instituciones hacia las empresas y desde las empresas hacia las instituciones; todo esto para crear una relación un poco mas simbiótica (estrecha y persistente) entre todas las partes que mas que una simple “fabrica y tomador de rrhh” ;)

Mas datos del workshop

Lugar:
FACENA (Facultad de Ciencias Exactas y Naturales y Agrimensura) de la UNNE | 9 de Julio 1449 (Corrientes)

Cronograma:
Se dictaran en dos grupos, el primero el próximo 25 y 26 de Junio de 2010 y el siguiente el 2 y 3 de Julio de 2010

Inscripción e Informes (y costos):
Secretaria del Departamento de Informática de FACENA (Facultad de Ciencias Exactas y Naturales y Agrimensura) de la UNNE
9 de Julio 1449 (Corrientes) | 1er. Piso | de 14 a 21hs (María Laura)
Email: gndapozo @exa.unne.edu.ar, cgreiner @exa.unne.edu.ar

 

Bueno si mas introducciones aquí les dejo el afiche del curso:

UNNE-2010-Scrum

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

Posted 06-18-2010 10:21 por Jose A. Fernandez | 1 comment(s)

[Entity Framework] Serializar entidades con JSON.NET - Error: The type 'EntidadXXX' cannot be serialized to JSON because its IsReference setting is 'True'


En el trabajo cotidiano estaba armando un servicio WCF que genera JSON a partir de entidades de Entity Framework, cuando la simplicidad me genero un error. Simplicidad porque no quería mas que un listado de una de mis entidades en formato JSON


Estaba utilizando DataContractJsonSerializer como siempre en mis app web, pero parece que tiene un problema con EF 1.0:

Como bien dice “reza” este articulo: Serializing Entity Framework object to JSON

“…serializing EF object to JSON is not quite of an easy task…”

Lo bueno que encontré la solución utilizando la librería JSON.NET

Json.NET library makes working with JSON formatted data in .NET simple. Key features include a flexible JSON serializer to for quickly converting .NET classes to JSON and back again, and LINQ to JSON for reading and writing JSON.

 

Mensaje de Horror Error:

[EN]

"The type 'EntidadXXX' cannot be serialized to JSON because its IsReference setting is 'True'. The JSON format does not support references because there is no standardized format for representing references. To enable serialization, disable the IsReference setting on the type or an appropriate parent class of the type."

[ES]

"El tipo 'EntidadXXX' no se puede serializar a JSON porque su valor IsReference es 'True'. El formato JSON no admite referencias porque no hay un formato estandarizado para representarlas. Para habilitar la serialización, deshabilite el valor IsReference en el tipo o en una clase primaria apropiada del tipo."

image

 

 

Aquí va el ejemplo

El código que genera la excepción antes mencionada

public string ListadoJSON(){
            string cadenaJSON = string.Empty;
            ItemRepository itemRepositorio = new ItemRepository();
            Int32 paginaPageTotal;
            List<Item> listado = itemRepositorio.Buscar("", 0, 0, 17, 10, 1, out paginaPageTotal);

            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List<Item>));
            using (MemoryStream ms = new MemoryStream())
            {
                ser.WriteObject(ms, listado);
                cadenaJSON = Encoding.Default.GetString(ms.ToArray());
            }

            return cadenaJSON;
}

Esto genera un error al momento de serializar

OPCION 1:Crear un listado para serializar con objetos anónimos

Como no puede serializar la entidad entonces generamos un nuevo listado con las propiedades que queremos serializar

ArrayList listadoItemsParaSerializar = new ArrayList();
foreach (var item in listado)
{
    var itemNuevo = new { id = item.ItemId, nombre=item.Nombre};
    listadoItemsParaSerializar.Add(itemNuevo);
}

Y luego serializamos con DataContractJsonSerializer el nuevo listado: listadoItemsParaSerializar ;)

 

OPCION 2: sin crear nada utilizando la librería JSON.NET

Utilizando JSON.NET solucionando el problema

public string ListadoJSONConJSONDotNET(){
            string cadenaJSON = string.Empty;
            ItemRepository itemRepositorio = new ItemRepository();
            Int32 paginaPageTotal;
            List<Item> listado = itemRepositorio.Buscar("", 0, 0, 17, 10, 1, out paginaPageTotal);

            cadenaJSON = Newtonsoft.Json.JsonConvert.SerializeObject(listado, Newtonsoft.Json.Formatting.Indented);

            return cadenaJSON;
        
}

 

Es la forma mas simple, pero la librería tiene varios convertidores, me gusto del Datatable que tengo por ahí algunos para consultas “cuadradas” para reportes o gráficos y el de JavaScriptDateTimeConverter . Mas info en la ayuda online

 

Espero que les sirva de ayuda o guía.

 

Enlaces

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

Posted 05-13-2010 10:29 por Jose A. Fernandez | con no comments

Archivado en: ,

[Silverlight] Pasar proyecto de VS2008 > VS2010 > VS2008, y el mensaje: Cannot get the list of output files from the project

Si probaste la beta, RC y ahora el trial y/o versión final de VS2010 con proyectos en curso de Silverlight desarrollados con VS2008 podrás tener el inconveniente que encontré al abrir proyecto SL con VS2010 y luego querer abrir nuevamente con VS2008.
Si bien el archivo de solución cambia (no es el mismo que VS2008), creía que el archivo de proyecto mantendría cierta consistencia pero no es así.
Esto solamente sucedió en proyectos SL, porque en otros proyectos (web app, consola) al abrir con diferentes versiones del Visual Studio daba el mensaje y podía seguir utilizandolo, pero en SL no me dejaba seguir trabajando (no es un error, pero no te deja utilizarlo ;) )

Mensaje de “warning” al compilar:
Project file contains ToolsVersion="4.0", which is not supported by this version of MSBuild. Treating the project as if it had ToolsVersion="3.5".

image


El mensaje que no dejaba utilizar el proyecto Silverlight:
Cannot get the list of output files from the project

image


Solución express (rápida)

Abrir el archivo de proyecto (con algún editor de texto plano) y cambiar la línea que dice <Project ToolsVersion=”4.0”

image 
Por <Project ToolsVersion=”3.5”

image


y ya podremos seguir utilizando el proyecto en VS2008

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

Posted 04-19-2010 21:53 por Jose A. Fernandez | con no comments

Estuvimos en formación en “Herramientas de Management”

Una vez mas nos estuvimos formando en temas “no tan técnicos” ;) gracias a la gestión Polo IT Corrientes, tuvimos la oportunidad de participar hace un par de semanas de una seria de cursos facilitados por Mg. Cristina Palmeyro que abarcaron estos temas:

  • Liderazgo personal. Motivación y autorrealización
  • Eficiencia en la gestión del tiempo
  • Negociación y resolución de conflictos
  • Creatividad e innovación como ventaja competitiva

En esta ocasión lo hicimos con otras empresas del Polo IT Corrientes, por lo que en la parte de “practica/taller” para realizar trabajos en grupo fue escuchar otras voces lo que también enriqueció al conjunto.
Al principio todos parecíamos estar en una clase magistral pero luego como me gusta a mi en círculos mirándonos la cara ;)
201003-HerramientasDeManagement-POLOITCorrientes (4) 201003-HerramientasDeManagement-POLOITCorrientes (9) 201003-HerramientasDeManagement-POLOITCorrientes (10)

Mas fotos aquí 

Hay que seguir formándose?

Si bien la mayor parte de mis post son técnicos, no solo de eso subsistimos vivimos.
Todo el día interactuamos con otras personas en los equipo de trabajos de los proyectos y esas personas a veces son clientes finales y por tal motivo hay que tener una serie de habilidades “no-técnicas” que nos ayuden a gestionar los diálogos en nuestro cotidiano, para no “quemarnos” con momentos o vivencias que no sabemos cómo tratarlas o que no gana nuestro interior y debemos practicar la inteligencia emocional para lograr nuestro Liderazgo persona.
Además vimos en el curso una aproximación a la Gestión del Tiempo para practicar y así ver cómo nos consumen los “temas urgentes”  y que debemos estar siempre con “los temas importantes”; Vimos algo de negoción y la táctica de “ganar/ganar” y mediación, para lo último rompernos un poco el cerebro con nuestra gestión del conocimiento y creatividad…


El personal de Desarrollos NEA en conjunto con las empresas del POLO IT Corrientes se dedican mayoritariamente al desarrollo de software y servicios informáticos y contamos básicamente con un fuerte formación técnica y profesional pero estrictamente relacionada con el rubro al cual pertenecen nuestras empresas, así que necesitamos crecer en aspectos tales como, management, recursos humanos, marketing, negociación, venta y liderazgo entre los aspectos más importantes.

 

Estos cursos fueron los primeros en una serie que deben venir en el 2010.

 

Enlaces:

Posted 04-17-2010 14:16 por Jose A. Fernandez | con no comments

[Silverlight] System.Web.Silverlight donde estás? (Where's Wally?)

Por si alguien lo necesita como yo… estaba utilizando Silverlight 3, y tratando de modularizarlo con Prism

Abro el ejemplo que viene con Prism (para ver la implementación) que es el proyecto HelloWorld.Silverlight
{Carpeta de instalación de Prism}\Quickstarts\Hello World\HelloWorld.Silverlight\HelloWorld.Silverlight.sln

image

y resulta que faltaba la referencia a un assembly: System.Web.Silverlight

image 

Porque utiliza el webcontrol Silverlight (que venia con el SDK 2.0)

image

…en Silverlight 3 todo es con el archiconocido tag object
image 


Pero si queremos seguir utilizando esta librería? donde la obtenemos?

wally[1] Where’s Wally? System.Web.Silverlight?

Este assembly se encuentra en el Silverlight SDK, pero la versión 2.0, y yo utilizo la 3.0

 

 

Lo que siempre me confunde es saber donde esta cuando es un SDK o cuando es una Tools?

Pero resulta que tenia todos estos en mi carpeta de Silverlight:

Pero donde esta wally? en el SDK de la 2.0

Por estos link a documentos la explicación:

from MSDN
(…) Developers creating new applications will want to use the latest templates that contain the OBJECT tag and other markup. Developers could add the System.Web.Silverlight assembly manually and use the server controls. However, these controls will not provide the latest installation logic, or be able to render iframes for Silverlight history support for example. (…)

 

Entonces… dos opciones:

  1. Desde un ejemplo obtenemos la librería (para compilar)
  2. Instalado las “Server Libraries” únicamente de Silverlight 2.0 SDK

OPCION 1: De un ejemplo obtenemos la librería

Aquí gracias a la La Liga Silverlight, en el post Más novedades sobre Silverlight 3 di con el proyecto:

  • Code MSDN: ASP.NET Projects
    ASP.NET Server Controls for Silverlight Samples
    This samples release contains the ASP.NET server controls (Silverlight and MediaPlayer) that were shipped with the Silverlight 2 SDK
    http://code.msdn.microsoft.com/aspnetprojects

Donde podremos descargar y compilar la libreria System.Web.Silverlight 

image

 

OPCION 2: Instalado las “Server Libraries” únicamente de Silverlight 2.0 SDK

Instalado la versión Silverlight 2.0 SDK, pero solo las “Server Libraries”

image

ya alli “Found Wally”

image

En el ejemplo

image


Espero que les sirva de ayuda o guía.

 

Enlaces:

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

Posted 04-07-2010 9:13 por Jose A. Fernandez | con no comments

Archivado en: ,

[ASP.NET] Plugin jQuery quickSearch: Filtrar tablas y listas (ejemplo con Gridview)

Búsqueda “rapida” en tablas HTML o listas filtrando “on-the-fly”. Unas de las preguntas en los foros/grupos fue: Como filtrar GridView al presionar una tecla?

Plugins de jQuery para esta tarea hay muchos, por ejemplo…

  1. uitablefilter http://plugins.jquery.com/project/uiTableFilter
    http://gregweber.info/projects/uitablefilter
    demo: http://gregweber.info/projects/demo/flavorzoom.html
  2. quickSearch
    http://plugins.jquery.com/project/quicksearch
    demo: http://lomalogue.com/jquery/quicksearch/
  3. columnFilter
    http://plugins.jquery.com/project/ColumnFilters
    demo: http://www.tomcoote.co.uk/jQueryColumnFilters.aspx

El ejemplo es con el plugin numero 2, quickSearch que fue un pedido en los foros/grupos de ASP.NET

 

Para comenzar: Tablas semánticas

Importante 1: Tablas semánticas
Hay que tener en cuenta que para estos trabajos con tablas las mismas deben tener un semántica en sus filas… que queremos decir con “semántica de filas”, poder diferenciar las filas del encabezado del resto de las filas del cuerpo (filas de información/datos) y las del pie
Mas info:


Importante 2: Gridview de ASP.NET 2.0/3.5 y su renderizacion por default
El gridview que viene con ASP.NET por default el renderizado de las filas no es "muy semántico" es decir no agrupa las filas en tipo de filas.

OPCION 1: Utilizar CSS Friendly Adapter
Para ello necesitamos utilizar un “condimento” que es el CSS Friendly Adapter, que ya hablamos por aquí.
En el ejemplo que se adjunta para descargar al final se encuentra configurado el componente.

Gridview “normal” ;) Gridview renderizado con CSS Friendly Adapter
image

image
image

image

 

OPCION 2: Generar thead en el gridview sin CSS Friendly Adapter
Puedes utilizar este snipeet:

GridViewJedis.DataSource = JediHelper.Listado();
GridViewJedis.DataBind();

GridViewJedis.UseAccessibleHeader = true;
GridViewJedis.HeaderRow.TableSection = TableRowSection.TableHeader;

Y renderiza de esta menera

Gridview con la opcion 2 Gridview renderizado con CSS Friendly Adapter
coloca el encabezado agrupado en thead
image  

Aquí encierra a la tabla HTML con un DIV, y además coloca en cada fila estilos CSS para poder “personalizarlos”
image 

image

 

RECOMENDACION: utilizar CSS Friendly Adapter para ser mas fácil a nuestros diseñadores gráficos para web ;)  a la hora de “estetizar” el trabajo.

 

Volviendo al tema del filtrado de la tabla…

 

Armando el ejemplo

Hay que descargar el plugin de jQuery quickSearch y por supuesto la versión de jQuery que estemos trabajando (este plugin es soportado por el framework de jQuery 1.2.x o superior)

image

Luego tenemos que tener una tabla y input text de donde se dispara el plugin

En este ejemplo lo obtengo así:

    1. Obtener el Id del lado del cliente del Textbox
    2. Idem del Gridview
    3. Desde el textbox disparo el plugin para el selector de todas las filas de la grilla (del cuerpo de la misma)
<script type="text/javascript"">
    $(document).ready(function() {
        var txtFiltro = '#'+'<%=txtFiltro.ClientID %>';
        var grillaJedis = '#'+'<%=GridViewJedis.ClientID %>';
        $(txtFiltro).quicksearch(grillaJedis + ' tbody tr');
    });
</script>

Mas info en la ayuda del plugin

Al final se encuentra el ejemplo para descargar.

 

Veamos el comportamiento…

 

Ejemplo 1: Gridview sin CSS Friendly Adapter

Podemos ver que si no tenemos control de las filas de datos.. el plugin tambien filtrar el contenido del encabezado

<script type="text/javascript"">
    $(document).ready(function() {
        var txtFiltro = '#'+'<%=txtFiltro.ClientID %>';
        var grillaJedis = '#'+'<%=GridviewJedis.ClientID %>';
        $(txtFiltro).quicksearch(grillaJedis + ' tbody tr');
    });
</script>

Vemos que el selector que aplicamos al plugin quickSearch es que lo realice en todas las filas (tr) dentro de cuerpo (tbody) de la tabla

NOTA: Aqui voy a aclarar que en el ejemplo para descargar al final esta pagina no tiene un gridview, sino una tabla html que es la copia textual del renderizado de un gridview. Esto es para que en el mismo ejemplo pueda colocar uno con y sin CSS Friendly Adapter.

Gridview “normal” ;) Filtrando
 
image
 
Filtrando: Yoda
Como el encabezado no tiene la palabra yoda se filtra tambien ;(
 image

Filtro: no
aqui podemos ver que filtra el texto que contiene tambien
image

 

 

 

Ejemplo 2: Gridview con CSS Friendly Adapter (u opcion 2 para renderizar thead)

Si utilizamos CSS Friendly Adapter, y con el mismo código de inicialización del plugin para quickSearch

<script type="text/javascript"">
    $(document).ready(function() {
        var txtFiltro = '#'+'<%=txtFiltro.ClientID %>';
        var grillaJedis = '#'+'<%=GridViewJedis.ClientID %>';
        $(txtFiltro).quicksearch(grillaJedis + ' tbody tr');
    });
</script>

Al filtrar con un texto se mantiene el encabezado

 image

Esto es porque se actua por el selector:

$(txtFiltro).quicksearch(grillaJedis + ' tbody tr');

sobre el las filas del cuerpo

image

 

Ejemplo para descargar

Si no puedes ver para descargar click aquí.

 

 

Enlaces

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

Posted 03-23-2010 8:36 por Jose A. Fernandez | con no comments

Archivado en: ,

[Tip] Dynamics CRM 4.0 Client con Outlook 2010

Hace un par de semanas instale la suite 2010 del Office aprovechando una reinstalación de mi notebook;  y por donde trabajo utilizamos Microsoft Dynamics CRM 4.0 y la conectividad-sincronización con Outlook es muy buena y la queríamos mantener en Outlook 2010

Actualmente todavía no tiene soporte para Outlook 2010, pero hay una pequeñas ayudas/tips que nos pueden allanar el camino para utilizarlo en la versión Beta de Outlook 2010 (con nuestro pleno consentimiento)

Hay dos opciones

  1. Reinstalar sobre Outlook 2007 que ya tenia instalado el Cliente del CRM 4.0
  2. Instalar Cliente del CRM 4.0 para Outlook sin el Outlook instalado o con Outlook 2010 instalado (valga al redundancia)

 

Soluciones de cortesía


OPCION 1: Instalar sobre Outlook 2007 con Cliente CRM 4.0 instalado

Aquí no hay que hacer mucho, el cliente ya esta instalado y lo va a tomar el Outlook 2010. Habría que configurarlo de nuevo al cliente con el Asistente de configuración

image

 

OPCION 2: Instalar CRM 4.0 para Outlook sin el Outlook instalado o con Outlook 2010 instalado (valga al redundancia)

Aquí tenemos el problema, cualquiera de las dos opciones nos aparece el mensaje:

“No hay instalada ninguna versión compatible de Microsoft Outlook. Asegúrese de que Outlook 2003 o Outlook 207 están instalados con el Service Pack y las actualizaciones mas recientes. Si va a actualizar el cliente y no tiene ninguna versión de Outlook compatible, pude perder datos”

Outlook2010-CRM4ClientForOutlook-001

Si tenemos el Office 2010 instalado no lo va a reconocer como valido, asi que tendremos que “saltear esta verificación”

Como saltear la verificacion:

  1. Registrar esto en el Registro de Windows

    [HKEY_CURRENT_USER\SOFTWARE\Microsoft\MSCRMClient]

    Key Type: DWord
    Key: IgnoreChecks
    Value: 1

  2. Instalar el Cliente para CRM 4.0
  3. Instalar Office 2010 (si no lo tienes ya instalado)
  4. Configurar el Cliente del CRM 4.0 para Outlook

NOTA: EL cliente de CRM 4.0 para Outlook solo sirve para Outlook de 32bits

 

 

Referencias

Enlaces

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

Posted 03-18-2010 20:17 por Jose A. Fernandez | con no comments

Más artículos < Página anterior - Página siguiente >