internal static XConnectClientConfiguration GenerateCFG(XdbModel xdbModel) { XConnectClientConfiguration toReturn = null; var CertificateThumbprint = ConfigurationManager.AppSettings.Get("CertificateThumbprint"); if (!string.IsNullOrEmpty(CertificateThumbprint)) { var options = CertificateHttpClientHandlerModifierOptions.Parse(Const.XConnect.CertificateStorePrefix + CertificateThumbprint); var certificateModifier = new CertificateHttpClientHandlerModifier(options); List <IHttpClientModifier> clientModifiers = new List <IHttpClientModifier>(); var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20)); clientModifiers.Add(timeoutClientModifier); var odataUri = new Uri(MarketingConst.XConnect.EndPoints.Odata); var ConfigurationUri = new Uri(MarketingConst.XConnect.EndPoints.Configuration); var httpClientHandlerModifiers = new[] { certificateModifier }; var collectionClient = new CollectionWebApiClient(odataUri, clientModifiers, httpClientHandlerModifiers); var searchClient = new SearchWebApiClient(odataUri, clientModifiers, httpClientHandlerModifiers); var configurationClient = new ConfigurationWebApiClient(ConfigurationUri, clientModifiers, httpClientHandlerModifiers); toReturn = new XConnectClientConfiguration(new XdbRuntimeModel(xdbModel), collectionClient, searchClient, configurationClient); } else { Console.WriteLine("Missing certificate thumbprint. Re: example config"); } return(toReturn); }
public XConnectClientConfiguration GetCFG(XdbModel xdbModel) { var options = CertificateHttpClientHandlerModifierOptions.Parse(CollectionConst.XConnect.Certificate.CertificateStore + CollectionConst.XConnect.Certificate.CertificateThumbprint); var certificateModifier = new CertificateHttpClientHandlerModifier(options); List <IHttpClientModifier> clientModifiers = new List <IHttpClientModifier>(); var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20)); clientModifiers.Add(timeoutClientModifier); var collectionClient = new CollectionWebApiClient(new Uri(CollectionConst.XConnect.EndPoints.Odata), clientModifiers, new[] { certificateModifier }); var searchClient = new SearchWebApiClient(new Uri(CollectionConst.XConnect.EndPoints.Odata), clientModifiers, new[] { certificateModifier } ); var configurationClient = new ConfigurationWebApiClient(new Uri(CollectionConst.XConnect.EndPoints.Configuration), clientModifiers, new[] { certificateModifier }); var cfg = new XConnectClientConfiguration( new XdbRuntimeModel(xdbModel), collectionClient, searchClient, configurationClient); return(cfg); }
private static async Task <XConnectClient> GetXConnectClient() { // Valid certificate thumbprints must be passed in var options = CertificateHttpClientHandlerModifierOptions.Parse($"StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue=55AAF36E6508E0670F2B11F67371993C9EB8428D"); // Optional timeout modifier var certificateModifier = new CertificateHttpClientHandlerModifier(options); var clientModifiers = new List <IHttpClientModifier>(); var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 60)); clientModifiers.Add(timeoutClientModifier); // This overload takes three client end points - collection, search, and configuration var collectionClient = new CollectionWebApiClient(new Uri("https://xp930.xconnect/odata"), clientModifiers, new[] { certificateModifier }); var searchClient = new SearchWebApiClient(new Uri("https://xp930.xconnect/odata"), clientModifiers, new[] { certificateModifier }); var configurationClient = new ConfigurationWebApiClient(new Uri("https://xp930.xconnect/configuration"), clientModifiers, new[] { certificateModifier }); XdbModel[] models = { CollectionModel.Model, Custom.Foundation.Xdb.Models.FormsModel.Model }; var cfg = new XConnectClientConfiguration( new XdbRuntimeModel(models), collectionClient, searchClient, configurationClient); await cfg.InitializeAsync(); return(new XConnectClient(cfg)); }
private CertificateHttpClientHandlerModifier GetCertificateWebRequestHandlerModifier( string connectionStringName) { string certificateOptionsSettingValue = Configuration.GetConnectionString(connectionStringName); CertificateHttpClientHandlerModifierOptions options = CertificateHttpClientHandlerModifierOptions.Parse(certificateOptionsSettingValue); return(new CertificateHttpClientHandlerModifier(options)); }
/// <summary> /// Gets the handler configurations for the Reference Data client /// </summary> /// <param name="thumbprint"></param> /// <returns></returns> public virtual IEnumerable <IHttpClientHandlerModifier> GetReferenceDataHandlers(string thumbprint) { // Valid certificate thumbprints must be passed in var options = CertificateHttpClientHandlerModifierOptions.Parse("StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue=" + thumbprint); // Optional timeout modifier IHttpClientHandlerModifier[] handlers = { new CertificateHttpClientHandlerModifier(options) }; return(handlers); }
public static async Task <XConnectClient> Create() { const string XCONNECT_ENDPOINT_KEY = "xconnect.collection"; var connectionStrings = WebConfigurationManager.ConnectionStrings; var endpoint = connectionStrings[XCONNECT_ENDPOINT_KEY]?.ConnectionString; Uri endpointUri; if (!Uri.TryCreate(endpoint, UriKind.Absolute, out endpointUri)) { throw new Exception($"Endpoint to xConnect has not been specified. The key name must be [{XCONNECT_ENDPOINT_KEY}]"); } CollectionWebApiClient collectionClient; SearchWebApiClient searchClient; ConfigurationWebApiClient configurationClient; XConnectClientConfiguration cfg; var certificate = connectionStrings["xconnect.collection.certificate"]?.ConnectionString; List <IHttpClientModifier> modifiers = null; CertificateHttpClientHandlerModifier[] certificateModifiers = null; //if a certificate was specified in config if (string.IsNullOrEmpty(certificate) == false) { var certOptions = CertificateHttpClientHandlerModifierOptions.Parse(certificate); certificateModifiers = new[] { new CertificateHttpClientHandlerModifier(certOptions) }; modifiers = new List <IHttpClientModifier>() { new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20)) }; } collectionClient = new CollectionWebApiClient(new Uri(endpointUri, "odata/"), modifiers, certificateModifiers); searchClient = new SearchWebApiClient(new Uri(endpointUri, "odata/"), modifiers, certificateModifiers); configurationClient = new ConfigurationWebApiClient(new Uri(endpointUri, "configuration/"), modifiers, certificateModifiers); cfg = new XConnectClientConfiguration(new XdbRuntimeModel(ModelFactory.Model), collectionClient, searchClient, configurationClient, true); await cfg.InitializeAsync(); return(new XConnectClient(cfg)); }
public async Task <XConnectClientConfiguration> CreateAndConfigureClient() { XConnectClientConfiguration cfg = null; try { CertificateHttpClientHandlerModifierOptions options = CertificateHttpClientHandlerModifierOptions.Parse(CollectionConst.XConnect.Certificate.CertificateStore + CollectionConst.XConnect.Certificate.CertificateThumbprint); var certificateModifier = new CertificateHttpClientHandlerModifier(options); List <IHttpClientModifier> clientModifiers = new List <IHttpClientModifier>(); var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20)); clientModifiers.Add(timeoutClientModifier); var collectionClient = new CollectionWebApiClient(new Uri(CollectionConst.XConnect.EndPoints.Odata), clientModifiers, new[] { certificateModifier }); var searchClient = new SearchWebApiClient(new Uri(CollectionConst.XConnect.EndPoints.Odata), clientModifiers, new[] { certificateModifier }); var configurationClient = new ConfigurationWebApiClient(new Uri(CollectionConst.XConnect.EndPoints.Configuration), clientModifiers, new[] { certificateModifier }); cfg = new XConnectClientConfiguration(new XdbRuntimeModel(CollectionModel.Model), collectionClient, searchClient, configurationClient); await cfg.InitializeAsync(); DisplayXConnectResult(); } catch (XdbModelConflictException ce) { Console.WriteLine("Error: " + ce.Message); } return(cfg); }
/// <summary> /// Builds a client configuration object for connecting to xConnect. /// Includes certificate and timeout modifiers, and sets up client connections. /// </summary> /// <param name="collectionHost">The host name where the collection endpoint is located</param> /// <param name="searchHost">The host name where the search endpoint is located</param> /// <param name="configHost">The host name where configuration info should be retrieved</param> /// <param name="thumbprint">The thumbprint for the certificate to connect with</param> /// <returns>A new configuration instance</returns> public virtual XConnectClientConfiguration GetClientConfiguration(string collectionHost, string searchHost, string configHost, string thumbprint) { //Set up the certificate used to connect to xConnect endpoints var options = CertificateHttpClientHandlerModifierOptions.Parse("StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue=" + thumbprint); var certificateModifier = new CertificateHttpClientHandlerModifier(options); //Set up timeout modifier for the client var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20)); var clientModifiers = new List <IHttpClientModifier> { timeoutClientModifier }; //Initialize the clients. Each requires the certificate in order to open the connection var collectionClient = new CollectionWebApiClient(new Uri(collectionHost + "/odata"), clientModifiers, new[] { certificateModifier }); var searchClient = new SearchWebApiClient(new Uri(searchHost + "/odata"), clientModifiers, new[] { certificateModifier }); var configurationClient = new ConfigurationWebApiClient(new Uri(configHost + "/configuration"), clientModifiers, new[] { certificateModifier }); //Create the configuration object with all clients var cfg = new XConnectClientConfiguration( new XdbRuntimeModel(CollectionModel.Model), collectionClient, searchClient, configurationClient); return(cfg); }
private static async Task MainAsync(string[] args) { Console.WriteLine("Which environment do you wish to connect to? 1=LocalDev, 2=Other"); Console.WriteLine(); Console.WriteLine("1 = LocalDev"); Console.WriteLine("2 = Other"); var environment = Console.ReadLine(); string xConnectUrlBase; string thumbPrint; #region configurehttp switch (environment) { case "1": { Console.WriteLine("Configuring LocalDev connection"); xConnectUrlBase = "https://dev93.xconnect"; thumbPrint = "66405B1051BCA6DB0BC3576640A09648E1292812"; break; } case "2": { Console.WriteLine("Other"); xConnectUrlBase = "[your xConnect URL here]"; thumbPrint = "[your thumbprint here]"; break; } default: { Console.WriteLine("Nothing to see here"); xConnectUrlBase = "???"; thumbPrint = "???"; return; } } CertificateHttpClientHandlerModifierOptions options = CertificateHttpClientHandlerModifierOptions.Parse($"StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue={thumbPrint}"); var certificateModifier = new CertificateHttpClientHandlerModifier(options); List <IHttpClientModifier> clientModifiers = new List <IHttpClientModifier>(); var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20)); clientModifiers.Add(timeoutClientModifier); // Ensure configuration pointing to appropriate instance of xconnect var collectionClient = new CollectionWebApiClient(new Uri($"{xConnectUrlBase}/odata"), clientModifiers, new[] { certificateModifier }); var searchClient = new SearchWebApiClient(new Uri($"{xConnectUrlBase}/odata"), clientModifiers, new[] { certificateModifier }); var configurationClient = new ConfigurationWebApiClient(new Uri($"{xConnectUrlBase}/configuration"), clientModifiers, new[] { certificateModifier }); // For exisitng facets //XdbModel[] models = { CollectionModel.Model }; // For custom Facets XdbModel[] models = { CollectionModel.Model, CustomerCollectionModel.Model }; //var cfg = new XConnectClientConfiguration(new XdbRuntimeModel(models), collectionClient, searchClient, configurationClient); var cfg = new XConnectClientConfiguration(new XdbRuntimeModel(models), collectionClient, searchClient, configurationClient, true); try { await cfg.InitializeAsync(); } catch (XdbModelConflictException ce) { Console.WriteLine("ERROR:" + ce.Message); return; } #endregion Console.WriteLine("What action are you performing?"); Console.WriteLine("1=Update Contact Facet"); Console.WriteLine("2=Create contact with values"); var action = Console.ReadLine(); switch (action) { case "1": { Console.WriteLine("Enter an xDB contact ID. You can keep this empty to update facets based on email."); var contactId = Console.ReadLine(); Console.WriteLine("First name?"); var firstName = Console.ReadLine(); Console.WriteLine("Last name?"); var lastName = Console.ReadLine(); Console.WriteLine("Email Address?"); var email = Console.ReadLine(); Console.WriteLine("Country code?"); var countryCode = Console.ReadLine(); Console.WriteLine("Mobile number?"); var mobileNumber = Console.ReadLine(); Console.WriteLine("Customer Status?"); var customerStatus = Console.ReadLine(); await UpdateContactFacet(cfg, contactId, firstName, lastName, email, countryCode, mobileNumber, customerStatus); break; } case "2": { Console.WriteLine("First name?"); var firstName = Console.ReadLine(); Console.WriteLine("Last name?"); var lastName = Console.ReadLine(); Console.WriteLine("Email Address?"); var email = Console.ReadLine(); Console.WriteLine("Country code?"); var countryCode = Console.ReadLine(); Console.WriteLine("Mobile number?"); var mobileNumber = Console.ReadLine(); Console.WriteLine("Customer Status?"); var customerStatus = Console.ReadLine(); await CreateContacts(cfg, firstName, lastName, email, countryCode, mobileNumber, customerStatus); break; } default: { return; } } Console.WriteLine(); Console.ReadLine(); }
private async Task Register(PipelineArgs arg) { CertificateHttpClientHandlerModifierOptions options = CertificateHttpClientHandlerModifierOptions.Parse("StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue=" + Constants.XConnectThumbprint); var certificateModifier = new CertificateHttpClientHandlerModifier(options); List <IHttpClientModifier> clientModifiers = new List <IHttpClientModifier>(); var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20)); clientModifiers.Add(timeoutClientModifier); var collectionClient = new CollectionWebApiClient(new Uri(Constants.XConnectInstance + "/odata"), clientModifiers, new[] { certificateModifier }); var searchClient = new SearchWebApiClient(new Uri(Constants.XConnectInstance + "/odata"), clientModifiers, new[] { certificateModifier }); var configurationClient = new ConfigurationWebApiClient(new Uri(Constants.XConnectInstance + "/configuration"), clientModifiers, new[] { certificateModifier }); var cfg = new XConnectClientConfiguration( new XdbRuntimeModel(ProductTrackingModel.Model), collectionClient, searchClient, configurationClient); foreach (var interactionEvent in arg.ProcessingResult.Interaction.Interaction.Events) { if (interactionEvent.CustomValues != null && interactionEvent.CustomValues.Count > 0) { var name = interactionEvent.CustomValues["name"].Split(' '); var firstName = name[0] != null ? name[0] : "Not Available"; var lastName = name.Length > 1 ? name[1] : "Not Available"; var twitterHandle = interactionEvent.CustomValues["twitterhandle"]; var twitterHandleCreated = Convert.ToDateTime(interactionEvent.CustomValues["twitterhandlecreated"]); var numberOfFollowers = Convert.ToInt32(interactionEvent.CustomValues["followerscount"]); var tweetfulltext = interactionEvent.CustomValues["tweetfulltext"]; var hashtag = interactionEvent.CustomValues["hashtags"]; await cfg.InitializeAsync(); using (var client = new XConnectClient(cfg)) { try { ContactIdentifier contactIdentifier = new ContactIdentifier("twitter", twitterHandle, ContactIdentifierType.Known); // Let's just save this for later //TODO: If time check for existing user. Identifier = contactIdentifier.Identifier; Contact contact = new Contact(contactIdentifier); //TODO Get from args custom values "Name". If space save first and last PersonalInformation personalInfo = new PersonalInformation() { FirstName = firstName, LastName = lastName }; // TODO get from args TwitterAccountInfo visitorInfo = new TwitterAccountInfo() { TwitterHandle = twitterHandle, TwitterStartDate = twitterHandleCreated, NumberOfFollowers = numberOfFollowers, VerifiedTwitterHandle = false }; client.AddContact(contact); client.SetFacet(contact, TwitterAccountInfo.DefaultFacetKey, visitorInfo); client.SetFacet(contact, PersonalInformation.DefaultFacetKey, personalInfo); var interaction = new Interaction(contact, InteractionInitiator.Contact, arg.ProcessingResult.Interaction.Interaction.ChannelId, ""); // GUID should be from a channel item in Sitecore //TODO Get from args var productTweet = new ProductTweet(); productTweet.Tweet = tweetfulltext; productTweet.ProductHashtag = hashtag; productTweet.TwitterHandle = twitterHandle; ITextAnalyticsClient cogClient = new TextAnalyticsClient(new ApiKeyServiceClientCredentials()) { Endpoint = "https://westus.api.cognitive.microsoft.com" }; SentimentBatchResult result = cogClient.SentimentAsync( new MultiLanguageBatchInput( new List <MultiLanguageInput>() { new MultiLanguageInput("en", new Guid().ToString(), productTweet.Tweet) })).Result; if (result != null && result.Documents.Any()) { var firstDocument = result.Documents.First(); if (firstDocument != null) { productTweet.Sentiment = firstDocument.Score; } } interaction.Events.Add(new ProductReviewOutcome(productTweet, DateTime.UtcNow)); client.AddInteraction(interaction); await client.SubmitAsync(); } catch (XdbExecutionException ex) { // Deal with exception Logger.LogInformation("Tres Divas Twitter Interactions EnrichmentPipelineProcessor: ", ex); } } } } }