示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }