Как вы поддерживаете сервисную библиотеку WCF в VS2010 для проектов как хоста, так и клиента? - PullRequest
0 голосов
/ 15 июня 2011

У меня есть решение в VS2010 с 3 проектами:

  • WCFServiceLib - проект, созданный с помощью шаблона библиотеки служб WCF.
  • ServiceHostConsole - проект, созданный с помощью шаблона Консольного приложения.
  • ServiceClientConsole - проект, созданный с помощью шаблона Консольного приложения.

Шаблон VS создал app.config в WCFServiceLib, который содержит все настройки для служб, которые я хочу предоставить.
ServiceHostConsole имеет WCFServiceLib в качестве ссылки и размещает службу, но не имеет своего собственного файла app.config.
Если я пытаюсь запустить хост-проект без app.config, он не может разместить службы, поэтому я переместил app.config из WCFServiceLib в ServiceHostConsole.

ServiceClientConsole имеет ссылку Service на службу внутри WCFServiceLib. Но как только я переместил app.config из проекта Lib в проект Host, я больше не могу обновлять ссылку на службу или добавлять новые службы, которые я добавил в проект lib.
Чтобы клиентский проект мог видеть ссылки на сервисы, я должен переместить app.config обратно в проект lib, выполнить обновления / добавления к ссылкам на сервисы на клиенте, а затем переместить app.config обратно в хост-проект. .

Обратите внимание, что я не могу оставить дубликат файла app.config как в проекте Service Lib, так и в проекте Host, поскольку это приведет к тому, что узел также не сможет запуститься. В любом случае это было бы плохим решением, так как в разных местах создавались бы дублированные конфигурации. Изменение только одного из них может создать проблемы, которые трудно отследить.

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

Эта проблема становится очень раздражающей, когда вы активно разрабатываете сервисы и вам необходимо постоянно запускать хост и тестировать клиент с обновленными сервисами, отсюда и название вопроса:

Как вы поддерживаете сервисную библиотеку WCF в VS2010 для проектов как хоста, так и клиента?

1 Ответ

2 голосов
/ 15 июня 2011

Сервисная библиотека WCF создает конфигурацию, потому что она используется инструментом WcfServiceHost.exe.Этот инструмент размещает ваш сервис, если вы пытаетесь протестировать его без собственного хостингового приложения и, основываясь на вашем описании, он также размещает сервис, когда вы добавляете ссылку на сервис в клиенте (из-за этого вы не можете обновить ссылку при переносе конфигурации избиблиотека).Конфигурация в библиотеке никогда не используется хост-приложением, и она не вступает в противоречие с конфигом, используемым хост-приложением.

Хост-приложению всегда нужна собственная конфигурация, и не должно быть проблем сКонфиг как в хосте, так и в библиотеке.Вы не должны создавать сервисную ссылку из самой библиотеки.Если у вас есть собственный хост, используйте его, когда вы добавляете ссылку на сервис и поддерживаете только конфигурацию на хосте.

Есть одна маленькая проблема.Чтобы добавить ссылку на службу, служба должна быть запущена.Если и клиент, и хост являются частью одного и того же решения, вы должны запустить сервис без отладки (или за пределами Visual Studio), чтобы иметь возможность добавить ссылку на сервис для клиента.

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