Example #1
0
        protected internal override ServiceEndpoint CreateServiceEndpoint(ContractDescription contractDescription)
        {
            if (contractDescription == null)
            {
                throw new ArgumentNullException("contractDescription");
            }
            DiscoveryVersion ver = null;

            switch (contractDescription.ContractType.Namespace)
            {
            case DiscoveryVersion.Namespace11:
                ver = DiscoveryVersion.WSDiscovery11;
                break;

            case DiscoveryVersion.NamespaceApril2005:
                ver = DiscoveryVersion.WSDiscoveryApril2005;
                break;

            case DiscoveryVersion.NamespaceCD1:
                ver = DiscoveryVersion.WSDiscoveryCD1;
                break;
            }
            var ret = new UdpAnnouncementEndpoint(ver, MulticastAddress);

            ret.MaxAnnouncementDelay = MaxAnnouncementDelay;
            TransportSettings.ApplyConfiguration(ret.TransportSettings);
            return(ret);
        }
Example #2
0
        void RunCodeUnderDiscoveryHost2(Uri serviceUri, Uri dHostUri, Action <Uri, AnnouncementEndpoint, DiscoveryEndpoint> action)
        {
            // announcement service
            var aEndpoint = new UdpAnnouncementEndpoint(new Uri("soap.udp://239.255.255.250:3802/"));

            // discovery service
            var dbinding  = new CustomBinding(new HttpTransportBindingElement());
            var dAddress  = new EndpointAddress(dHostUri);
            var dEndpoint = new DiscoveryEndpoint(dbinding, dAddress);

            // Without this, .NET rejects the host as if it had no service.
            dEndpoint.IsSystemEndpoint = false;

            // it internally hosts an AnnouncementService
            using (var inst = new AnnouncementBoundDiscoveryService(aEndpoint)) {
                var host = new ServiceHost(inst);
                host.AddServiceEndpoint(dEndpoint);
                try {
                    host.Open();
                    action(serviceUri, aEndpoint, dEndpoint);
                } finally {
                    host.Close();
                }
            }
        }
Example #3
0
        /// <summary>
        /// Starts the anouncement process, waiting for the Hello and Goodbye messages.
        /// For more information, see http://schemas.xmlsoap.org/ws/2005/04/discovery/
        /// </summary>
        private static void StartAnouncementProcess()
        {
            //MulticastListener _multicastListener = new MulticastListener();
            //_multicastListener.MessageArrived += new EventHandler<MessageEventArgs>(_multicastListener_MessageArrived);

            AnnouncementListener announcementService = new AnnouncementListener();

            // Add event handlers
            announcementService.OnlineAnnouncementReceived  += new EventHandler <AnnouncementEventArgs>(OnOnlineAnnouncement);
            announcementService.OfflineAnnouncementReceived += new EventHandler <AnnouncementEventArgs>(OnOfflineAnnouncement);

            // Create the service host with a singleton
            using (ServiceHost announcementServiceHost = new ServiceHost(announcementService))
            {
                // Add the announcement endpoint
                UdpAnnouncementEndpoint udp = new UdpAnnouncementEndpoint(DiscoveryVersion.WSDiscoveryApril2005);
                announcementServiceHost.AddServiceEndpoint(udp);

                // Open the host async
                announcementServiceHost.Open();

                Console.WriteLine("Please start a dummynode.");
                Console.Write("Waiting for an announcement (Enter-Exit) ...");
                Console.ReadLine();
            }
        }
Example #4
0
    static void RunCodeUnderDiscoveryHost(Uri serviceUri, Uri dHostUri, Action <Uri, AnnouncementEndpoint, DiscoveryEndpoint> action)
    {
        var aEndpoint = new UdpAnnouncementEndpoint(DiscoveryVersion.WSDiscoveryApril2005, new Uri("soap.udp://239.255.255.250:3802/"));
        var dEndpoint = new UdpDiscoveryEndpoint(DiscoveryVersion.WSDiscoveryApril2005, new Uri("soap.udp://239.255.255.250:3802/"));

        var ib = new InspectionBehavior();

        ib.RequestReceived += delegate(ref Message msg, IClientChannel
                                       channel, InstanceContext instanceContext) {
            var mb = msg.CreateBufferedCopy(0x10000);
            msg = mb.CreateMessage();
            Console.Error.WriteLine(mb.CreateMessage());
            return(null);
        };
        ib.ReplySending += delegate(ref Message msg, object o) {
            var mb = msg.CreateBufferedCopy(0x10000);
            msg = mb.CreateMessage();
            Console.Error.WriteLine(mb.CreateMessage());
        };

        dEndpoint.Behaviors.Add(ib);
        aEndpoint.Behaviors.Add(ib);

        action(serviceUri, aEndpoint, dEndpoint);
    }
Example #5
0
        void ApplyConfiguration(ServiceEndpoint endpoint)
        {
            UdpAnnouncementEndpoint udpAnnouncementEndpoint = (UdpAnnouncementEndpoint)endpoint;

            udpAnnouncementEndpoint.MulticastAddress = this.MulticastAddress;
#pragma warning disable 0618
            this.TransportSettings.ApplyConfiguration(udpAnnouncementEndpoint.TransportSettings);
#pragma warning restore 0618
        }
Example #6
0
        AnnouncementClient AnnouncementClient()
        {
            AnnouncementClient      anouncementClient;
            UdpAnnouncementEndpoint endpoint = new UdpAnnouncementEndpoint(SelectedVersion);

            anouncementClient = new AnnouncementClient(endpoint);

            return(anouncementClient);
        }
Example #7
0
        protected internal override void InitializeFrom(ServiceEndpoint endpoint)
        {
            base.InitializeFrom(endpoint);

            UdpAnnouncementEndpoint source = (UdpAnnouncementEndpoint)endpoint;

            this.MaxAnnouncementDelay = source.MaxAnnouncementDelay;
            this.MulticastAddress     = source.MulticastAddress;
#pragma warning disable 0618
            this.TransportSettings.InitializeFrom(source.TransportSettings);
#pragma warning restore 0618
        }
Example #8
0
    public static void Main()
    {
        var uri = new Uri("soap.udp://239.255.255.250:3802");

        for (int i = 0; i < 2; i++)
        {
            var         binding = new UdpAnnouncementEndpoint(uri).Binding;
            IFooChannel proxy   = new ChannelFactory <IFooChannel> (
                binding,
                new EndpointAddress(uri)
                ).CreateChannel();
            proxy.Open();
            proxy.SendMsg("TEST FOR ECHO");
        }
    }
Example #9
0
        private static void StartService()
        {
            _announcementSrv = new AnnouncementService();
            var epAnnouncement = new UdpAnnouncementEndpoint(DiscoveryVersion.WSDiscoveryApril2005);

            ((CustomBinding)epAnnouncement.Binding).Elements.Insert(0, new MulticastCapabilitiesBindingElement(true));

            _announcementSrv.OnlineAnnouncementReceived  += Announcement_srv_OnlineAnnouncementReceived;
            _announcementSrv.OfflineAnnouncementReceived += AnnouncementSrvOfflineAnnouncementReceived;

            _host = new ServiceHost(_announcementSrv);
            _host.AddServiceEndpoint(epAnnouncement);

            _host.Open();
        }
Example #10
0
    public static void Main()
    {
        ServiceHost host    = new ServiceHost(typeof(Foo));
        var         uri     = new Uri("soap.udp://239.255.255.250:3802");
        var         binding = new UdpAnnouncementEndpoint(uri).Binding;

        binding.ReceiveTimeout = TimeSpan.FromSeconds(5);
        binding.OpenTimeout    = TimeSpan.FromSeconds(20);
        host.AddServiceEndpoint("IFoo",
                                binding, uri);
        host.Description.Behaviors.Find <ServiceBehaviorAttribute> ()
        .IncludeExceptionDetailInFaults = true;
        host.Open();
        Console.WriteLine("Hit [CR] key to close ...");
        Console.ReadLine();
        host.Close();
    }
Example #11
0
    static void RunCodeUnderDiscoveryHost(Uri serviceUri, Uri dHostUri)
    {
        // announcement service
        var aEndpoint = new UdpAnnouncementEndpoint(DiscoveryVersion.WSDiscoveryApril2005, new Uri("soap.udp://239.255.255.250:3802/"));

        // discovery service
        var dbinding  = new CustomBinding(new HttpTransportBindingElement());
        var dAddress  = new EndpointAddress(dHostUri);
        var dEndpoint = new DiscoveryEndpoint(dbinding, dAddress);

        // Without this, .NET rejects the host as if it had no service.
        dEndpoint.IsSystemEndpoint = false;
        var ib = new InspectionBehavior();

        ib.RequestReceived += delegate(ref Message msg, IClientChannel channel, InstanceContext instanceContext) {
            var mb = msg.CreateBufferedCopy(0x10000);
            msg = mb.CreateMessage();
            Console.Error.WriteLine(mb.CreateMessage());
            return(null);
        };
        ib.ReplySending += delegate(ref Message msg, object o) {
            var mb = msg.CreateBufferedCopy(0x10000);
            msg = mb.CreateMessage();
            Console.Error.WriteLine(mb.CreateMessage());
        };

        dEndpoint.Behaviors.Add(ib);
        aEndpoint.Behaviors.Add(ib);

        // it internally hosts an AnnouncementService
        using (var inst = new AnnouncementBoundDiscoveryService(aEndpoint)) {
            var host = new ServiceHost(inst);
            host.AddServiceEndpoint(dEndpoint);
            host.Description.Behaviors.Find <ServiceDebugBehavior> ()
            .IncludeExceptionDetailInFaults = true;
            host.Open();
            Console.WriteLine("Type [CR] to quit...");
            Console.ReadLine();
            host.Close();
        }
    }
Example #12
0
        public void DefaultValues()
        {
            var de = new UdpAnnouncementEndpoint();

            Assert.AreEqual(DiscoveryVersion.WSDiscovery11, de.DiscoveryVersion, "#1");
            Assert.AreEqual(TimeSpan.FromMilliseconds(500), de.MaxAnnouncementDelay, "#2");
            Assert.IsNotNull(de.Contract, "#11");              // some version-dependent internal type.
            Assert.AreEqual("http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01", de.Contract.Namespace, "#11-2");
            Assert.AreEqual("Client", de.Contract.Name, "#11-3");
            Assert.IsNotNull(de.Binding, "#12");
            TransportBindingElement tbe = null;

            Assert.IsTrue(de.Binding.CreateBindingElements().Any(be => (tbe = be as TransportBindingElement) != null && tbe.Scheme == "soap.udp"), "#12-2");
            Assert.IsNotNull(de.Address, "#13");
            Assert.AreEqual(DiscoveryVersion.WSDiscovery11.AdhocAddress, de.Address.Uri, "#13-2");
            Assert.AreEqual(Socket.SupportsIPv4 ? UdpAnnouncementEndpoint.DefaultIPv4MulticastAddress : UdpAnnouncementEndpoint.DefaultIPv6MulticastAddress, de.ListenUri, "#14");

            // .NET has two endpoint behaviors: DiscoveryViaBehavior and UdpContractFilterBehavior. Not worthy of testing that though.
            // Assert.AreEqual (2, de.Behaviors.Count, "#15");
            // foreach (var eb in de.Behaviors) Console.Error.WriteLine (eb);
        }
Example #13
0
            /// <summary>
            /// Hosts the announcements listener.
            /// </summary>
            private void HostAnnouncements()
            {
                // TODO:
                // host.AddServiceEndpoint(new AnnouncementEndpoint(new NetTcpBinding(), new EndpointAddress("net.tcp://127.0.0.1")));

                // Create an AnnouncementService instance
                AnnouncementService announcementService = new AnnouncementService();

                // Subscribe the announcement events
                announcementService.OnlineAnnouncementReceived  += OnOnlineAnnoncement;   // hay
                announcementService.OfflineAnnouncementReceived += OnOfflineAnnoncement;  // bay

                // Create ServiceHost for the AnnouncementService
                _announcementServiceHost = new ServiceHost(announcementService);
                // TODO: add reduction to IVisualRxServiceAdapter contract !!!

                // Listen for the announcements sent over UDP multicast
                var endpoint = new UdpAnnouncementEndpoint();

                _announcementServiceHost.AddServiceEndpoint(endpoint);
                //_announcementServiceHost.BeginOpen(ar => { }, null);
            }
		protected internal override ServiceEndpoint CreateServiceEndpoint (ContractDescription contractDescription)
		{
			if (contractDescription == null)
				throw new ArgumentNullException ("contractDescription");
			DiscoveryVersion ver = null;
			switch (contractDescription.ContractType.Namespace) {
			case DiscoveryVersion.Namespace11:
				ver = DiscoveryVersion.WSDiscovery11;
				break;
			case DiscoveryVersion.NamespaceApril2005:
				ver = DiscoveryVersion.WSDiscoveryApril2005;
				break;
			case DiscoveryVersion.NamespaceCD1:
				ver = DiscoveryVersion.WSDiscoveryCD1;
				break;
			}
			var ret = new UdpAnnouncementEndpoint (ver, MulticastAddress);
			ret.MaxAnnouncementDelay = MaxAnnouncementDelay;
			TransportSettings.ApplyConfiguration (ret.TransportSettings);
			return ret;
		}