Jeżeli nasz serwis udostępnia endpoint mex-owy, klienci mają możliwość wyboru dynamicznego endpointa. Nie jest wymagane w tym przypadku tworzenie u klientów konfiguracji. Wystarczy podać adres endpointa mex-owego a wszystkie pozostałe endpointy zostaną automatycznie pobrane.
Aby tego dokonać po pierwsze serwis musi udostępnić endpoint mex. Jeżeli już mamy taki endpoint, na kliencie korzystamy z klasy
MetadataResolver i metody
Resolve. Metoda ta przyjmuje dwa parametry:
- typ serwisu
- adres endpointa mex
Po wywołaniu tej metody zostanie zwrócona kolekcja endpointów obsługiwanych przez aplikację. Możemy przejść po tej kolekcji i wybrać dowolny endpoint, który jest nam najwygodniej stosować.
Przykładowy kod realizujący dynamiczne odnajdowanie endpointów:
Code:
var serviceEndpointCollection = MetadataResolver.Resolve(typeof(IService1), new EndpointAddress("http://localhost/MyService/mex"));
ChannelFactory<IService1> channelFactory = null;
foreach (var endpoint in serviceEndpointCollection)
{
if (endpoint.Binding.GetType() == typeof(BasicHttpBinding))
{
channelFactory = new ChannelFactory<IService1>(endpoint.Binding, endpoint.Address);
var channel = channelFactory.CreateChannel();
var data = channel.GetData(10);
Console.WriteLine(data);
((IClientChannel)channel).Close();
channelFactory.Close();
}
}
W przykładzie pokazanym powyżej iterujemy po kolekcji zwróconych endpointów. W przypadku gdy odnajdziemy
BasicHttpBinding tworzymy kanał a następnie wykonujemy operację.
Zaletą tego rozwiązania jest przede wszystkim brak potrzeby trzymania dodatkowej konfiguracji endpointów w aplikacji. Wystarczy tylko adres endpointa mex, a pozostałe informacje zostaną pobrane w czasie działania programu.
Brak komentarzy:
Prześlij komentarz