I am using the latest version of Microsoft.CrmSdk.XrmTooling.CoreAssembly.9.1.0.108
My service use multiple Dynamics 365 users, so I cached a CrmServiceClient instance for every user.
But I can't find a proper way how to update a token when it has expired.
OrganizationService.CheckIfTokenIsExpired is deprecated.
This is my connection cache code
private static readonly Dictionary _crmClientCache = new Dictionary();
private static readonly Object _orgServiceLock = new Object();
private static readonly string _authType = "OAuth";
private static readonly string _requireNewInstance = "true";
private static readonly string _appId = "51f81489-12ee-4a9e-aaae-a2591f45987d";
private static readonly string _reDirectURI = "app://58145B91-0C36-4500-8554-080854F2AC97";
public static CrmServiceClient GetCrmClient(string userName, string password, string url)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
string ConnectionString = string.Format("AuthType={0};Username={1};Password={2};Url={3};AppId={4};RedirectUri={5};RequireNewInstance={6};",
_authType, userName, password, url, _appId, _reDirectURI, _requireNewInstance);
CrmServiceClient crmClient;
lock (_orgServiceLock)
{
if (!_crmClientCache.ContainsKey(ConnectionString))
{
crmClient = new CrmServiceClient(ConnectionString);
_crmClientCache.Add(ConnectionString, crmClient);
}
}
crmClient = _crmClientCache[ConnectionString];
if (crmClient.IsReady)
{
return crmClient;
}
throw new Exception(crmClient.LastCrmError);
}
Thanks for help!