|
Динмический WCF- сервис
|
|||
---|---|---|---|
#18+
Доброго времени суток! Есть задача, совсем нетривиальная. Если упростить, то примерно так: разработать сервис ServiceMain, который будет вызывать WCF- сервисы других серверов. Функционал WCF- сервисов одинаков, но при этом заранее неизвестно, сколько таких сервисов может быть. То есть вероятна ситуация, что в любое время будет добавлен еще один сервер с захостенным WCF-сервисом. При этом не должно быть необходимости править код сервиса ServiceMain, нужно просто откорректировать файл конфигурации. И ServiceMain должен работать. То есть получаем динамический wcf-сервис, который в реале может находиться где-угодно. Как реализовать такое? Прошу подсказать, если это вообще возможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2016, 11:03 |
|
Динмический WCF- сервис
|
|||
---|---|---|---|
#18+
собственно, wcf и так размещается где угодно. Что именно вы будете править в конфиг файле по вашей задаче? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2016, 12:38 |
|
Динмический WCF- сервис
|
|||
---|---|---|---|
#18+
Winnipuh, в моем случае проблема в том, что я заранее не знаю, где будет размещен wcf-сервис. В процессе эксплуатации ServiceMain может появиться новый wcf-сервис, и нужно, чтобы ServiceMain мог с ним работать без добавления новых ServiceReference и правки кода. Нужно, чтобы достаточно было указать в файле конфигурации IP к новому серверу, endpoint к службе на этом сервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2016, 12:49 |
|
Динмический WCF- сервис
|
|||
---|---|---|---|
#18+
talja, ну, смотрите сами - если сможете уложить в конфигу и вызывать из нее все 3 (A,B и C), то получится. Сами готовы такое имплементировать? Хотя мне идея не нравится. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2016, 13:05 |
|
Динмический WCF- сервис
|
|||
---|---|---|---|
#18+
taljaWinnipuh, в моем случае проблема в том, что я заранее не знаю, где будет размещен wcf-сервис. В процессе эксплуатации ServiceMain может появиться новый wcf-сервис, и нужно, чтобы ServiceMain мог с ним работать без добавления новых ServiceReference и правки кода. Нужно, чтобы достаточно было указать в файле конфигурации IP к новому серверу, endpoint к службе на этом сервере. сделайте один раз сервис референсе, создавайте конфигурацию в приложении, а в конфиге как параметры - список имен хостов или меняйте в приложении адреса endpoints ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2016, 13:10 |
|
Динмический WCF- сервис
|
|||
---|---|---|---|
#18+
WinnipuhtaljaWinnipuh, в моем случае проблема в том, что я заранее не знаю, где будет размещен wcf-сервис. В процессе эксплуатации ServiceMain может появиться новый wcf-сервис, и нужно, чтобы ServiceMain мог с ним работать без добавления новых ServiceReference и правки кода. Нужно, чтобы достаточно было указать в файле конфигурации IP к новому серверу, endpoint к службе на этом сервере. сделайте один раз сервис референсе, создавайте конфигурацию в приложении, а в конфиге как параметры - список имен хостов или меняйте в приложении адреса endpoints Человек хочет все динамически делать, никаких сервис референсов или прокси не предполагается, видимо. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2016, 13:19 |
|
Динмический WCF- сервис
|
|||
---|---|---|---|
#18+
talja, Все эти сервисы реализуют единый интерфейс ( Функционал WCF- сервисов одинаков )? Можно динамически конфигурировать ChannelFactory (в том числе задавая удаленный адрес). Вот первая попавшаяся ссылка в гугле про то как это делать http://www.c-sharpcorner.com/UploadFile/ff2f08/channel-factory-in-wcf/ Это абсолютно нормальный режим работы, когда адрес удаленного сервиса может быть не известен заранее. Конфигурируйте себе этих ChannelFactory сколько угодно, на каждый удаленный сервис. Затем в нужный момент делайте CreateChannel, работайте с ним и закрывайте. Или держите канал открытым все время - если вам это нужно. Вы можете в своем ServiceMain сделать метод "AddAdress"/"DeleteAdress" куда пулять адреса, которые нужно динамически добавить/удалить из обработки. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2016, 21:34 |
|
Динмический WCF- сервис
|
|||
---|---|---|---|
#18+
ProBiotek, спасибо. Получила еще наводку на Discovery Service: http://geekswithblogs.net/shaunxu/archive/2012/07/06/service-discovery-in-wcf-4.0-ndash-part-1.aspx Отпишусь по итогу, какой вариант был выбран в качестве рабочего ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2016, 11:28 |
|
Динмический WCF- сервис
|
|||
---|---|---|---|
#18+
taljaПолучила еще наводку на Discovery Service: В принципе, вам дали абсолютно верную наводку. Ну а так, я могу навскидку назвать 3 способа автоматически публиковать/обнаруживать сервисы: 1) Discovery Service. Поднимаете 1 Discovery сервис, на котором автоматически публикуются все остальные сервисы. 2) Routing Service. Единая точка входа, которая затем перенаправляет запросы на остальные сервисы (но здесь нужно прописывать роутинги на новые сервисы) 3) Вычитывание из метаданных. Тут будет много ручной работы, но вцелом идея в том, что в WSDL можно публиковать множество endpoints, в том числе и на абсолютно разных машинах. Поэтому нужно будет написать собственную генерацию WSDL, которая будет лежать на отдельной машине, и в которой будут перечисляться все машины, которые предлагают такие сервисы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2016, 12:58 |
|
Динмический WCF- сервис
|
|||
---|---|---|---|
#18+
Можно в ServiceMain сделать методы для регистрации/дерегистрации дочерних сервисов параметризуемых байндингом и типом реализуемого сервисом интерфейса но в таком случае асе равно придется как-то генерить информацию для клиентского кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2016, 18:07 |
|
|
start [/forum/topic.php?fid=19&fpage=5&tid=1396796]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 254ms |
total: | 375ms |
0 / 0 |