Возврат интерфейса из службы WCF - PullRequest
6 голосов
/ 14 ноября 2008

У меня есть некоторый код удаленного взаимодействия .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.

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

Есть идеи?

Ответы [ 3 ]

2 голосов
1 голос
/ 14 ноября 2008

Извините, Джезелл, я не понимаю.

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

Но мои IFoo экземпляры на сервере не были связаны ни с одним ServiceHost; Я просто хочу получить их обратно, вызвав мой IFactory прокси на клиенте, и позволить WCF сделать вызов серверу IFactory, который предоставит некоторую IFoo, которая затем будет перенаправлена ​​обратно клиенту и обернута в динамически сгенерированный прокси. Я действительно просто хочу написать factory.GetFoo (); на моем клиенте ...

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

Итак, теперь я знаю, как реплицировать мой код удаленного взаимодействия .NET, но за него приходится платить довольно высокую цену. Сложность кода, связанная с WCF, немного выше, чем с простым старым решением удаленного взаимодействия .NET.

0 голосов
/ 14 ноября 2008

Класс ChannelFactory делает именно это, динамически генерирует прокси во время выполнения при наличии интерфейса.

...