/// <summary> /// Loads a collection of endpoints from a stream. /// </summary> public static ConfiguredEndpointCollection Load(Stream istrm) { try { DataContractSerializer serializer = new DataContractSerializer(typeof(ConfiguredEndpointCollection)); ConfiguredEndpointCollection endpoints = serializer.ReadObject(istrm) as ConfiguredEndpointCollection; if (endpoints != null) { foreach (ConfiguredEndpoint endpoint in endpoints) { if (endpoint.Description != null) { endpoint.Description.TransportProfileUri = Profiles.NormalizeUri(endpoint.Description.TransportProfileUri); } } } return(endpoints); } catch (Exception e) { Utils.Trace(e, "Unexpected error loading ConfiguredEnpoints."); throw e; } }
/// <summary> /// Updates the endpoint description. /// </summary> public void Update(ConfiguredEndpoint endpoint) { if (endpoint == null) { throw new ArgumentNullException("endpoint"); } m_description = (EndpointDescription)endpoint.Description.MemberwiseClone(); m_configuration = (EndpointConfiguration)endpoint.Configuration.MemberwiseClone(); // normalize transport profile uri. if (m_description.TransportProfileUri != null) { m_description.TransportProfileUri = Profiles.NormalizeUri(m_description.TransportProfileUri); } m_updateBeforeConnect = endpoint.m_updateBeforeConnect; m_selectedUserTokenPolicyIndex = endpoint.m_selectedUserTokenPolicyIndex; m_binaryEncodingSupport = endpoint.m_binaryEncodingSupport; if (endpoint.m_userIdentity != null) { m_userIdentity = (UserIdentityToken)endpoint.m_userIdentity.MemberwiseClone(); } if (endpoint.m_comIdentity != null) { m_comIdentity = (EndpointComIdentity)endpoint.m_comIdentity.MemberwiseClone(); } }
/// <summary> /// Filters the list of addresses by profile. /// </summary> protected IList <BaseAddress> FilterByProfile(StringCollection profileUris, IList <BaseAddress> baseAddresses) { if (profileUris == null || profileUris.Count == 0) { return(baseAddresses); } List <BaseAddress> filteredAddresses = new List <BaseAddress>(); foreach (BaseAddress baseAddress in baseAddresses) { foreach (string profileUri in profileUris) { if (baseAddress.ProfileUri == Profiles.NormalizeUri(profileUri)) { filteredAddresses.Add(baseAddress); break; } } } return(filteredAddresses); }
/// <summary> /// Updates the endpoint description. /// </summary> public void Update(EndpointDescription description) { if (description == null) { throw new ArgumentNullException("description"); } m_description = (EndpointDescription)description.MemberwiseClone(); // normalize transport profile uri. if (m_description.TransportProfileUri != null) { m_description.TransportProfileUri = Profiles.NormalizeUri(m_description.TransportProfileUri); } // set the proxy url. if (m_collection != null && m_description.EndpointUrl != null) { if (m_description.EndpointUrl.StartsWith(Utils.UriSchemeOpcTcp, StringComparison.Ordinal)) { m_description.ProxyUrl = m_collection.TcpProxyUrl; } } }
/// <summary> /// Loads a collection of endpoints from a file. /// </summary> public static ConfiguredEndpointCollection Load(string filePath) { // load from file. ConfiguredEndpointCollection endpoints; using (Stream stream = File.OpenRead(filePath)) { endpoints = Load(stream); } endpoints.m_filepath = filePath; // remove invalid endpoints and ensure server descriptions are consistent. List <ConfiguredEndpoint> endpointsToRemove = new List <ConfiguredEndpoint>(); Dictionary <string, ApplicationDescription> servers = new Dictionary <string, ApplicationDescription>(); foreach (ConfiguredEndpoint endpoint in endpoints.m_endpoints) { if (endpoint.Description == null) { endpointsToRemove.Add(endpoint); continue; } // set a default value for the server. if (endpoint.Description.Server == null) { endpoint.Description.Server = new ApplicationDescription(); endpoint.Description.Server.ApplicationType = ApplicationType.Server; } // set a default for application uri. if (String.IsNullOrEmpty(endpoint.Description.Server.ApplicationUri)) { endpoint.Description.Server.ApplicationUri = endpoint.Description.EndpointUrl; } if (endpoint.Description.Server.DiscoveryUrls == null) { endpoint.Description.Server.DiscoveryUrls = new StringCollection(); } if (endpoint.Description.Server.DiscoveryUrls.Count == 0) { string discoveryUrl = endpoint.Description.EndpointUrl; if (!discoveryUrl.StartsWith(Utils.UriSchemeOpcTcp)) { discoveryUrl += "/discovery"; } endpoint.Description.Server.DiscoveryUrls.Add(discoveryUrl); } // normalize transport profile uri. if (endpoint.Description.TransportProfileUri != null) { endpoint.Description.TransportProfileUri = Profiles.NormalizeUri(endpoint.Description.TransportProfileUri); } ApplicationDescription server = null; if (!servers.TryGetValue(endpoint.Description.Server.ApplicationUri, out server)) { // use the first description in the file as the correct master. server = endpoint.Description.Server; servers[server.ApplicationUri] = server; // check if the server uri needs to be made globally unique. server.ApplicationUri = Utils.UpdateInstanceUri(server.ApplicationUri); servers[server.ApplicationUri] = server; continue; } endpoint.Description.Server = (ApplicationDescription)server.MemberwiseClone(); } // remove invalid endpoints. foreach (ConfiguredEndpoint endpoint in endpointsToRemove) { endpoints.Remove(endpoint); } // return processed collection. return(endpoints); }