2008-11-13 21 views
6

Bazı sunucu tarafı sınıfında uygulanan bir fabrika yönteminin, aynı nesnede de çalışarak beton nesnelere arabirimler döndürdüğü bazı .NET yeniden kodlama kodum var. NET remoting automagically proxy'leri oluşturur ve ara yüzleri istemciye iletmeme izin verir, daha sonra doğrudan onları arayabilir.Bir WCF hizmetinden bir arabirim döndürme

Örnek arayüzler:

public interface IFactory 
{ 
    IFoo GetFoo(); 
} 

public interface IFoo 
{ 
    void DoSomething(); 
} 

Örnek istemci kodu:

... 
IFactory factory = (IFactory) System.Activator.GetObject (typeof (IFactory), url); 
... 
IFoo foo = factory.GetFoo(); // the server returns an interface; we get a proxy to it 
foo.DoSomething(); 
... 

Bunların hepsi iyi çalışıyor. Ancak, şimdi kodumu WCF'ye taşımaya çalışıyorum. Arayüzleri geçmenin ve WCF'nin istemcide anında proxy'leri üretmesinin bir yolu olup olmadığını merak ediyorum.

Ayrıca sınıf örneklerini döndürmek istemiyorum, çünkü gerçek sınıfları göstermek istemiyorum. Ve tam örneği serileştirip sunucu ile istemci arasında geri ve ileriye göndermek de bir seçenek değil. İstemcinin sadece sunucu nesnesini bir arabirim işaretçisi/proxy'si aracılığıyla konuşmasını istiyorum.

Herhangi bir fikrin var mı?

cevap

0

ChannelFactory sınıfı tam olarak bunu yapar, bir arabirim verilen çalışma zamanında dinamik olarak bir proxy oluşturur.

1

Üzgünüm jezell, ben alamadım.

Evet, bunu tekil nesne ServiceHost bir URI aracılığıyla sunucu tarafından "yayımlanan" beridir, IFactory için bir proxy oluşturmak için istemci üzerinde ChannelFactory kullanabilirsiniz.

Ama sunucudaki benim IFoo örneklerini herhangi bir ServiceHost; İstemcideki IFactory proxy'imi arayarak onları geri almak istiyorum ve WCF'nin IFoo numaralı sunucuya IFactory numaralı çağrıyı yapmasına izin vermek istiyorum. Bu, daha sonra istemciye geri döndürülecek ve dinamik olarak oluşturulmuş bir proxy'ye sarılacaktı. Gerçekten sadece factory.GetFoo(); yazıcımı istemiyorum.

Bu arada, MSDN beni gözden kaçırdığı çok ilginç bir belgeye işaret etti. oturumları kullanarak ve EndPointAddress10 ve ... yazdıkça, istemci tarafı proxy'lerini almak için ChannelFactory.

Şimdi, .NET uzaktan kodumun nasıl çoğaltılacağını biliyorum, ancak bunun için nispeten yüksek bir maliyet ödüyorum. WCF ile ilgili kod karmaşıklığı, düz eski .NET remoting çözümüyle karşılaştırıldığında biraz daha yüksek.