1. xConnectクライアントAPI (C#)

xConnectクライアントAPIタイムアウトの設定

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

xConnectクライアント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<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秒です

Sitecoreコンテキストで既定のクライアント タイムアウトを設定する

Sitecoreコンテキストでは、xConnectクライアント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を渡すことができます。

この記事を改善するための提案がある場合は、 お知らせください!