У меня есть приложение WPF, которое до сих пор было только клиентом, но теперь я работаю над его разбиением на клиентскую и серверную стороны. В этой работе я представляю WCF для взаимодействия клиент-сервер. Мое приложение имеет несколько проектов, и ссылки на службы необходимы из более чем одного из них.Структура приложения с использованием WCF
Первоначальное усилие при проведении разделения состоит в том, чтобы делать все «прямо вперед». Все проекты, требующие связи с сервисом, получают ссылку на службу, а также основной проект приложения WPF - для получения там app.config. Я считаю, что это превращается в беспорядок довольно быстро, и я не могу себе представить, что это типичная архитектура, которую люди используют? Я также видел проблемы с тем, что каждая из ссылок на службы генерирует новую реализацию классов DataContract, поэтому нет общего понимания классов DataContract при перекрестке проектов. У меня есть несколько классов ViewModel в одном проекте, а другой проект инициирует некоторый ViewModel. Я хотел бы передать объект, полученный из службы, но я не могу, поскольку генерируемое клиентское представление полученного объекта отличается в каждом проекте.
Итак - существует ли рекомендованный способ структурирования таких разделов клиент/сервер с использованием WCF? Или принципы следовать? Я думаю, что один общий прокси-проект, используемый на стороне клиента, который выполняет связь с сервисами, обертывает полученные данные и возвращает данные в форме, хорошо известной клиентским библиотекам. Должен указывать только одну служебную ссылку, и я думаю, мне нужен только App.config в проекте wpfApp? Имеет ли это смысл?
Спасибо за очень хороший ответ!Несколько вопросов назад: имея хост службы, вам нужно запустить как хост, так и клиент при запуске приложения? Или есть какой-то способ обойти это? Что касается клиентских прокси - что бы вы предпочли? Manual impl звучит более согласованно, так как вам не нужно иметь дело с отзывами об обслуживании. – stiank81
@bambuska: конечно, вам нужно запустить как хост службы, так и клиент для тестирования; выберите «запустить несколько проектов» в Visual Studio для достижения этого - вы можете запустить как хост службы, так и клиент при нажатии F5. –
Прокси клиентов: Мне нравится полный контроль, который у меня есть, когда я выполняю ручную реализацию клиентских прокси - это ** требует **, хотя я могу разделить контракт между сервером и клиентом (так как ручное импровизация клиентских прокси должно иметь доступ к фактическим контрактам) –