niedziela, 15 września 2013

Dynamiczne wybieranie endpointa

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);
                    //Close channel
                    ((IClientChannel)channel).Close();
                    //Close factory
                    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