Развертывание службы WCF - где хранятся файлы приложения?
-
03-07-2019 - |
Вопрос
У меня есть служба WCF, которая вызывает через BL уровень данных и, в конечном счете, серверную часть SQL Server.Мой сервис предоставляет различные методы / операции для извлечения данных из базы данных.Я также создал для него хост для тестирования и хост службы Windows, именно так я планирую его развернуть.
Вчера, когда я выполнил тестовое развертывание, служба запустилась нормально, но у меня не было возможности проверить, правильно ли обрабатываются данные.Дело вот в чем:Моя тестовая среда развертывания (MS Server 2003) полностью отличается от моей собственной локальной тестовой среды (ноутбука).Я развернул, скопировав содержимое bin \ debug проекта службы Windows на сервер и сославшись на .exe там, когда я использовал InstallUtil.exe.Но подключение для передачи данных для DL, очевидно, должно принимать другую строку подключения, поскольку оно должно подключаться к базе данных на сервере, а не к моему ноутбуку.Тем не менее, единственный app.config, который я вижу в каталоге, в который я развернул, - это файл для хоста службы.Другие проекты, такие как DL и BL, также существуют в виде DLL, но ни для одного из них нет app.config.Итак, как я могу заменить app.config для DL на правильный для этой среды?Я уверен, что это простая проблема, о которой я просто не догадываюсь.
Связанный с этим вопрос:Если позже мы решим, что хотим использовать HTTP-хост вместо TCP или в дополнение к нему, могу ли я запустить второй хост, работающий с той же службой?Нужно ли мне просто развернуть хост с помощью IIS и добавить сервисный узел в app.configs?
Решение
App.config для среды размещения, в данном случае управляемой службы Windows, содержит конфигурацию для всех ваших модулей.Аналогично, Web.config содержит все конфигурации, если вы размещаете его в IIS.
Другие советы
Когда вы развертываете проект, единственный app.config / web.config, который вы получите, - это тот, который находится в вашем исполняемом проекте (веб-сайт / консольное приложение / служба Windows / приложение windows forms / и т.д.проект).Любые app.configs для проектов DLL не будут скопированы в каталог bin.
Вам нужно будет скопировать разделы конфигурации из ваших DLL-проектов и поместить их в ваш сервисный проект app.config.
Что касается вашего второго вопроса, вы можете размещать разные конечные точки для одной и той же службы на одном ServiceHost.Вы можете разместить конечную точку HTTP в сервисном / консольном приложении Windows.Если вы размещаете HTTP вне IIS, вам может потребоваться предоставить разрешения вашему пользователю, чтобы разрешить ему открывать HTTP-порт.(см . http://msdn.microsoft.com/en-us/library/ms733768.aspx ).Для HTTP ваша жизнь может быть проще при размещении в IIS, но это работает в обычном ServiceHost.
<system.serviceModel>
<services>
<service name="MyServiceTypes.MyService">
<endpoint address="http://localhost:44444/MyService"
binding="basicHttpBinding"
contract="MyServiceTypes.IMyService" />
<endpoint address="net.tcp://localhost:55555/MyService"
binding="netTcpBinding"
contract="MyServiceTypes.IMyService" />
</service>
</services>
</system.serviceModel>