He colocado algunos datos en el contexto de la llamada (CallContext.SetData(key,data)
) donde los datos son de un tipo que implementa ILogicalThreadAffinative
. La razón por la que implementa ILogicalThreadAffinative es porque debe compartirse entre varios subprocesos en la aplicación actual.Cómo limitar el alcance de un contexto de llamada lógica
Sin embargo, la aplicación también realiza llamadas remotas a otro servicio, y aquí es donde aparece el problema. Mi implementación ILogicalThreadAffinative no se puede serializar y no debería ser. Incluso si tuviera que marcarlo como serializable, la aplicación remota no tiene acceso al ensamblaje en el que se declara el tipo para que no pueda deserializarlo.
Entonces, ¿cómo comparto datos de contexto de llamada dentro de mi aplicación (AppDomain) pero no con cada aplicación externa con la que deba hablar?
Sé que encontraste una solución a tu problema, pero recientemente encontré este extracto del libro de Jeffrey Richter sobre el uso de ExecutionContext.SuppressFlow para suprimir el flujo de datos de hilos lógicos . No sé si funcionará en el caso que describe, pero, si lo hace, podría ser más limpio que lo que finalmente se le ocurrió: http://blogs.msdn.com/b/microsoft_press/archive/2010 /01/27/jeffrey-richter-excerpt-from-clr-via-c-third-edition.aspx – wageoghe
Wagaoghe, que parece prometedor como una solución alternativa. Me gustaría probarlo en un escenario remoto para estar seguro. Su desventaja es que debe configurarse por llamada dentro del código de llamada.La solución anterior está más orientada a los aspectos y, de alguna manera, más limpia. –