У меня есть код удаленного взаимодействия .NET, в котором фабричный метод, реализованный в некотором классе на стороне сервера, возвращает интерфейсы к конкретным объектам, также выполняясь на том же сервере. .NET Remoting автоматически создает прокси и позволяет мне передавать интерфейсы клиенту, который затем может вызывать их напрямую.
Примеры интерфейсов:
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 делает именно это, динамически генерируя прокси-сервер во время выполнения с заданным интерфейсом.
Извини, Джезель, я не понимаю.
Да, я могу использовать ChannelFactory на клиенте для создания прокси-сервера для IFactory, поскольку этот одноэлементный объект был «опубликован» сервером через URI на ServiceHost.
Но мои экземпляры IFoo на сервере не были связаны ни с одним ServiceHost; Я просто хочу вернуть их, вызвав свой прокси-сервер IFactory на клиенте, и пусть WCF выполнит вызов сервера IFactory, который предоставит некоторый IFoo, который затем будет перенаправлен обратно клиенту и заключен в динамически сгенерированный прокси. Я действительно просто хочу иметь возможность писать factory.GetFoo (); на моем клиенте ...
Тем временем Брайан указал мне на очень интересный документ, который я пропустил в MSDN, в котором объясняется, как имитировать маршалинг интерфейса .NET Remoting с помощью сеансов и EndPointAddress10 и ... как вы писали, ChannelFactory для получения прокси на стороне клиента.
Итак, теперь я знаю, как реплицировать мой код удаленного взаимодействия .NET, но заплатил за это относительно высокую цену. Сложность кода, связанного с WCF, немного выше, чем с простым старым решением для удаленного взаимодействия .NET.