Создайте WCF-клиент без автоматического сгенерированного прокси-сервера
смотреть
WCF ChannelFactory против создания прокси
кажется, что лучшей практикой при создании WCF-клиента является создание прокси-сервера (не автогенерируется).
Я искал онлайн какое-то время, и я не нашел никакого полного примера (Proxy class, web.config)
Не могли бы вы привести пример или ссылки на ресурсы?
Ответы
Ответ 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, но не слишком много.