Подтвердить что ты не робот

Создайте WCF-клиент без автоматического сгенерированного прокси-сервера

смотреть

WCF ChannelFactory против создания прокси

кажется, что лучшей практикой при создании WCF-клиента является создание прокси-сервера (не автогенерируется).

Я искал онлайн какое-то время, и я не нашел никакого полного примера (Proxy class, web.config)

Не могли бы вы привести пример или ссылки на ресурсы?

4b9b3361

Ответ 1

В этой статье речь идет именно о том, что вы просите, я считаю:

WCF Ручной путь... Правильный путь

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

Там причина WCF позволяет обмен метаданных и обнаружение, а VS автоматически создаст прокси для вас.

В любом случае, это классная статья и технику, которая стоит изучать.

Ответ 2

Вот как я это делаю.

Получить контракты на обслуживание и контракты с данными

Если у меня есть доступ к коду службы, у меня есть все контракты. Если нет, я могу использовать svcutil или Добавить ссылку на службы, чтобы сгенерировать их.

Сделать конфигурацию

Я использую Добавить ссылку на службы только для получения файла app.config. Затем я удаляю все, что он генерирует. При необходимости отредактируйте файл app.config.

Определить factory

Скажем, у меня есть контракт на обслуживание IFooService:

interface IFooServiceChannel : IFooService, IClientChannel { }

Это буквально это. Нет членов.

Создать factory

fooServiceFactory = new ChannelFactory<IFooServiceChannel>(
                        "NetTcpBinding_IFooService");

Строка "NetTcpBinding_IFooService" является атрибутом name элемента binding в app.config.

Создать канал

fooService = fooServiceFactory.CreateChannel();

Использовать его

fooService.DoSomething();

Самая сложная часть - получение права на app.config. Вам нужно узнать о привязках и конечных точках. Это немного кривая обучения, но ничего радикального.

Ответ 3

Вот основные шаги.

  • Создайте свой сервис, как обычно.
  • Переместите интерфейс, который ваша служба реализует в сборку, которая может совместно использоваться клиентом.
  • Создайте ChannelFactory, где T - ваш интерфейс. Вам нужно будет предоставить uri вашей службы конструктору.
  • Вызов factory.CreateChannel(). Это будет тип T.
  • Используйте канал для совершения вызовов.

Это действительно так просто. Нет автоматического сгенерированного кода, никаких ссылок на службы. Это становится немного сложнее с асинхронными вызовами и Silverlight, но не слишком много.