---
title: "xConnect Client APIのタイムアウト設定"
slug: "configuring-xconnect-client-api-timeouts"
abstract: "xConnect Client APIのデフォルトタイムアウトおよびリクエストごとのタイムアウトを設定する方法について、Sitecoreの文脈でも非Sitecoreの文脈でも。"
---
# xConnect Client APIのタイムアウト設定

xConnect Client APIをインスタンス化する際にデフォルトのタイムアウトを設定することも、特定のリクエストごとにタイムアウトを設定することもできます。

> !注 [ストレージプロバイダーレベルでタイムアウトを設定する](https://doc.sitecore.com/xp/ja/developers/105/sitecore-experience-platform/configuring-the-xconnect-service.html "Configuring the xConnect service")ことも可能です。

## Sitecore以外のコンテキストでデフォルトのクライアントタイムアウトを設定する

非Sitecoreコンテキストでは、デフォルトのクライアントタイムアウトはTimeoutHttpClientModifierを渡すことで設定できます。以下の例では、設定が初期化される前に検索、収集、構成クライアントにタイムアウト修飾子が追加されます。

using Sitecore.XConnect;
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)
 {
 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(200));
 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);

 try
 {
 await cfg.InitializeAsync();

 }
 catch (XdbModelConflictException ce)
 {
 Console.WriteLine("ERROR:" + ce.Message);
 return;
 }

 using (var client = new XConnectClient(cfg))
 {
 }
 }
 }
}

> !注クライアントのタイムアウトを指定していない場合、[デフォルトのクライアントタイムアウトは100秒です](https://msdn.microsoft.com/en-us/library/system.net.http.httpclient\(v=vs.110\).aspx)。

## Sitecoreのコンテキストでデフォルトのクライアントタイムアウトを設定します

Sitecoreの文脈では、xConnect Client APIにはデフォルトのクライアントタイムアウトはありません。これはプラットフォーム内の機能ごとにタイムアウトの要件が異なるためです。例えば、トラッカーは連絡先が利用できない場合に迅速にタイムアウトしなければなりませんが、List Managerは大規模なバッチ処理のための時間を確保しなければなりません。

## リクエストごとにタイムアウトを指定してください

キャンセルトークンを渡すことで、リクエストごとにタイムアウトを指定することができます。クライアントのすべての拡張メソッドにはキャンセルトークンを受け入れるオーバーロードがあります:

// GET
var cancellationTokenSource = new CancellationTokenSource(200);
Task<Contact> contactTask = client.GetAsync<Contact>(reference, new ContactExecutionOptions(new ContactExpandOptions() { }), cancellationTokenSource.Token);

// SUBMIT
var cancellationTokenSource1 = new CancellationTokenSource(200);
await client.SubmitAsync(cancellationTokenSource1.Token);

// GETBATCHENUMERATOR
var results = await client.Contacts.Where(f => f.IsKnown == true).GetBatchEnumerator(10, cancellationTokenSource.Token);

// TOSEARCHRESULTS
var results = await client.Contacts.Where(f => f.IsKnown == true).ToSearchResults(cancellationTokenSource.Token);

> !ヒント同期拡張メソッドを使っている場合は、TimeSpanを渡すことができます。