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