2009-07-28 8 views
13

Ho la necessità di aggiungere un'estensione di comportamento personalizzata ai miei endpoint client WCF. Ho provato a farlo attraverso la configurazione, ma sono stato morso dal bug spesso citato in cui la configurazione WFC non è in grado di analizzare correttamente il nome del tipo. Quindi posso farlo invece programmaticamente?Aggiunta al comportamento di un endpoint client WCF personalizzato a livello di codice e globale

Non riesco a modificare le sezioni di configurazione in fase di esecuzione perché sono di sola lettura. So che se ottengo un'istanza di un proxy client (cioè ClientBase), posso aggiungere al suo Endpoint.Behaviors un'istanza del mio comportamento personalizzato. Tuttavia, dovrei farlo per ogni istanza.

Posso raggiungere gli endpoint globalmente e pre-aggiungerli (ad esempio in Global.asax), oppure questi endpoint vengono istanziati e scartati transitoriamente?

+0

È possibile pubblicare un collegamento al problema relativo alla mancata analisi del nome del tipo in modo corretto? –

risposta

14

Si dovrebbe essere in grado di aggiungere il comportamento al cliente in codice di qualcosa di simile:

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

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

La prima linea sarebbe verificare se tale comportamento è già stato applicato per evitare di applicare due volte. Se non è già stato applicato (la chiamata .Find() restituisce null), è possibile aggiungere a livello di codice tale comportamento alla classe client.

È necessario eseguire tutto questo prima di emettere la prima chiamata al servizio, ovviamente. Dopo averlo fatto, non puoi più cambiare il client.

Marc

+1

Questa è una delle soluzioni che stiamo attualmente impiegando. La parte problematica è che inizializziamo pigramente. Preferirei un approccio più proattivo, forse in Global.asax. Sembra che sia possibile inserirlo nella configurazione dell'applicazione (intrinsecamente globale), oppure posso configurarlo programmaticamente al primo utilizzo, ma non posso programmarlo * globalmente * in modo programmatico. – Trinition

Problemi correlati