2008-11-13 19 views
6

Mam trochę kodu .NET, gdzie metoda fabryczna, zaimplementowana w niektórych klasach po stronie serwera, zwraca interfejsy do konkretnych obiektów, również wykonywane na tym samym serwerze. .NET remoting automagicznie tworzy serwery proxy i pozwala mi przekazywać interfejsy do klienta, który może następnie wywoływać je bezpośrednio.Zwracanie interfejsu z usługi WCF

Przykład interfejsy:

public interface IFactory 
{ 
    IFoo GetFoo(); 
} 

public interface IFoo 
{ 
    void DoSomething(); 
} 

Przykład kodu klienta:

... 
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(); 
... 

To wszystko działa świetnie. Jednak teraz próbuję przenieść mój kod do WCF. Zastanawiam się, czy istnieje sposób na przekazywanie interfejsów i czy WCF generuje serwery proxy w locie na kliencie, podobnie jak oryginalne .NET.

I nie chcę zwracać wystąpień klas, ponieważ nie chcę ujawniać prawdziwych klas. Również serializacja pełnej instancji i wysyłanie jej między serwerem a klientem również nie jest opcją. Po prostu chcę, aby klient rozmawiał z obiektem serwera za pośrednictwem wskaźnika interfejsu/serwera proxy.

Wszelkie pomysły?

Odpowiedz

0

Klasa ChannelFactory robi dokładnie to, dynamicznie generuje proxy w środowisku wykonawczym danego interfejsu.

1

Niestety, jezell, ja nie rozumiem.

Tak, mogę użyć ChannelFactory na kliencie, aby utworzyć proxy dla IFactory, ponieważ obiekt singleton został "opublikowany" przez serwer za pośrednictwem identyfikatora URI na ServiceHost.

Jednak moje instancje IFoo na serwerze nie zostały powiązane z żadnymi ServiceHost; Chcę je odzyskać, wywołując serwer proxy IFactory na kliencie i pozwól WCF wykonać połączenie z serwerem IFactory, które zapewni pewną liczbę IFoo, która następnie zostanie przekierowana z powrotem do klienta i opakowana w dynamicznie generowany serwer proxy. Naprawdę chcę tylko móc napisać factory.GetFoo(); na moim kliencie ...

W międzyczasie Brian wskazał mi bardzo interesujący dokument, który przeoczyłem na MSDN, który wyjaśnia, jak zminimalizować interfejs .NET Remoting używając sesji i EndPointAddress10 i ... jak pisałeś, ChannelFactory, aby uzyskać proxy pośredniczące po stronie klienta.

Teraz już wiem, jak skopiować mój kod zdalny .NET, ale płacę za to stosunkowo wysoki koszt. Złożoność kodu związana z WCF jest nieco większa niż w przypadku zwykłego starego rozwiązania .NET.

Powiązane problemy