xConnect Client APIのタイムアウト設定
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
xConnect Client APIをインスタンス化する際にデフォルトのタイムアウトを設定することも、特定のリクエストごとにタイムアウトを設定することもできます。
!注 ストレージプロバイダーレベルでタイムアウトを設定することも可能です。
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
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秒です。
Sitecoreのコンテキストでデフォルトのクライアントタイムアウトを設定します
Sitecoreの文脈では、xConnect Client APIにはデフォルトのクライアントタイムアウトはありません。これはプラットフォーム内の機能ごとにタイムアウトの要件が異なるためです。例えば、トラッカーは連絡先が利用できない場合に迅速にタイムアウトしなければなりませんが、List Managerは大規模なバッチ処理のための時間を確保しなければなりません。
リクエストごとにタイムアウトを指定してください
キャンセルトークンを渡すことで、リクエストごとにタイムアウトを指定することができます。クライアントのすべての拡張メソッドにはキャンセルトークンを受け入れるオーバーロードがあります:
// GET
var cancellationTokenSource = new CancellationTokenSource(200);
Task
// 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を渡すことができます。