using System.ServiceModel.Discovery; using ArchestrAServices.Contract; namespace ArchestrAServices.Proxy; public class IDataProxySelector { public static object SelectProxyForLatestEndpoint(string accessName, IAsbInterfaceSettings settings, out string errorMessage) { return SelectProxyForLatestEndpoint(accessName, DiscoveryScope.Global, settings, out errorMessage); } public static object SelectProxyForLatestEndpoint(string accessName, DiscoveryScope scopeRule, IAsbInterfaceSettings settings, out string errorMessage) { errorMessage = string.Empty; object obj = null; FindResponse findResponse = ASBDataV2Proxy.FindIDataEndpoint(accessName, scopeRule); if (findResponse != null && findResponse.Endpoints != null && findResponse.Endpoints.Count > 0) { obj = new ASBDataV2Proxy(accessName, settings); } else { errorMessage += "| IDataV2: No Endpoint found."; } if (obj == null) { obj = TryFindIDataV1(accessName, ref errorMessage); } if (obj == null) { errorMessage = " unable to find a useable endpoint for IData or IDataV2" + errorMessage; } return obj; } private static ASBDataProxy TryFindIDataV1(string accessName, ref string errorMessage) { ASBDataProxy result = null; FindResponse findResponse = ASBDataProxy.FindIDataEndpoint(accessName); if (findResponse != null && findResponse.Endpoints != null && findResponse.Endpoints.Count > 0) { result = new ASBDataProxy(accessName); } else { errorMessage += "| IData: No Endpoint found."; } return result; } }