/// <summary> /// Initializes a new instance of <c>InfoShareWcfConnection</c> class. /// </summary> /// <param name="logger">Instance of Interfaces.ILogger implementation</param> /// <param name="infoShareWSBaseUri">Base URI for InfoShare WS.</param> /// <param name="wsTrustIssuerUri">Authentication endpoint</param> /// <param name="wsTrustIssuerMexUri">STS WS Trust metadata exchange endpoint</param> /// <param name="parameters">Connection parameters.</param> public InfoShareWcfConnection(ILogger logger, Uri infoShareWSBaseUri, Uri wsTrustIssuerUri, Uri wsTrustIssuerMexUri, InfoShareWcfConnectionParameters parameters = null) { _logger = logger; _explicitIssuer = true; _logger.WriteDebug($"Incomming infoShareWSBaseUri[{infoShareWSBaseUri}]"); _logger.WriteDebug($"Incomming wsTrustIssuerUri[{wsTrustIssuerUri}]"); _logger.WriteDebug($"Incomming wsTrustIssuerMexUri[{wsTrustIssuerMexUri}]"); if (infoShareWSBaseUri == null) { throw new ArgumentNullException("infoShareWSBaseUri"); } if (wsTrustIssuerUri == null) { throw new ArgumentNullException("wsTrustIssuerUri"); } if (wsTrustIssuerMexUri == null) { throw new ArgumentNullException("wsTrustIssuerMexUri"); } if (parameters == null) { parameters = new InfoShareWcfConnectionParameters() { Credential = null, }; } #region Use provided parameters this.InfoShareWSBaseUri = infoShareWSBaseUri; _connectionParameters = parameters; _connectionConfiguration = new Lazy <XDocument>(LoadConnectionConfiguration); this.InfoShareWSBaseUri = infoShareWSBaseUri; _issuerWSTrustEndpointUri = new Lazy <Uri>(() => { return(wsTrustIssuerUri); }); _issuerWSTrustMexUri = new Lazy <Uri>(() => { return(wsTrustIssuerMexUri); }); _issuerAuthenticationType = new Lazy <string>(() => { return(parameters.Credential != null ? "UserNameMixed" : "WindowsMixed"); }); _infoShareWSAppliesTo = new Lazy <Uri>(InitializeInfoShareWSAppliesTo); #endregion // Resolve service URIs ResolveServiceUris(); // The lazy initialization depends on all the initialization above. _issuedToken = new Lazy <GenericXmlSecurityToken>(IssueToken); // Set the endpoints ResolveEndpoints(_connectionParameters.AutoAuthenticate); }
/// <summary> /// Initializes a new instance of <c>InfoShareWcfConnection</c> class. /// </summary> /// <param name="logger">Instance of Interfaces.ILogger implementation</param> /// <param name="infoShareWSBaseUri">Base URI for InfoShare WS.</param> /// <param name="parameters">Connection parameters.</param> public InfoShareWcfConnection(ILogger logger, Uri infoShareWSBaseUri, InfoShareWcfConnectionParameters parameters = null) { _logger = logger; _logger.WriteDebug($"Incomming infoShareWSBaseUri[{infoShareWSBaseUri}]"); if (infoShareWSBaseUri == null) { throw new ArgumentNullException("infoShareWSBaseUri"); } if (parameters == null) { parameters = new InfoShareWcfConnectionParameters() { Credential = null, }; } #region Derive parameters from infoShareWSBaseUri and connectionconfiguration.xml if (infoShareWSBaseUri.AbsolutePath.Contains("/Internal") || infoShareWSBaseUri.AbsolutePath.Contains("/SDL")) { _stsInternalAuthentication = true; // Enable-ISHIntegrationSTSInternalAuthentication is used directing the web services to a different STS // issuerMetadataAddress = new EndpointAddress(InitializeIssuerMetadataAddress); // [Should] Once connectionconfiguration.xml/issuer/mex offers the metadata exchange address, the dirty derive code should be replaced _logger.WriteDebug($"InfoShareWcfConnection stsInternalAuthentication[{_stsInternalAuthentication}]"); _logger.WriteVerbose($"Detected 'Internal/SDL' Authentication in incoming infoShareWSBaseUri[{infoShareWSBaseUri}]"); } this.InfoShareWSBaseUri = infoShareWSBaseUri; _connectionParameters = parameters; _connectionConfiguration = new Lazy <XDocument>(LoadConnectionConfiguration); // using the ISHWS url from connectionconfiguration.xml instead of the potentially wrongly cased incoming one [TS-10630] this.InfoShareWSBaseUri = InitializeInfoShareWSBaseUri(); _logger.WriteDebug($"Normalized infoShareWSBaseUri[{this.InfoShareWSBaseUri}]"); _issuerWSTrustEndpointUri = new Lazy <Uri>(InitializeIssuerWSTrustEndpointUri); _issuerWSTrustMexUri = new Lazy <Uri>(() => { throw new NotSupportedException(); }); _issuerAuthenticationType = new Lazy <string>(InitializeIssuerAuthenticationType); _infoShareWSAppliesTo = new Lazy <Uri>(InitializeInfoShareWSAppliesTo); #endregion // Resolve service URIs ResolveServiceUris(); // The lazy initialization depends on all the initialization above. _issuedToken = new Lazy <GenericXmlSecurityToken>(IssueToken); // Set the endpoints ResolveEndpoints(_connectionParameters.AutoAuthenticate); }