2009-07-28 12 views
13

Tengo la necesidad de agregar una extensión de comportamiento personalizada a mis puntos finales de cliente WCF. Intenté hacer esto a través de la configuración, pero he sido mordido por el error mencionado a menudo donde la configuración de WFC no puede analizar correctamente el nombre del tipo. Entonces, ¿puedo hacer esto programáticamente?Agregando programáticamente y globalmente una extensión de comportamiento de punto extremo de cliente WCF personalizada

No puedo modificar las secciones de configuración en tiempo de ejecución porque son de solo lectura. Sé que si consigo una instancia de un cliente proxy (es decir, ClientBase), puedo agregar a su Endpoint.Behaviors una instancia de mi comportamiento personalizado. Sin embargo, tendría que hacer esto para cada instancia.

¿Puedo acceder a los endpoints de forma global y agregarlos previamente (por ejemplo, en Global.asax), o estos puntos finales se crean instancias y se descartan de forma transitoria?

+0

¿Puedes publicar un enlace al tema sobre no analizar correctamente el nombre del tipo? –

Respuesta

14

Usted debe ser capaz de añadir el comportamiento al cliente en código de algo como esto:

IMyEndpointBehavior behavior = client.Endpoint.Behaviors.Find<IMyEndpointBehavior>(); 

if(behavior == null) 
{ 
    client.Endpoint.Behaviors.Add(new MyEndpointBehaviorImplementation()); 
} 

La primera línea sería comprobar si el comportamiento que ya se ha aplicado para evitar la aplicación de dos veces. Si no se ha aplicado ya (la llamada .Find() devuelve nulo), entonces puede agregar ese comportamiento programáticamente a su clase de cliente.

Tiene que hacer todo esto antes de emitir la primera llamada al servicio, obviamente. Una vez que haya hecho eso, ya no podrá cambiar al cliente.

Marc

+1

Esa es una de las soluciones que estamos empleando actualmente. La parte problemática es que lo estamos inicializando perezosamente. Preferiría un enfoque más proactivo, tal vez en Global.asax. Parece que puedo ponerlo en la configuración de la aplicación (inherentemente global), o puedo configurarlo programáticamente cuando lo use por primera vez, pero no puedo configurarlo * globalmente * programáticamente. – Trinition

Cuestiones relacionadas