/// <summary> /// Looks for devices that host a service identified by its type and namespace. /// It returns the transport address of the first matching service. /// </summary> public static string FindFirst(DpwsDiscoveryClient discoveryClient, string serviceTypeName, string namespaceUri) { if (discoveryClient == null) throw new ArgumentNullException(); if (serviceTypeName == null) throw new ArgumentNullException(); if (namespaceUri == null) throw new ArgumentNullException(); Debug.Print("Discovering service devices..."); // Define search criterias DpwsServiceType serviceType = new DpwsServiceType(serviceTypeName, namespaceUri); DpwsServiceTypes filters = new DpwsServiceTypes(); filters.Add(serviceType); // Probe for devices DpwsServiceDescriptions probeMatches = discoveryClient.Probe(filters); if (probeMatches != null && probeMatches.Count > 0) { // Remember transport address of the first device string deviceTransportAddress = probeMatches[0].XAddrs[0]; // Request metadata to get the desired service and its ID DpwsMexClient mexClient = new DpwsMexClient(); DpwsMetadata metadata = mexClient.Get(deviceTransportAddress); // Check host service DpwsMexService host = metadata.Relationship.Host; if (host != null) // has host service { if (host.ServiceTypes[serviceTypeName] != null) return host.EndpointRefs[0].Address.AbsoluteUri; } // Check hosted services DpwsMexServices hostedServices = metadata.Relationship.HostedServices; if (hostedServices != null) { for (int i = 0; i < hostedServices.Count; ++i) { DpwsMexService hostedService = hostedServices[i]; if (hostedService.ServiceTypes[serviceTypeName] != null) return hostedService.EndpointRefs[0].Address.AbsoluteUri; } } } Debug.Print("No service found."); return null; }
public void PrintMetadataInfo() { this.IgnoreRequestFromThisIP = true; // This is the endpoint (logical) address of the target device // we want to obtain the metadata string deviceEndpointAddr = "urn:uuid:bde0943a-0516-c8ca-80a6-000000b525ed"; Debug.Print("Resolving the device..."); // We need to resolve the device to get the transport address DpwsServiceDescription resolveMatch = this.DiscoveryClient.Resolve(deviceEndpointAddr); if (resolveMatch != null) { // Device was located string deviceTransportAddr = resolveMatch.XAddrs[0]; // Get metadata DpwsMexClient mexClient = new DpwsMexClient(); DpwsMetadata metadata = mexClient.Get(deviceTransportAddr); if (metadata != null) { Debug.Print(""); Debug.Print("Metadata:"); Debug.Print("ThisModel:"); Debug.Print("\tManufacturer: " + metadata.ThisModel.Manufacturer); Debug.Print("\tManufacturerUrl: " + metadata.ThisModel.ManufacturerUrl); Debug.Print("\tModelName: " + metadata.ThisModel.ModelName); Debug.Print("\tModelNumber: " + metadata.ThisModel.ModelNumber); Debug.Print("\tModelUrl: " + metadata.ThisModel.ModelUrl); Debug.Print("\tPresentationUrl: " + metadata.ThisModel.PresentationUrl); Debug.Print("ThisDevice:"); Debug.Print("\tFirmwareVersion: " + metadata.ThisDevice.FirmwareVersion); Debug.Print("\tFriendlyName: " + metadata.ThisDevice.FriendlyName); Debug.Print("\tSerialNumber: " + metadata.ThisDevice.SerialNumber); DpwsMexService host = metadata.Relationship.Host; if (host != null) { Debug.Print("Host:"); Debug.Print("\tServiceID: " + host.ServiceID); Debug.Print("\tAddress: " + host.EndpointRefs[0].Address.AbsoluteUri); Debug.Print("\tTypes:"); for (int t = 0; t < host.ServiceTypes.Count; ++t) { DpwsServiceType serviceType = host.ServiceTypes[t]; Debug.Print("\t\tName = " + serviceType.TypeName); Debug.Print("\t\tNamespace = " + serviceType.NamespaceUri); Debug.Print(""); } } DpwsMexServices hostedServices = metadata.Relationship.HostedServices; if (hostedServices != null) { Debug.Print("HostedServices:"); for (int i = 0; i < hostedServices.Count; i++) { DpwsMexService hostedService = hostedServices[i]; Debug.Print("\tService ID: " + hostedService.ServiceID); Debug.Print("\tAddress: " + hostedService.EndpointRefs[0].Address.AbsoluteUri); Debug.Print("\tTypes:"); for (int t = 0; t < hostedService.ServiceTypes.Count; ++t) { DpwsServiceType serviceType = hostedService.ServiceTypes[t]; Debug.Print("\t\tName = " + serviceType.TypeName); Debug.Print("\t\tNamespace = " + serviceType.NamespaceUri); Debug.Print(""); } } } } else Debug.Print("Did not get metadata from device."); } else Debug.Print("Device cannot be resolved."); }
public void PrintMetadataInfo() { Debug.Print("Resolving the device..."); // We need to resolve the device to get the transport address DpwsServiceDescription resolveMatch = m_simpleServiceClient.DiscoveryClient.Resolve(m_deviceEndpointAddress); //if(true) if (resolveMatch != null) { // Device was located string deviceTransportAddr = resolveMatch.XAddrs[0]; // If transport address ends with '/' remove it int length = deviceTransportAddr.Length; if (deviceTransportAddr[length - 1] == '/') deviceTransportAddr = deviceTransportAddr.Substring(0, length - 1); // Get metadata DpwsMexClient mexClient = new DpwsMexClient(m_version); DpwsMetadata metadata = mexClient.Get(deviceTransportAddr); if (metadata != null) { Debug.Print(""); Debug.Print("Metadata:"); Debug.Print("ThisModel:"); Debug.Print("\tManufacturer: " + metadata.ThisModel.Manufacturer); Debug.Print("\tManufacturerUrl: " + metadata.ThisModel.ManufacturerUrl); Debug.Print("\tModelName: " + metadata.ThisModel.ModelName); Debug.Print("\tModelNumber: " + metadata.ThisModel.ModelNumber); Debug.Print("\tModelUrl: " + metadata.ThisModel.ModelUrl); Debug.Print("\tPresentationUrl: " + metadata.ThisModel.PresentationUrl); Debug.Print("ThisDevice:"); Debug.Print("\tFirmwareVersion: " + metadata.ThisDevice.FirmwareVersion); Debug.Print("\tFriendlyName: " + metadata.ThisDevice.FriendlyName); Debug.Print("\tSerialNumber: " + metadata.ThisDevice.SerialNumber); DpwsMexService host = metadata.Relationship.Host; if (host != null) { Debug.Print("Host:"); Debug.Print("\tServiceID: " + host.ServiceID); Debug.Print("\tAddress: " + host.EndpointRefs[0].Address.AbsoluteUri); Debug.Print("\tTypes:"); for (int t = 0; t < host.ServiceTypes.Count; ++t) { DpwsServiceType serviceType = host.ServiceTypes[t]; Debug.Print("\t\tName = " + serviceType.TypeName); Debug.Print("\t\tNamespace = " + serviceType.NamespaceUri); Debug.Print(""); } } DpwsMexServices hostedServices = metadata.Relationship.HostedServices; if (hostedServices != null) { Debug.Print("HostedServices:"); for (int i = 0; i < hostedServices.Count; i++) { DpwsMexService hostedService = hostedServices[i]; Debug.Print("\tService ID: " + hostedService.ServiceID); Debug.Print("\tAddress: " + hostedService.EndpointRefs[0].Address.AbsoluteUri); Debug.Print("\tTypes:"); for (int t = 0; t < hostedService.ServiceTypes.Count; ++t) { DpwsServiceType serviceType = hostedService.ServiceTypes[t]; Debug.Print("\t\tName = " + serviceType.TypeName); Debug.Print("\t\tNamespace = " + serviceType.NamespaceUri); Debug.Print(""); } } } } else Debug.Print("Did not get metadata from device."); } else Debug.Print("Device cannot be resolved."); }