Вопрос

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

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

Есть идеи?

Это было полезно?

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top