[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}QuickstartsHello WorldHelloWorld.SilverlightHelloWorld.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:

[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/

    Nuevo repositorio del plugin en GitHub: https://github.com/riklomas/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

[Actualización 14/01/2012] Nuevo ejemplo para descargar (ir al final). Actualización del repositorio de quickSearch

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.  
    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í.

 

[Actualización 14/01/2012] Nuevo ejemplo para descargar

Se actualizo la version del plugins como mejoras (se actualizo el evento .bind a .on de jQuery) . Métodos como .search, .currentMatchedResults, .cache)

Actualización del repositorio de quickSearch en GitHub

Para descargar ejemplo click aquí: http://sdrv.ms/WXXcOH

 

 

Enlaces

[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_USERSOFTWAREMicrosoftMSCRMClient]

    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

[MSDE] Eliminar manualmente una instalación de MSDE (Microsoft SQL Server Desktop Engine)

Amigo mío tu que tienes problemas con la instalación/desinstalación de una MSDE (Microsoft SQL Server Desktop Engine) aquí tienes la forma de no “estresarte” demasiado (o no como nosotros, Agustín, Cristina y el que escribe)

Luego de varias horas pudimos dar con la desinstalación manual, entre Agustín y Cristina .

La desinstalación automática nos generaba error, algo fallaba en el instalador .msi… hacíamos un log de la desinstalación pero no nos daba nada.. así que acudimos a la desinstalación manual.

Pasos (que hicimos)

Paso 1: Limpiar .msi (podríamos decir …corrupto)

Primeramente descargamos el conocido Windows Installer CleanUp Utility

Esta opción no desinstala nada, solo nos limpia los archivos que el windows installer coloca en una ubicación temporal para “conocer” cuando hay que desinstalar automáticamente (que en este caso nos generara error,  así que no nos servía)

Paso 2: Manualmente eliminar archivos y carpetas

Ubicación predeterminada:

  • Instancia predeterminada: Program FilesMicrosoft SQL ServerMSSQLData
  • Instancia con nombre: Program FilesMicrosoft SQL ServerMSSQL$<INSTANCENAME>Data

Hay que eliminar tanto Data y Binn
Aqui eliminar toda la carpeta o en ocasiones si existe en Archivos de programa la carpeta “Microsoft SQL Server” no instala

Si necesitas la ubicación y alguien en la instalacion la modifico puedes ir:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServerSetupSQLDataRoot
Mas info aquí

 

Paso 3: Limpiar “manualmente el registro de windows”

Aqui hay que eliminar una serie de entradas.. que las dejo copiadas pero estan detalladas en Microsoft Support

  1. Para una instancia predeterminada de MSDE 2000, quite la clave siguiente:
    HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServer
  2. Para un MSDE 2000 instancia con nombre, quite la clave siguiente:
    HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server<INSTANCENAME>
  3. Si la siguiente clave del Registro señala a MSDE 2000 instancia ProductCode , quite el valor InstanceComponentSet.x . Por ejemplo, InstanceComponentSet.1 tiene un valor que coincide con el código de producto de sqlrun01.msi:
    HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL ServerComponent SetInstanceComponentSet.1
  4. Quite la clave del registro de servicio de SQL Server.
    Para una instancia predeterminada de MSDE 2000, quite las siguientes:
    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMSSQLServer
    Para un MSDE 2000 instancia con nombre, quitar las siguientes:
    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMSSQL$<INSTANCENAME>
  5. Quite la clave de registro de servicio SQLServerAgent:
    Para una instancia predeterminada de MSDE 2000, quite las siguientes:
    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSQLServerAgent
    Para un MSDE 2000 instancia con nombre, quitar las siguientes:
    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSQLAgent$<INSTANCENAME>

 

Mas info de estos pasos: http://support.microsoft.com/kb/320873

 

Paso 4: Sin reiniciar podremos volver a instalar una instancia.

 

Instalación con parámetros personalizados:

El .bat que utilizamos:
setup.exe /qb+ SECURITYMODE=SQL DISABLENETWORKPROTOCOLS=0 INSTANCENAME=MINSTANCIA SAPWD=mipassword /log c:Logsql.log

Mas info de opciones de instalación para MSDE: http://msdn.microsoft.com/es-es/library/aa214935(en-us,SQL.80).aspx

 

 

Enlaces

[EF 1.0] Obtener la foreign key de una entidad (que no la tenemos por intellisense)

El que esta trabajando con Entity Framework 1.0 (para VS2008 SP1)… sabrá que:

Cuando creamos el modelo las foreign keys las utiliza para crear las relaciones, y mediante propiedades navegar entre ellas. O sea no necesitaríamos las FK para nada, porque es algo que la DB necesita para relaciones (“larga vida a las base de datos relacionales”)

Esta particularidad de no visualizar las claves foráneas me parece muy bueno, ya que no la necesitamos en POO

NOTA Adjunta: en EF 4.0 (que seria la 2.0 pero la versión sigue a la del Framework .NET) al momento de generar el modelo pregunta si queremos “visualizar las foreign keys” 🙂

 

A través de una pregunta en los newsgroups y foros (que mas bien me vino por email) necesitaban si o si desesperadamente el identificador de la foránea, así que lo dejo por aquí para referencia.

 

Pensamiento lateral: (pensando pensando.. en que momento utilizar esto) Se me ocurre cuando estamos visualizando en una pagina ASP.NET y queremos ver el detalle de algo adjunto o enviarlo a una función javascript seria necesario ir a las clave foránea, en vez de traer la entidad relacionada. Caso claro es las grillas donde por alguna razón tenemos que visualizar una imagen asociada y deseamos enviar el id al handler que despliega la misma. (Esto es solo un pensamiento en voz alta)

 

Veamos lo que necesitamos…

En la DB la tabla que mapeamos…

image

Si tenemos una entidad relacionada con otras, o sea con una relación de conocimiento (Asociación), nos queda en nuestro modelo

image

donde podremos apreciar que no se encuentras las claves foráneas

image

 

Pero si no puedes dormir sin esta información…

 

Como lo obtenemos?

Opción recomendada utilizando elegantemente expresiones lambda, y buscamos el nombre de la clave foránea que tanto deseamos:

En VB.NET

Dim tipoPublicidadId As Int32 = Int32.Parse(publicidadArchivo.TipoPublicidadReference.EntityKey.EntityKeyValues.First(Function(k) k.Key = "TipoPublicidadId").Value)

 

En C#

int tipoPublicidadId = (int)publicidadArchivo.TipoPublicidadReference.EntityKey.EntityKeyValues.First(k => k.Key == "TipoPublicidadId").Value;

 

Podemos por índice…, algo que nunca me gusto utilizar “índices” (vaya uno a saber en que posición se encuentra la que necesitamos,… pero igualmente va el código

En VB.NET

Dim tipoPublicidadId As Int32
If publicidadArchivo.TipoPublicidadReference.EntityKey IsNot Nothing Then 
     tipoPublicidadId = Int32.Parse(publicidadArchivo.TipoPublicidadReference.EntityKey.EntityKeyValues(0).Value) 
End If

EN C#

int tipoPublicidadId;
if (!IsNothing(publicidadArchivo.TipoPublicidadReference.EntityKey)) {
    tipoPublicidadId = Int32.Parse(publicidadArchivo.TipoPublicidadReference.EntityKey.EntityKeyValues(0).Value);
}

 

Cuando se cargan?

Las asociaciones se cargan y completan cuando hacemos Include en la consulta LINQ to Entities relacionada, o la carga explicita con mediante el método Load

NOTA: Hasta EF 4.0 no tenemos Lazy Load “nativo”.

 

 

Enlaces

Examen 70-547 aprobado. Certificación MCPD: Microsoft Certified Professional Developer

El lunes pasado aprobé el Examen 70-547 que es sobre desarrollo de aplicaciones web.

El que faltaba para Microsoft Certified Professional Developer (MCPD) en Web Applications

También poniendo semilla “empecemos por casa” del post anterior: Curso Terminado: Becas Control+F Curso .NET 240hs (UTN – FRRe).
 

Un Testing Center mas cerca…

Lo bueno en esta oportunidad e interesante es que no tuve que viajar hacia Buenos Aires (o Rosario o Córdoba), sino que “cruzando el puente” en Resistencia (Chaco) tenemos un Testing Center de Prometric, nuestros colegas y amigos de Pampa Technologies (PampaTech) (ex MegaKey SRL) solo que esta en el listado de Prometric como el ultimo. Muy buena la atención de Rafael.

 

Preparación

Para eso durante los últimos días me prepare (además de la experiencia que uno carga en el trabajo, y participaciones en newsgroup/foros) como siempre lo hago mediante el libro del Training Kit del examen.

 

image

Que viene con un CD

image

 MCPD Self-Paced Training Kit (Exam 70-547): Designing and Developing Web-Based Applications Using the Microsoft .NET Framework (Hardcover)
http://www.amazon.com/MCPD-Self-Paced-Training-Exam-70-547/dp/0735623406

Puedes darle una mirada interna desde el enlace a Amazon.com

 

Temas:

  • Application Requirements and Design
  • Decompose Specifications for Developers
  • Design Evaluation
  • Creating a User Interface
  • Creating and Choosing Controls
  • Data Validation
  • Delivering Multimedia
  • Component Design
  • Component Development
  • Reusable Software Components
  • Application Logic Layer
  • Logging and Monitoring
  • Application Configuration
  • Define and Evaluate a Testing Strategy
  • Creating Development Tests
  • Deploying an Application
  • Supporting an Application

 

En el libro hay referencias a URL en la mayoría hacia MSDN Library, o artículos de MSDN Magazine.

Lo que me llamo la atención (sabia que era así, pero me hizo pensar) es que las preguntas no eran directas sino mas bien te presenta unos requerimientos y tendrás que elegir entre las diferentes alternativas teniendo en cuenta tu diseño lógico de tu aplicacion, físico, componentes, base de datos, reusabilidad), luego varios preguntas sobre estrategia de testing (unitarios, de integración, stress, etc.)

Fue un examen de sin “pica-código” (como dirían mis amigos españoles) sino mas bien de que “pensamiento exploratorio”, aunque no tan profundo como pensaba (Matías Iacono nos daba un indicio de tranquilidad sobre la profundidad del examen);  en la mayoría de las preguntas el sentido común viene a nuestra mente, así que la experiencia también cuenta. 
 

NOTA: Para que que esta pensando que estoy diciendo parte del examen y que es parte del NDA, en el CD adjunto al libro viene una batería de preguntas que ayudan a perfilarse (no son exactamente como el examen, pero ayudan) y allí se perfilan de ese manera.

 

 

Enlaces

Curso Terminado: Becas Control+F Curso .NET 240hs (UTN – FRRe)

Hoy termine de dictar 240 horas de clases de .NET (Desarrollo web) en el marco de las Becas Control+F, en los laboratorios de la UTN FRRE

Que son las becas? es una iniciativa de capacitación en tecnologías informáticas organizada por el Ministerio de Trabajo de la Nación (Argentina) en conjunto con CESSI y empresas de primera línea del sector informático

Los chicos…

Curso93-NET240-BecasControlF-UTN-FRRE-2009_chico

Jugadores… (arriba) Budimir, Marcos Antonio; Lucero, Ramón Manuel; Martinez, Nicolas Agustin; Clemente Gutierrez, Matias Gaston; Charytonow, Alexis; Pared, Cecilio Antonio; Rodríguez, Jorge Aníbal (atrás de el, Calvo, Facundo); Cáceres, Soledad; Sgrinzi, Agustina; Rodriguez, Nelson Fabian; Galeano Bruschi, Marcos Damián; Borelli, Darío Antonio (abajo) Fernández Michonovich, Iván José; Tribbia, Enzo, (el profe, me!) Fernández, Jose A.; Nicoletti, Mariela Liliana; Barrera, Claudia …(el que falto José Gallardo)

No esta demás decir que uno siempre aprende cosas nuevas cada vez que dicta un curso, muchas veces nuevos conocimientos técnicos (afianzar otros) pero también relaciones humanas, algo que me llevo con creces…

Así que mis mas sinceros saludos a todos, fue un honor nuevamente dar este curso, y espero que nos veamos “en los pasillos de la universidad” (o quien dice en otro curso/jornada)

También a los que estaban detrás de todo en la organización desde le UTN Claudia y Gonzalo, y Gustavo abriendo todos los días el laboratorio.

 

El curso…

Este curso de .NET se titulaba Programador .NET (mas info aquí) . Se cursaba 3 veces por semana (4 horas), una carga horaria importante, totalizando las 240hs. Se dividió en 3 módulos (Intro a POO, y luego dos módulos de Desarrollo Web con ASP.NET). Los modulos fueron armados por BS – Buffa Sistemas. El ultimo modulo tenia de interesante que se basaba en curso MOC 2310C: Developing Web Applications Using Microsoft Visual Studio 2008 (curso oficial de Microsoft) con material oficial.

 

Exámenes…

      NOTA: Recién me entero por el post ¿Eres estudiante? CERTIFICATE!!!! (Felipe Zuñiga) que a nivel mundial los estudiantes (que puedan acreditar que lo son al momento de rendir) tiene un descuento de 50% (por lo menos en Argentina)
Esto es valido hasta el 30.Jun.2010 (pleno Mundial de Futbol!!)
Mas info:
 http://www.prometric.com/microsoft/student
Estoy por averiguar (y también Gonzalo) en el marco de Control+F si la bonificación… (que creo la da Microsoft) puede ser un poco mas, conociendo que el beneficio ahora ya no es un “beneficio exclusivo de las becas Control+F” 

Aquí voy a llevar un listado de los que van rindiendo el examen de certificación (espero que me se acuerden de mi y vayan avisando con un mensaje/comentario en este articulo)

  • Barrera, Claudia
  • Borelli, Darío Antonio
  • Budimir, Marcos Antonio
  • Cáceres, Soledad
  • Calvo, Facundo
  • Charytonow, Alexis
  • Clemente Gutierrez, Matias Gaston
  • Fernández Michonovich, Iván José
  • Galeano Bruschi, Marcos Damián
  • Gallardo, Jose Omar
  • Lucero, Ramon Manuel
  • Martinez, Nicolas Agustin
  • Nicoletti, Mariela Liliana
  • Pared, Cecilio Antonio
  • Rodríguez, Jorge Aníbal
  • Rodriguez, Nelson Fabian
  • Sgrinzi, Agustina
  • Tribbia, Enzo

 

Enlaces

[ASP.NET Membership] Reset password with TS-SQL (“por si las moscas… tenerlo a mano”)

La necesidad hace que a veces necesitemos estos “tips”.

En una app web en desarrollo, no teníamos otra forma de acceder a un usuario (ni recuperar el password) así que resolvimos directamente en la DB.
Esto le sirvió a Enzo y Lisando, espero que a alguien le sirva.
 

El procedimiento almacenado que nos brinda la funcionalidad de membrecía de ASP.NET es: aspnet_Membership_ResetPassword
 
image
 
Para cambiar el password mediante esta consulta SQL utilizando el procedimiento almacenado…
 
 
DECLARE @UserName varchar(256),
        @Password varchar(128),
        @Application varchar(256),
        @PasswordSalt varchar(128)

SET @UserName = 'yoda'
SET @Password = 'theforceiswithyou'
SET @Application = '/'
SET @PasswordSalt = (SELECT 1 PasswordSalt
                            FROM aspnet_Membership
                            WHERE UserID IN (SELECT UserID
                                                    FROM aspnet_Users U
                                                        INNER JOIN aspnet_Applications A
                                                            ON U.ApplicationId = A.ApplicationId 
                                                    WHERE 
                                                        (U.UserName = @UserName) 
                                                        AND (A.ApplicationName = @Application)))


EXEC dbo.aspnet_Membership_ResetPassword 
        @Application, 
        @UserName, 
        @Password, 
        10, 
        10, 
        @PasswordSalt, 
        -5

 

Es candidato ideal la consulta anterior a encapsularla en un procedimiento almacenado que solamente sea para esa tarea.

Espero que les sirva de ayuda o guía.

[ASP.NET] Error: Validation of ViewState MAC failed

Cuando estaba publicando Federico en producción un proyecto (esto quiere decir que esta en etapas finales, hito importante en cualquier proyecto) se le presento el siguiente mensaje 😉

Error:

Error de la validación del estado de vista MAC. Si un clúster o una batería de servidores Web alojan esta aplicación, asegúrese de que la configuración <machineKey> especifica la misma validationKey y el mismo algoritmo de validación. AutoGenerate no se puede utilizar en un clúster.

English…

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

 
Si bien al único que le sucedió algo similar hace unos meses era a Ruben, aqui dejo plasmado las soluciones… la primera es la sugerencia del chef! pero por pagina no de todo el sitio

 

Si quieres puedes tener un seguimiento de todos los issues del view-state que están documentados en Microsoft Support, ademas hay sugerencias de como buscar estos issues:

 

Porque sucede esto?

Hay varias razones y seguramente (por la Ley de Murphy) la que le ocurre a uno no es nada de este listado, es decir no es un listado definitivo solo algunos tips de sucesos, pero si tienes alguno dímelo a través de un comentario en este articulo

NOTA: Por favor asegúrate que tu pagina no esta cacheada por el explorador, porque puede ser que se este enviando el viewstate “añejo”, y por eso te este dando este error.

 

 

Soluciones

 

Si es un caso aislado o por ejemplo estas en una intranet que pocos usuarios van a utilizar y no necesitas esa seguridad.. entonces puedes:

Solución 1:

 

En la pagina que requerimos deshabilitamos este cifrado.

<%@ Page Language=»..» EnableViewStateMac=»False»%>

Esto es bueno cuando tenemos que enviar el postback hacia otra pagina.

Solución 1.1:

Ídem al anterior pero lo hacemos para todo el sitio desde el web.config.
Esta alternativa hace que nuestra nivel de seguridad disminuya así que a tenerlo en cuenta (si es publico no creo que se conveniente, en cambio en una intranet habría que evaluarlo)

<pages enableViewStateMac=»false» />

enableViewStateMac: Atributo Boolean opcional.
Especifica si ASP.NET debe ejecutar un código de autenticación de mensajes (MAC) en el estado de vista de la página cuando el cliente la devuelva. Si el valor es True, se comprueba el estado de vista cifrado para asegurarse de que no se ha manipulado en el cliente.
El valor predeterminado es True.

 

Mas info sobre esta propiedad sigue el post de Carlos Zanini

 

Solución 2

<pages viewStateEncryptionMode =»Never» />

 viewStateEncryptionMode: Atributo ViewStateEncryptionMode opcional.
Especifica el modo de cifrado del estado de vista. La propiedad ViewStateEncryptionMode reemplaza este atributo, que se establece en el archivo de configuración.
Valores: Always, Auto, Never
El valor predeterminado es Auto

 

    

Solución 3

Aqui puede ser que se recicle el Pool  de Aplicaciones del IIS asi que la solucion by Microsoft

  • Ajústese las configuraciones en los grupo de aplicaciones para que sea menos probable que el reciclaje se produzca en períodos máximos.
  • Utilice una clave específica en el machine.config para impedir generación automática de claves a cada inicio de proceso
  • Sólo realice el postback a la misma página ASPX
  • Desactive servidor de seguridad y software de antivirus

Según leemos aquí:

 

 

Enlaces

 

Espero que les sirva de ayuda o guía.

[Entity Framework] Parámetros OUT en funciones de mi modelo (mapeados a procedimientos almacenados)

Cuando necesitamos enviar a una función de mi modelo que esta mapeada a un procedimiento almacenado un parámetro out necesitaremos crear el ObjectParameter, aquí una express mirada por los integrantes de esta obra…

 

El procedimiento almacenado (PA)

Si tenemos nuestro procedimiento con este parámetro OUT

image

 

Nuestra función mapeada en el modelo de Entity Framework

Podemos mapeamos a una función a nuestra entidad y dicha función que sea un PA que devuelva un listado del mismo tipo que la entidad.

image 

Si lo queremos utilizar nos pide convertir en ObjectParameter (que es el objeto de parámetros que utiliza internamente el modelo para mapear valga la redundancia los parámetros, puedes verlo en clase que genera el modelo,  TuModelo.Designer)

Bueno, como decía,  al utilizarlo no da este precioso mensaje de error:

image 

 

Solución: utilizar un ObjectParameter

Creamos el parámetro (no olvidar que ObjectParameter se encuentra en el namespace System.Data.Objects)

paramOutPageTotal = new System.Data.Objects.ObjectParameter("PageTotal", typeof(int));

y para recuperar

paginaPageTotal = Int32.Parse(paramOutPageTotal.Value.ToString());

Quedaría asi:

image

 

 

Enlaces