---
title: "非Sitecoreコンテキストでクライアントをインスタンス化する"
slug: "instantiate-client-in-a-non-sitecore-context"
abstract: "コンソールアプリケーションからxConnect Client APIをインスタンス化する方法の例です。"
---
# 非Sitecoreコンテキストでクライアントをインスタンス化する

> !重要コンテナベース環境では、xConnect APIは公開されません。

xConnect Client APIは移植可能であり、Sitecore以外の文脈でも使用できます。以下の例は、コンソールアプリケーションからクライアントをインスタンス化する方法を示しています。

> !重要正しいクライアント証明書を持つ信頼できるクライアントのみがxConnectと通信できます。モバイルアプリケーションからxConnectに書き込みたい場合は、アプリケーションからデータを収集し、そのデータを定期的にxConnectに送信する中間サーバーを設置する必要があります。モバイルデバイスから直接xConnectに書き込みすることはできません。

> !重要XConnectConfigurationオブジェクトを複数回初期化してはならず、不要なリソース消費や潜在的な競合を避けてください。

using Sitecore.XConnect.Client;
using Sitecore.XConnect.Schema;
using System;
using System.Threading.Tasks;
using Sitecore.XConnect.Client.WebApi;
using Sitecore.Xdb.Common.Web;
using Sitecore.XConnect.Collection.Model;
using System.Collections.Generic;

namespace Symposium.xConnect.Course
{
 public class Program
 {
 private static void Main(string args)
 {
 MainAsync(args).ConfigureAwait(false).GetAwaiter().GetResult();
 }

 private static async Task MainAsync(string args)
 {
 try
 {
 // Use the singleton configuration instance
 var cfg = XConnectConfiguration.Instance;

 using (var client = new XConnectClient(cfg))
 {
 // Use the client here
 }
 }
 catch (XdbModelConflictException ce)
 {
 Console.WriteLine("ERROR:" + ce.Message);
 return;
 }
 }
 }

 // Singleton class for XConnectClientConfiguration
 public static class XConnectConfiguration
 {
 private static readonly Lazy<XConnectClientConfiguration> \_instance =
 new Lazy<XConnectClientConfiguration>(() => InitializeConfiguration());

 public static XConnectClientConfiguration Instance => \_instance.Value;

 private static XConnectClientConfiguration InitializeConfiguration()
 {
 CertificateHttpClientHandlerModifierOptions options =
 CertificateHttpClientHandlerModifierOptions.Parse("StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue=15E6693B0AECB63DE57D991EC363CA462DC52432");

 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("https://sc900rev170622\_xconnect/odata"), clientModifiers, new { certificateModifier });
 var searchClient = new SearchWebApiClient(new Uri("https://sc900rev170622\_xconnect/odata"), clientModifiers, new { certificateModifier });
 var configurationClient = new ConfigurationWebApiClient(new Uri("https://sc900rev170622\_xconnect/configuration"), clientModifiers, new { certificateModifier });

 var cfg = new XConnectClientConfiguration(
 new XdbRuntimeModel(CollectionModel.Model), collectionClient, searchClient, configurationClient);

 // Initialize the configuration synchronously for simplicity
 cfg.InitializeAsync().GetAwaiter().GetResult();

 return cfg;
 }
 }
}

## カスタムモデルの使用

Sitecoreコンテキストでは、xConnectクライアントAPI構成可能なすべてのモデルから組み立てられたランタイムモデルを使用します。非Sitecoreコンテキストでは、扱いたいモデルをXConnectClientConfigurationに渡さなければなりません:

var cfg = new XConnectClientConfiguration(
 new XdbRuntimeModel(Custom.Namespace.Model), collectionClient, searchClient, configurationClient);

> !ヒントXdbRuntimeModelオブジェクトを複数のモデルでインスタンス化できます。