2009-07-28 10 views
13

Ich muss meinen WCF-Clientendpunkten eine benutzerdefinierte Verhaltenserweiterung hinzufügen. Ich habe versucht, dies durch Konfiguration zu tun, aber wurden durch den oft erwähnten Fehler gebissen, wo WFC-Konfiguration den Typnamen nicht korrekt analysieren kann. Kann ich das stattdessen programmatisch tun?Programmgesteuertes und globales Hinzufügen einer benutzerdefinierten WCF-Client-Endpunktverhaltenserweiterung

Ich kann die Konfigurationsabschnitte zur Laufzeit nicht ändern, da sie schreibgeschützt sind. Ich weiß, wenn ich eine Instanz eines Client-Proxy (d. H. ClientBase) erhalte, kann ich zu seinem Endpoint.Behaviors eine Instanz meines benutzerdefinierten Verhaltens hinzufügen. Allerdings müsste ich dies für jede Instanz tun.

Kann ich global zu den Endpunkten gelangen und sie vorher hinzufügen (z. B. in Global.asax), oder werden diese Endpunkte vorübergehend instanziiert und verworfen?

+0

Können Sie einen Link zu dem Problem veröffentlichen, dass der Typname nicht korrekt analysiert wird? –

Antwort

14

sollten Sie in der Lage sein, das Verhalten an den Client in Code, so etwas fügen:

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

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

Die erste Zeile prüfen, ob dieses Verhalten bereits zweimal Anwendung zu vermeiden, angewandt wurde. Wenn es nicht bereits angewendet wurde (der Aufruf .Find() gibt null zurück), können Sie dieses Verhalten programmgesteuert zu Ihrer Clientklasse hinzufügen.

Sie müssen dies alles tun, bevor Sie den ersten Anruf an den Dienst offenbar geben. Sobald Sie dies getan haben, können Sie den Client nicht mehr ändern.

Marc

+1

Das ist eine der Lösungen, die wir derzeit einsetzen. Das Problem ist, dass wir es langsam initialisieren. Ich würde einen proaktiveren Ansatz bevorzugen, vielleicht in Global.asax. Es scheint, dass ich es entweder in die Anwendungskonfiguration (inhärent global) setzen kann, oder ich kann es bei der ersten Verwendung programmatisch konfigurieren, aber ich kann es nicht programmatisch * global * konfigurieren. – Trinition

Verwandte Themen