Несколько конфигураций адресов служб в приложении WCF Silverlight - PullRequest
1 голос
/ 01 апреля 2010

Моя команда строит наше первое значительное приложение Silverlight, используя 3-х уровневую архитектуру и WCF. На сегодняшний день мы разработали около 10 отдельных сервисов WCF на среднем уровне, и это число будет только расти.

Как правило, уровень представления (т.е. приложение Silverlight) указывает на службы, размещенные на нашем сервере разработки. Однако бывают случаи, когда я хочу получить доступ к сервисам с локального хоста - т.е. Машина разработчиков.

Существует ли простой способ изменить место, в котором уровень представления ищет службы? Есть ли какой-нибудь способ легко переключаться между вариантами здесь?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2010

Даже проще, чем обновить файл конфигурации на стороне клиента ??

То, что вы могли бы рассмотреть, - это сконфигурировать клиентскую конфигурацию в отдельном файле и создать ее для «обычного» использования, а другую для «разработки на компьютере».

Затем в вашей конфигурации WCF используйте внешние файлы конфигурации:

<system.serviceModel>
  <client configSource="client.normal.config" />
</system.serviceModel>

и если вам нужно переключиться на использование "dev machine", используйте

<system.serviceModel>
  <client configSource="client.localhost.config" />
</system.serviceModel>

Эти два внешних файла конфигурации будут выглядеть примерно так:

[client.normal.config]

<?xml version="1.0" encoding="utf-8" ?>
<client>
    <endpoint name="...." address="http://YourServer/Service1" ...... />
    <endpoint name="...." address="http://YourServer/Service2" ...... />
    ....
    <endpoint name="...." address="http://YourServer/ServiceX" ...... />
</client>

[client.localhost.config]

<?xml version="1.0" encoding="utf-8" ?>
<client>
    <endpoint name="...." address="http://localhost/Service1" ...... />
    <endpoint name="...." address="http://localhost/Service2" ...... />
    ....
    <endpoint name="...." address="http://localhost/ServiceX" ...... />
</client>

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

Это не особенность WCF - это особенность конфигурации .NET. Любой раздел конфигурации (но не группы разделов конфигурации) может быть выведен в отдельный файл * .config. Вы можете поместить другие части конфигурации WCF во внешние файлы конфигурации (но вы не можете экстернализовать весь узел <system.serviceModel>, поскольку это группа разделов конфигурации, а не раздел конфигурации).

1 голос
/ 01 апреля 2010

Я следую методу, согласно которому, если адрес указан в файле ServiceReferences.ClientConfig, то он используется, в противном случае я восстанавливаю конечную точку назначения на основе адреса хоста и известного местоположения в веб-приложении хоста, как подробно здесь .

Еще один способ сделать это - установить целевые URL конечной точки в вашем web.config вашего веб-приложения, а затем передать эти параметры конфигурации в элемент управления silverlight как часть его initParams. Получив целевой адрес, вы можете просто программно построить конечную точку, как указано в ссылке выше.

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