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); }
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(); } } }
/// <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(); } }
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); }
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 }
AnnouncementClient AnnouncementClient() { AnnouncementClient anouncementClient; UdpAnnouncementEndpoint endpoint = new UdpAnnouncementEndpoint(SelectedVersion); anouncementClient = new AnnouncementClient(endpoint); return(anouncementClient); }
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 }
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"); } }
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(); }
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(); }
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(); } }
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); }
/// <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; }