private void InitializeBaseAddresses(ApplicationConfiguration configuration)
{
BaseAddresses = new List<BaseAddress>();
StringCollection sourceBaseAddresses = null;
StringCollection sourceAlternateAddresses = null;
if (configuration.ServerConfiguration != null)
{
sourceBaseAddresses = configuration.ServerConfiguration.BaseAddresses;
sourceAlternateAddresses = configuration.ServerConfiguration.AlternateBaseAddresses;
}
if (configuration.DiscoveryServerConfiguration != null)
{
sourceBaseAddresses = configuration.DiscoveryServerConfiguration.BaseAddresses;
sourceAlternateAddresses = configuration.DiscoveryServerConfiguration.AlternateBaseAddresses;
}
if (sourceBaseAddresses == null)
{
return;
}
foreach (string baseAddress in sourceBaseAddresses)
{
BaseAddress address = new BaseAddress() { Url = new Uri(baseAddress) };
if (sourceAlternateAddresses != null)
{
foreach (string alternateAddress in sourceAlternateAddresses)
{
Uri alternateUrl = new Uri(alternateAddress);
if (alternateUrl.Scheme == address.Url.Scheme)
{
if (address.AlternateUrls == null)
{
address.AlternateUrls = new List<Uri>();
}
address.AlternateUrls.Add(alternateUrl);
}
}
}
switch (address.Url.Scheme)
{
case Utils.UriSchemeHttp:
case Utils.UriSchemeNetTcp:
case Utils.UriSchemeNetPipe:
{
address.ProfileUri = Profiles.WsHttpXmlOrBinaryTransport;
address.DiscoveryUrl = new Uri(address.Url.ToString() + "/discovery");
break;
}
case Utils.UriSchemeHttps:
{
address.ProfileUri = Profiles.HttpsXmlOrBinaryTransport;
address.DiscoveryUrl = address.Url;
break;
}
case Utils.UriSchemeNoSecurityHttp:
{
UriBuilder builder = new UriBuilder(address.Url);
builder.Scheme = Utils.UriSchemeHttp;
address.Url = builder.Uri;
if (address.AlternateUrls != null)
{
for (int ii = 0; ii < address.AlternateUrls.Count; ii++)
{
builder = new UriBuilder(address.AlternateUrls[ii]);
builder.Scheme = Utils.UriSchemeHttp;
address.AlternateUrls[ii] = builder.Uri;
}
}
address.ProfileUri = Profiles.HttpsXmlOrBinaryTransport;
address.DiscoveryUrl = address.Url;
break;
}
case Utils.UriSchemeOpcTcp:
{
address.ProfileUri = Profiles.UaTcpTransport;
address.DiscoveryUrl = address.Url;
break;
}
}
BaseAddresses.Add(address);
}
}