Как мне получить WCF для генерации списка прокси? - PullRequest
2 голосов
/ 20 февраля 2012

Как мне получить WCF для генерации списка или IEnumerable прокси для реального объекта? Я делаю это в автономном приложении.

Вот что у меня есть:

public interface IRemoteControlGroup {
     List<IRemoteControl> GetInstances();
}

public class RemoteControlGroupImpl : IRemoteControlGroup {
    public List<IRemoteControl> GetInstances()
    {
        System.Console.Error.WriteLine("Called GetInstances()");
        List<IRemoteControl> list = new List<IRemoteControl>();
        // implementation detail: get this list of IRemoteControl objects
        return list;
    }
}

public interface IRemoteControl {
     void Stop();
     void Start();
     void GetPID();
}

public class RemoteControlImpl : IRemoteControl {
     // actual implementation
}

Я хочу, чтобы WCF:

  • Предложить услугу RemoteControlGroupImpl, определенную договором на IRemoteControlGroup.
  • Дайте мне List<IRemoteControl> при вызове IRemoteControlGroup.GetInstances() (на клиенте), где элементы списка являются прокси, которые реализуют IRemoteControl (путем вызова фактических IRemoteControl объектов хоста).

Я не хочу, чтобы WCF проталкивал реальные RemoteControlImpl объекты по проводам; Я просто хочу выдвинуть прокси, которые реализуют IRemoteControl. RemoteControlImpl объекты на самом деле содержат дескрипторы локальной системы (дескрипторы окна, потому что наши приложения предоставляют только интерфейс с графическим интерфейсом) и, следовательно, не сериализуемы. Количество элементов, возвращаемых GetInstance(), может варьироваться.

Я нашел эту статью , которая звучит как то, что я хочу. Вид. Но это не говорит мне, как сделать это в коде; просто в конфигурации. Это также не совсем описывает то, что я хочу. Точка входа для службы предоставляет прокси; но я хочу, чтобы точка входа для моей службы доставляла список прокси.

1 Ответ

0 голосов
/ 21 февраля 2012

Как отметил @Джон Сондерс, вам нужно переосмыслить свой подход.Я могу вспомнить пару общих подходов, которые могут быть полезны в зависимости от того, что движет вашими «множественными» экземплярами.

1) Если они управляются извне приложения (т. Е. Список доступных целей IRemoteControl нединамически изменяться во время выполнения), тогда вы можете выставить один и тот же контракт через несколько конечных точек.Например, http://localhost/remotecontrol.svc/instance1, http://localhost/remotecontrol.svc/instance2, и т. Д. Доступность различных конечных точек может быть опубликована через ваш WSDL.

2) Если несколько целей являются динамическими, то самый простой подход - это переопределитьваш контракт:

public interface IRemoteControlGroup {
     List<string> GetInstances();
     void Stop(string instanceId);
     void Start(string instanceId);
     void GetPID(string instanceId);
}

Внутренне ваша служба будет поддерживать словарь доступных объектов IRemoteControl, снабженный ключом InstanceId, и просто направлять входящую операцию на целевой экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...