2009-07-28 14 views
13

Mam potrzebę dodania niestandardowego rozszerzenia zachowania do moich punktów końcowych klienta WCF. Próbowałem to zrobić poprzez konfigurację, ale zostałem ugryziony przez często wspominany błąd, w którym konfiguracja WFC nie może poprawnie przeanalizować nazwy typu. Czy mogę zrobić to programowo zamiast tego?Programowe i globalne dodawanie niestandardowego rozszerzenia zachowania punktu końcowego klienta WCF

Nie mogę zmodyfikować sekcji konfiguracji w czasie wykonywania, ponieważ są one tylko do odczytu. Wiem, że jeśli dostaję instancję klienta proxy (tj. ClientBase), mogę dodać do jego Endpoint.Behaviors instancję mojego niestandardowego zachowania. Jednak musiałbym to zrobić dla każdej instancji.

Czy mogę dostać się do punktów końcowych na całym świecie i wstępnie je dodawać (np. W Global.asax), czy te punkty końcowe są tworzone i odrzucane przejściowo?

+0

Czy możesz zamieścić link do problemu dotyczącego nieprawidłowego parsowania nazwy typu? –

Odpowiedz

14

Powinieneś móc dodać zachowanie do klienta w kodzie coś takiego:

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

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

Pierwsza linia będzie sprawdzić, czy to zachowanie zostało już zastosowane w celu uniknięcia stosowania go dwukrotnie. Jeśli nie został już zastosowany (wywołanie .Find() zwraca wartość null), można programowo dodać to zachowanie do klasy klienta.

Musisz to zrobić, oczywiście, przed pierwszym połączeniem z serwisem. Po wykonaniu tej czynności nie można już zmienić klienta.

Marc

+1

Jest to jedno z rozwiązań, które obecnie stosujemy. Problem polega na tym, że leniwie go inicjujemy. Wolę bardziej proaktywne podejście, być może w Global.asax. Wygląda na to, że mogę albo umieścić go w konfiguracji aplikacji (z natury globalnej), albo skonfigurować programowo przy pierwszym użyciu, ale nie mogę programowo * globalnie * konfigurować go. – Trinition

Powiązane problemy