domingo, 16 de marzo de 2014

Cápsula Windows Phone 8. Cajas Herramientas. ColorPicker y ColorSlider

 

En esta cápsula se explican los controles: ColorPicker y ColorSlider de la caja de herramientas Coding4Fun.

Espero que les guste.

 

viernes, 7 de marzo de 2014

Solución al problema: No se ha podido inscribir en una transacción distribuida.

 

Bueno, debido a que me costó muchas horas de esfuerzo, el ver como solucionar este problema. He decidio postear la solución.

Lo primero que hay que decir es que la causa de este problema es simplemente, que se alcanza el tiempo máximo para la completación del código en que la transacción está activa.

Por ejemplo en tu código tienes un bloque enmarcado en una transacción:

using (TransactionScope transaccion = new TransactionScope())
{


}

El proceso que se realice dentro del bloque de transacción debe demorarse máximo un tiempo dado. Si se demora más se genera la excepción:

No se ha podido inscribir en una transacción distribuida

Cuando no se encuentra en nuestras manos hacer que disminuya el tiempo del proceso, por ejemplo cuando llamamos a servicios y dependemos de que éstos nos entreguen sus respuestas. Es necesario, de común acuerdo con los responsables del tiempo de respuesta de dichos servicios, definir un tiempo máximo para que las transacciones permanezcan activas y modificar e incrementar en este caso el valor por defecto establecido.

Se encuentra que lo que se debe hacer para aumentar, este tiempo por defecto máximo, en que las transacciones se encuentren activas es:

1. Modificar el TimeOut asociado al MSDTC que por defecto está en 60 segundos (1 minuto). Esto es configuración de sistema operativo.

Aca como se hace en Windows 7.

Ir a la ruta:

Control Panel\System and Security\Administrative Tools\Component Services\Computers\My Computer y en MyComputer, click derecho y propiedades:

Repetidos2

En la Pantalla que sale, en el Tab Options:

Repetidos3

2. Modificar el código para especificar al TransactionScope un tiempo máximo para que la transacción permanezca activa.

            using (TransactionScope transaccion = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0,5,0)))

{

Nota: para mi necesidad particular se hizo la modificación para 5 minutos (300 segundos).

Nota importante: Para que el cambio del tiempo máximo en las transacciones tenga efecto, se deben hacer los pasos 1 y 2, sino se hacen los 2, se sigue obteniendo el problema de transacción distribuida.