public void DefaultValues()
        {
            var cd      = ContractDescription.GetContract(typeof(ITestService));
            var binding = new BasicHttpBinding();
            var de      = new DynamicEndpoint(cd, binding);

            Assert.AreEqual(DiscoveryClientBindingElement.DiscoveryEndpointAddress, de.Address, "#1");
            var fc = de.FindCriteria;

            Assert.IsNotNull(fc, "#2");
            Assert.AreEqual(1, fc.ContractTypeNames.Count, "#2-2");
            Assert.AreEqual(0, fc.Scopes.Count, "#2-3");
            Assert.AreEqual(0, fc.Extensions.Count, "#2-4");

            var dep = de.DiscoveryEndpointProvider;

            Assert.IsNotNull(dep, "#3");
            var dise = dep.GetDiscoveryEndpoint();

            TestDiscoveryEndpoint(dise);

            Assert.IsNotNull(de.Contract, "#11"); // for ITestService
            Assert.AreEqual("http://tempuri.org/", de.Contract.Namespace, "#11-2");
            Assert.AreEqual("ITestService", de.Contract.Name, "#11-3");
            Assert.IsNotNull(de.Binding, "#12"); // Custom{DiscoveryClient|BasicHttpBinding-elements}
            Assert.IsNotNull(de.Binding.CreateBindingElements().FirstOrDefault(be => be is DiscoveryClientBindingElement), "#12-2");
            Assert.IsNotNull(de.Binding.CreateBindingElements().FirstOrDefault(be => be is HttpTransportBindingElement), "#12-3");
            Assert.IsNotNull(de.Address, "#13");
            Assert.AreEqual(DiscoveryClientBindingElement.DiscoveryEndpointAddress, de.Address, "#13-2");
            Assert.AreEqual(DiscoveryClientBindingElement.DiscoveryEndpointAddress.Uri, de.ListenUri, "#14");
            Assert.AreEqual(0, de.Behaviors.Count, "#15");
        }
        /// <summary>
        /// Create new instance of <see cref="Microsoft.Samples.NLayerApp.Presentation.Windows.WPF.ServiceAgents.Proxies.MainModuleicrosoft.Samples.NLayerApp.Presentation.Windows.WPF.ServiceAgents.Proxies.MainModule.IMainModuleService"/>
        /// instance with a configuration of uri, via behaviors, etc
        /// </summary>
        /// <returns>New instance of <see cref="Microsoft.Samples.NLayerApp.Presentation.Windows.WPF.ServiceAgents.Proxies.MainModuleicrosoft.Samples.NLayerApp.Presentation.Windows.WPF.ServiceAgents.Proxies.MainModule.IMainModuleService"/>
        /// </returns>
        public static IMainModuleService GetMainModuleService()
        {
            //This method encapsulate discover end point, set via behaviors, security credentials initialization
            //and other configuration params

            //if discovery services is enabled in configuration file
            string discoveryValue = ConfigurationManager.AppSettings["discovery_wcf_services"];
            bool   discoveryResult;

            if (!string.IsNullOrEmpty(discoveryValue)
                &&
                !string.IsNullOrWhiteSpace(discoveryValue)
                &&
                Boolean.TryParse(discoveryValue, out discoveryResult)
                &&
                discoveryResult)
            {
                //for more information about DynamicEndpoint and WS-Discovery see
                //http://msdn.microsoft.com/en-us/library/dd288697.aspx
                //http://geeks.ms/blogs/unai/archive/2009/12/21/wcf-4-0-ws-discovery-y-dynamicendpoint.aspx

                DynamicEndpoint endpoint = new DynamicEndpoint(ContractDescription.GetContract(typeof(IMainModuleService)),
                                                               new WS2007HttpBinding());


                return(new MainModuleServiceClient(endpoint));
            }
            else
            {
                return(new MainModuleServiceClient());
            }
        }
Beispiel #3
0
        protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ChannelEndpointElement serviceEndpointElement)
        {
            DynamicEndpoint dynamicEndpoint = (DynamicEndpoint)endpoint;

            if (!dynamicEndpoint.ValidateAndInsertDiscoveryClientBindingElement(dynamicEndpoint.Binding))
            {
                throw FxTrace.Exception.AsError(new ConfigurationErrorsException(SR.DiscoveryClientBindingElementPresentInDynamicEndpoint));
            }

            if (PropertyValueOrigin.Default == this.DiscoveryClientSettings.ElementInformation.Properties[ConfigurationStrings.Endpoint].ValueOrigin)
            {
                dynamicEndpoint.DiscoveryEndpointProvider = new ConfigurationDiscoveryEndpointProvider();
            }
            else
            {
                dynamicEndpoint.DiscoveryEndpointProvider = new ConfigurationDiscoveryEndpointProvider(this.DiscoveryClientSettings.DiscoveryEndpoint);
            }

            this.DiscoveryClientSettings.FindCriteria.ApplyConfiguration(dynamicEndpoint.FindCriteria);

            if (dynamicEndpoint.FindCriteria.ContractTypeNames.Count == 0)
            {
                dynamicEndpoint.FindCriteria.ContractTypeNames.Add(
                    new XmlQualifiedName(dynamicEndpoint.Contract.Name, dynamicEndpoint.Contract.Namespace));
            }
        }
Beispiel #4
0
 private static void DynamicEndpointWCFDiscovery()
 {
     foreach (var binding in new Binding[] { new BasicHttpBinding(),
                                             new WSHttpBinding(), new NetTcpBinding() })
     {
         var endpoint = new DynamicEndpoint(ContractDescription.GetContract(typeof(IMyService)), binding);
         var factory  = new ChannelFactory <IMyService>(endpoint);
         var proxy    = factory.CreateChannel();
         Console.WriteLine(proxy.GetData(Environment.TickCount));
         ((ICommunicationObject)proxy).Close();
     }
     Console.ReadLine();
 }
Beispiel #5
0
        public static void Main()
        {
            try
            {
                DynamicEndpoint dynamicEndpoint = new DynamicEndpoint(ContractDescription.GetContract(typeof(ICalculatorService)), new NetTcpBinding());

                Uri redmondScope  = new Uri("net.tcp://Microsoft.Samples.Discovery/RedmondLocation");
                Uri seattleScope  = new Uri("net.tcp://Microsoft.Samples.Discovery/SeattleLocation");
                Uri portlandScope = new Uri("net.tcp://Microsoft.Samples.Discovery/PortlandLocation");

                dynamicEndpoint.FindCriteria.Scopes.Add(redmondScope);
                dynamicEndpoint.FindCriteria.Scopes.Add(seattleScope);
                dynamicEndpoint.FindCriteria.Scopes.Add(portlandScope);

                // Specify the custom ScopeMatchBy
                dynamicEndpoint.FindCriteria.ScopeMatchBy = new Uri("net.tcp://Microsoft.Samples.Discovery/ORExactMatch");

                CalculatorServiceClient client = new CalculatorServiceClient(dynamicEndpoint);

                Console.WriteLine("Discovering CalculatorService.");
                Console.WriteLine("Looking for a Calculator Service that matches either of the scopes:");
                Console.WriteLine(" " + redmondScope);
                Console.WriteLine(" " + seattleScope);
                Console.WriteLine(" " + portlandScope);
                Console.WriteLine();

                double value1 = 1023;
                double value2 = 1534;
                double value3 = 2342;

                // Call the Add service operation.
                double result = client.Add(value1, value2);
                Console.WriteLine("Adding({0}, {1}) = {2}", value1, value2, result);

                // Call the Subtract service operation.
                result = client.Subtract(value3, value2);
                Console.WriteLine("Subtracting ({0}, {1}) = {2}", value3, value2, result);

                //Closing the client gracefully closes the connection and cleans up resources
                client.Close();
            }
            catch (EndpointNotFoundException)
            {
                Console.WriteLine("Unable to connect to the calculator service because a valid endpoint was not found.");
            }

            Console.WriteLine("Press <ENTER> to exit.");
            Console.ReadLine();
        }
Beispiel #6
0
        public static void Main()
        {
            // Create a DynamicEndpoint which will discover endpoints when the client is opened.
            // By default, the contract specified in DynamicEndpoint will be used as the FindCriteria
            // and UdpDiscoveryEndpoint will be used to send Probe message
            DynamicEndpoint dynamicEndpoint = new DynamicEndpoint(
                ContractDescription.GetContract(typeof(ICalculatorService)),
                new WSHttpBinding());

            try
            {
                InvokeCalculatorService(dynamicEndpoint);
            }
            catch (EndpointNotFoundException)
            {
                Console.WriteLine("The DynamicEndpoint could not find an endpoint to connect to.");
            }

            Console.WriteLine("Press <ENTER> to exit.");
            Console.ReadLine();
        }