2011-09-26

Discovery New Release!

В пятницу были обновлены сервисы DiscoveryProxy на обоих серваках, а также добавлена в SVN новая библиотека работы c ним (DiscoveryUtils.dll).
Новые адреса:
http://srv08/Discovery/DiscoveryProxyService.svc
http://192.168.4.1/Discovery/DiscoveryProxyService.svc

Как сделать свой сервис видимым в Discovery: 
1. Добавить Reference на System.ServiceModel.Discovery
2. Добавить Reference на DiscoveryUtils
3. Перед интерфейсом контракта добавить атрибут [MataDataBehavior]

    [ServiceContract]
    [MetaDataBehavior]
    public interface ITestService
    {
        [OperationContract]
        string GetData(int value);
        [OperationContract]
        CompositeType GetDataUsingDataContract(CompositeType composite);     
    }

4. Задать привязку WSHttpBinding без шифрования:

<bindings>
      <wsHttpBinding>
        <binding name="NoSecure">
          <security mode="None"/>
        </binding>
      </wsHttpBinding>
    </bindings>


5. В конфиге к сервису добавить поведение, содержащее секцию DiscoveryService (указывайте вашу привязку и реальный адрес Discovery):
<serviceDiscovery>
            <announcementEndpoints>
                 <endpoint address="http://localhost/Discovery/DiscoveryProxyService.svc"
                              binding="wsHttpBinding" bindingConfiguration="NoSecure"          
                              kind="announcementEndpoint">
                 </endpoint>
            </announcementEndpoints>
</serviceDiscovery>
Все готово: ваш сервис отсылает информацию о себе Discovery, в том числе и информацию о привязке.

Как пользоваться Discovery для поиска сервисов:
1. Добавить ссылки на System.ServiceModel.Discovery и DiscoveryUtils.
2. C помощью ServiceReference получить метаданные контракта.
2. В секции AppSettings Вашего конфига прописать адрес DiscoveryProxy:

  <appSettings>
    <add key="DefaultDiscoveryProxyAddress"      
             value="http://localhost/Discovery/DiscoveryProxyService.svc" /> 
  </appSettings>

3. Получить экземпляр интерфейса IDiscoveryAgent:
  var agent = DiscoveryAgent.Instance;
4. Получить  экземпляр необходимого Вам сервиса:
  IService qqq = agent.GetClient<IService>();

Радоваться жизни!
Во время разработки можно вместо DiscoveryAgent использовать ConfigurationAgent - этот класс берет адреса сервисов прямо из Вашего конфига, не обращаясь к Discovery. Они имеют общий интерфейс IDiscoveryAgent.









Комментариев нет: