Exemplo n.º 1
0
 public DefaultClient(string fimUrl, TimeSpan?receiveTimeout = null, int?maxReceivedMessageSize = null)
 {
     this.wsTransferClient        = new WsTransferClient(Bindings.ServiceMultipleTokenBinding_Common(receiveTimeout, maxReceivedMessageSize), DefaultEndpoints.WsTransfer(fimUrl));
     this.wsTransferFactoryClient = new WsTransferFactoryClient(Bindings.ServiceMultipleTokenBinding_Common(receiveTimeout, maxReceivedMessageSize), DefaultEndpoints.WsTransferFactory(fimUrl));
     this.wsEnumerationClient     = new WsEnumerationClient(Bindings.ServiceMultipleTokenBinding_Common(receiveTimeout, maxReceivedMessageSize), DefaultEndpoints.WsEnumeration(fimUrl));
     this.mexClient       = new MexClient(Bindings.MetadataExchangeHttpBinding_IMetadataExchange(receiveTimeout, maxReceivedMessageSize), DefaultEndpoints.Mex(fimUrl));
     this.alternateClient = new AlternateClient(Bindings.ServiceMultipleTokenBinding_Common(receiveTimeout, maxReceivedMessageSize), DefaultEndpoints.Alternate(fimUrl));
     this.resourceFactory = new RmResourceFactory();
     this.requestFactory  = new RmRequestFactory();
 }
Exemplo n.º 2
0
        private void Initialize()
        {
            if (_isDisposed)
            {
                throw new ObjectDisposedException("FimClient");
            }

            if (_isInitialized)
            {
                return;
            }
            lock (_initializationSyncRoot)
            {
                if (_isInitialized)
                {
                    return;
                }

                var ctx = LogContext.WithConfigFormat();

                _log.Debug(ctx.Format("Initializing FIM client for user {0}"), System.Threading.Thread.CurrentPrincipal.Identity.Name);

                // client used for paged queries
                _pagedQueriesClient = _fimUrl == null
                    ? new WsEnumerationClient()
                    : new WsEnumerationClient(Bindings.ServiceMultipleTokenBinding_Common(_receiveTimeout, _maxReceivedMessageSize), DefaultEndpoints.WsEnumeration(_fimUrl));

                // client used for all other operations
                _defaultClient = _fimUrl == null
                    ? new DefaultClient()
                    : new DefaultClient(_fimUrl, _receiveTimeout, _maxReceivedMessageSize);

                if (_credential != null)
                {
                    _pagedQueriesClient.ClientCredentials.Windows.ClientCredential = _credential;
                    _defaultClient.ClientCredential = _credential;
                }

                // reusing schema for all subsequent instances for performance reasons
                // each schema-refresh operation downloads ~1MB of xml that never changes
                if (_schema == null)
                {
                    lock (_schemaSyncRoot)
                    {
                        if (_schema == null)
                        {
                            _log.Debug(ctx.Format("Downloading FIM schema..."));

                            _schema = _defaultClient.RefreshSchema();

                            _log.Debug(ctx.Format("FIM schema downloaded"));
                        }
                    }
                }

                var resourceTypeFactory = CreateResourceTypeFactory();
                _defaultClient.ResourceFactory = new RmResourceFactory(_schema, resourceTypeFactory);
                _defaultClient.RequestFactory  = new RmRequestFactory(_schema);

                _isInitialized = true;

                _log.Debug(ctx.Format("FIM client initialized for user {0}"), System.Threading.Thread.CurrentPrincipal.Identity.Name);
            }
        }