Ich versuche, eine Webservice Entdeckung mit WCF DiscoveryClient
mit diesem Code zu tun:WCF Web-Service-Discovery auf Netzwerk-Schnittstellen mit mehreren IP-Adressen
// Setup the discovery client (WSDiscovery April 2005)
DiscoveryEndpoint discoveryEndpoint = new UdpDiscoveryEndpoint(DiscoveryVersion.WSDiscoveryApril2005);
DiscoveryClient discoveryClient = new DiscoveryClient(discoveryEndpoint);
// Setup the wanted device criteria
FindCriteria criteria = new FindCriteria();
criteria.ScopeMatchBy = new Uri("http://schemas.xmlsoap.org/ws/2005/04/discovery/rfc3986");
criteria.Scopes.Add(new Uri("onvif://www.onvif.org/"));
// Go find!
criteria.Duration = TimeSpan.FromMilliseconds(duration);
discoveryClient.FindAsync(criteria, this);
Diese mit einer einzigen IP-Adresse auf einer Maschine funktioniert sehr gut (10.1.4.25) der einzelnen Netzwerkschnittstelle zugewiesen. Die Übertragung wird von 10.1.4.25 an 239.255.255.250 gesendet, und ich bekomme Antworten von 5 Geräten alle im selben Subnetz.
Wenn jedoch der Computer über mehrere IPs auf derselben Schnittstelle verfügt, scheint er eine einzelne Quell-IP auszuwählen und sendet die Anforderung von diesem. In diesem Fall erhalte ich eine Antwort von einem einzelnen Gerät mit einer 169.254-Adresse.
Ich habe versucht, UdpDiscoveryEndpoint.TransportSettings.MulticastInterfaceId
auf eine geeignete Schnittstelle ID, die nicht geholfen hat, da es eine einzelne Schnittstelle, nicht eine bestimmte IP identifiziert. Die UdpDiscoveryEndpoint.ListenUri
-Eigenschaft gibt auch die Multicast-Adresse zurück und wirkt sich daher nicht auf die Quell-IP aus. UdpDiscoveryEndpoint.Address
ist die URN für das Erkennungsprotokoll.
Gibt es eine Möglichkeit, ich kann es zwingen, von einer bestimmten IP-Adresse oder idealerweise mehrere Anfragen auf jedem konfigurierten IP senden?
Ich habe auch versucht ONVIF Device Manager, scheint das gleiche Problem zu haben.
Beachten Sie, dass es hier nicht darum geht, dass ein Dienst an eine bestimmte IP-Adresse gebunden wird. Es handelt sich um die IP-Adresse, von der eine Suchanforderung gesendet wird.
[Diese Seite] (http://msdn.microsoft.com/en-us/library/bb706924.aspx#LinkTarget_1973) erwähnt die '/ s Einstellung: Envelope/s: Header/a: ReplyTo' Adressen, aber ich bin mir nicht sicher, dass dies in WCF eingestellt werden kann. – Deanna
hast du das jemals gelöst? Ich habe das gleiche Problem – HypeZ
@HypeZ Nein, es ist immer noch ein Problem. – Deanna