Возврат интерфейса из службы WCF

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

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

Есть идеи?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
4 360
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

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

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

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

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