我試圖做一個Web服務發現使用WCF的DiscoveryClient
使用此代碼:WCF的Web服務發現解決
// 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);
這工作得很好的機器上使用單一IP地址( 10.1.4.25)分配給單個網絡接口。廣播從10.1.4.25發送到239.255.255.250,並且我從同一子網上的5個設備獲得響應。
但是,當機器在同一接口上有多個IP時,它似乎會選擇一個源IP並從中發送請求。 在這種情況下,我從單個設備獲得169.254地址的回覆。
我試過將UdpDiscoveryEndpoint.TransportSettings.MulticastInterfaceId
設置爲一個合適的接口ID,它沒有幫助,因爲它識別單個接口,而不是特定的IP。 UdpDiscoveryEndpoint.ListenUri
屬性也返回多播地址,所以不會影響源IP。 UdpDiscoveryEndpoint.Address
是發現協議的URN。
有什麼辦法可以強制它從特定的IP地址發送,或理想情況下,在每個配置的IP上發送多個請求?我也嘗試過ONVIF Device Manager,似乎有同樣的問題。
請注意,這不是關於將服務綁定到特定的或「所有地址」IP。它是關於發送發現請求的IP。
[本頁](http://msdn.microsoft.com/en-us/library/bb706924.aspx#LinkTarget_1973)提到設置'/秒:信封/秒:頁眉/一個:ReplyTo'地址,但我不確定這可以在WCF中設置。 – Deanna
你有沒有解決過這個問題?我遇到同樣的問題 – HypeZ
@HypeZ Nope,這仍然是一個問題。 – Deanna