我有一个带有IFD身份验证的Dynamics CRM 365(内部部署)环境。我正在尝试使用sdk对CRM进行操作。我首先进行测试连接,并将该测试连接存储在缓存对象中。此缓存对象的类型为IDictionary
。我正在努力解决一个奇怪的问题。对于不同的实例,它将创建不同的代理并缓存它们。
方案:
1)Auth类型是联合 - 它将使用此实时ID和发现URL并使用MD5算法在Key上创建并存储在IDictionary中,因此下次当我执行任何操作时,它将检查缓存中的代理。如果缓存为真,它将从缓存中获取代理并继续。
这在开发中的预期效果,但在生产中我有一个奇怪的问题。 假设第1天它在auth类型为AD时建立连接,即使我为联邦提供发现URL,它也只使用该类型的连接一整天。
下次当我在第2天尝试假设或者我关闭应用并再次打开时,这次它不能用于相同的配置。
我对确切发生的事情感到困惑。
连接代码:
private CrmServiceClient CreateServiceClient(AuthenticationProviderType _endpointType, IServiceManagement<IOrganizationService> organizationServiceManagement)
{
AuthCredentials = GetCredentials(_endpointType);
string connectionString = string.Empty;
string organizationUri = OrganizationServiceManagement.CurrentServiceEndpoint.Address.Uri.AbsoluteUri
.Replace(OrganizationServiceManagement.CurrentServiceEndpoint.Address.Uri.AbsolutePath, string.Empty);
switch (_endpointType)
{
case AuthenticationProviderType.None:
break;
case AuthenticationProviderType.ActiveDirectory:
connectionString = $"AuthType=AD;Url={ organizationUri }/{ AuthInfo.OrganizationUniqueName} ; Domain={ AuthInfo.Domain } ; Username={ AuthInfo.UserName }; Password ={ AuthInfo.Password }";
break;
case AuthenticationProviderType.Federation:
connectionString = $"AuthType=IFD;ServiceUri={ organizationUri }/{ AuthInfo.OrganizationUniqueName };Domain={ AuthInfo.Domain };Username={ AuthInfo.Domain }\\{ AuthInfo.UserName };Password={ AuthInfo.Password };";
break;
case AuthenticationProviderType.LiveId:
break;
case AuthenticationProviderType.OnlineFederation:
connectionString = $"AuthType=Office365;Username={AuthInfo.UserName}; Password={AuthInfo.Password}; Url={organizationUri}";
break;
default:
break;
}
var serviceClient = new CrmServiceClient(connectionString);
return serviceClient;
}