コード例 #1
0
        public void Constructor_ParsesCorrectly(string connectionString, string expectedUri, string expectedKey)
        {
            // Act
            var docDBConnStr = new DocumentDBConnectionString(connectionString);

            // Assert
            if (expectedUri == null)
            {
                Assert.Null(docDBConnStr.ServiceEndpoint);
            }
            else
            {
                Assert.Equal(expectedUri, docDBConnStr.ServiceEndpoint.ToString());
            }
            Assert.Equal(expectedKey, docDBConnStr.AuthKey);
        }
        public Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context)
        {
            // Tries to parse the context parameters and see if it belongs to this [CosmosDBTrigger] binder
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            ParameterInfo            parameter = context.Parameter;
            CosmosDBTriggerAttribute attribute = parameter.GetCustomAttribute <CosmosDBTriggerAttribute>(inherit: false);

            if (attribute == null)
            {
                return(Task.FromResult <ITriggerBinding>(null));
            }

            DocumentCollectionInfo documentCollectionLocation;
            DocumentCollectionInfo leaseCollectionLocation;
            ChangeFeedHostOptions  leaseHostOptions = ResolveLeaseOptions(attribute);

            try
            {
                string triggerConnectionString = ResolveAttributeConnectionString(attribute);
                DocumentDBConnectionString triggerConnection = new DocumentDBConnectionString(triggerConnectionString);
                if (triggerConnection.ServiceEndpoint == null)
                {
                    throw new InvalidOperationException("The connection string for the monitored collection is in an invalid format, please use AccountEndpoint=XXXXXX;AccountKey=XXXXXX;.");
                }

                DocumentDBConnectionString leasesConnection = new DocumentDBConnectionString(ResolveAttributeLeasesConnectionString(attribute, triggerConnectionString));
                if (triggerConnection.ServiceEndpoint == null)
                {
                    throw new InvalidOperationException("The connection string for the leases collection is in an invalid format, please use AccountEndpoint=XXXXXX;AccountKey=XXXXXX;.");
                }

                documentCollectionLocation = new DocumentCollectionInfo
                {
                    Uri            = triggerConnection.ServiceEndpoint,
                    MasterKey      = triggerConnection.AuthKey,
                    DatabaseName   = attribute.DatabaseName,
                    CollectionName = attribute.CollectionName
                };

                leaseCollectionLocation = new DocumentCollectionInfo
                {
                    Uri            = leasesConnection.ServiceEndpoint,
                    MasterKey      = leasesConnection.AuthKey,
                    DatabaseName   = attribute.LeaseDatabaseName,
                    CollectionName = attribute.LeaseCollectionName
                };

                if (documentCollectionLocation.Uri.Equals(leaseCollectionLocation.Uri) &&
                    documentCollectionLocation.DatabaseName.Equals(leaseCollectionLocation.DatabaseName) &&
                    documentCollectionLocation.CollectionName.Equals(leaseCollectionLocation.CollectionName))
                {
                    throw new InvalidOperationException("The monitored collection cannot be the same as the collection storing the leases.");
                }
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException(string.Format("Cannot create Collection Information for {0} in database {1} with lease {2} in database {3} : {4}", attribute.CollectionName, attribute.DatabaseName, attribute.LeaseCollectionName, attribute.LeaseDatabaseName, ex.Message), ex);
            }

            return(Task.FromResult <ITriggerBinding>(new CosmosDBTriggerBinding(parameter, documentCollectionLocation, leaseCollectionLocation, leaseHostOptions)));
        }
コード例 #3
0
        public DocumentDBService(string connectionString)
        {
            DocumentDBConnectionString connection = new DocumentDBConnectionString(connectionString);

            _client = new DocumentClient(connection.ServiceEndpoint, connection.AuthKey);
        }