2009-07-28 24 views
13

WCF istemci uç noktalarına özel bir davranış uzantısı eklemem gerekiyor. Bunu yapılandırma yoluyla yapmayı denedim, ancak WFC yapılandırmasının tür adını doğru şekilde ayrıştıramayacağı sıkça bahsedilen hata tarafından ısırıldı. Bunun yerine programlı olarak yapabilir miyim?Programsal ve global olarak özel bir WCF istemci bitiş noktası davranış uzantısı ekleniyor

Yapılandırma bölümlerini çalışma zamanında değiştiremiyorum çünkü bunlar salt okunur. Bir istemci proxy örneğini (ı. ClientBase) alıyorum, Endpoint.Behaviors özel davranışımın bir örneğini ekleyebilir miyim biliyorum. Ancak, her bir örnek için bunu yapmak zorundayım.

Son noktalara küresel olarak ulaşabilir ve bunları önceden ekleyebilir miyim (ör. Global.asax'da) veya bu uç noktalar anında başlatılıp geçici olarak atılabilir mi?

+0

Türü adı doğru bir şekilde ayrıştırmayla ilgili bir sorun yayınlayabilir misiniz? –

cevap

14

Böyle kod şey müşteriye davranış eklemek mümkün olmalıdır: yani davranış zaten iki kez uygulayarak önlemek için uygulandıysa

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

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

ilk satırı kontrol ederim. Henüz uygulanmadıysa (.Find() araması null değerini döndürür), o davranışı programlı olarak istemci sınıfınıza ekleyebilirsiniz.

Tüm bunları, hizmete yapılan ilk çağrıyı yapmadan önce yapmanız gerekir. Bunu yaptıktan sonra, artık müşteriyi değiştiremezsin.

Marc

+1

Şu anda çalıştığımız çözümlerden biri bu. Zahmetli olan kısım, tembelce başlattığımız şey. Belki de Global.asax'ta daha proaktif bir yaklaşım tercih ederim. Görünüşe göre uygulama konfigürasyonuna (doğal olarak global) ya da programlı olarak ilk kullanımda yapılandırabilirim, fakat programlı olarak * küresel olarak yapılandıramıyorum. – Trinition