Връщане на интерфейс от WCF услуга

Имам някакъв .NET код за отдалечено управление, при който фабричен метод, внедрен в някакъв клас от страна на сървъра, връща интерфейси към конкретни обекти, като също се изпълнява на същия сървър. .NET отдалеченото автоматично създава проксита и ми позволява да предам интерфейсите на клиента, който след това може да ги извика директно.

Примерни интерфейси:

public interface IFactory
{
    IFoo GetFoo();
}

public interface IFoo
{
    void DoSomething();
}

Примерен клиентски код:

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

Всичко това работи чудесно. Сега обаче се опитвам да мигрирам кода си към WCF. Чудя се дали има начин да се предават интерфейси и WCF да генерира проксита в движение на клиента, както и оригиналното .NET отдалечено управление.

И не искам да връщам екземпляри на клас, тъй като не искам да излагам реални класове. И сериализирането на пълния екземпляр и изпращането му напред и назад между сървъра и клиента също не е опция. Наистина просто искам клиентът да говори със сървърния обект чрез интерфейсен указател/прокси.

Някакви идеи?


person Pierre Arnaud    schedule 13.11.2008    source източник


Отговори (3)



Съжалявам, Jezell, не разбирам.

Да, мога да използвам ChannelFactory на клиента, за да създам прокси към IFactory, тъй като този единичен обект е бил "публикуван" от сървъра чрез URI на ServiceHost.

Но моите IFoo екземпляри на сървъра не са били свързани с никакви ServiceHost; Просто искам да ги върна, като извикам моето IFactory прокси на клиента и оставям на WCF да извърши повикването към сървъра IFactory, което ще предостави някои IFoo, които след това ще бъдат маршалирани обратно към клиента и обвити в динамично генериран прокси. Наистина просто искам да мога да напиша factory.GetFoo (); на моя клиент...

Междувременно Брайън ме насочи към много интересен документ, който бях пренебрегнал в MSDN, който обяснява как да имитирам маршалинга на интерфейса на .NET Remoting чрез използване на сесии и EndPointAddress10 и ... както написахте, ChannelFactory за получаване на проксита от страна на клиента.

И така, сега знам как да репликирам своя .NET код за отдалечено управление, но плащам сравнително висока цена за това. Сложността на кода, свързана с WCF, е доста по-висока, отколкото при обикновеното старо решение за отдалечено управление .NET.

person Pierre Arnaud    schedule 13.11.2008

Класът ChannelFactory прави точно това, генерира прокси динамично по време на изпълнение с даден интерфейс.

person jezell    schedule 13.11.2008