/// <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() { // This is the endpoint (logical) address of the target device // we want to obtain the metadata (keep in sync with SimpleService project) string deviceEndpointAddr = "urn:uuid:18571766-87df-06e2-bb68-5136c48f483a"; Debug.Print("Resolving the device..."); // We need to resolve the device to get the transport address DpwsServiceDescription resolveMatch = m_simpleServiceClient.DiscoveryClient.Resolve(deviceEndpointAddr); //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(new ProtocolVersion10()); 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."); } }