在 Dataverse 中使用 CrmServiceClient 和 AuthType OAuth 时性能下降
Performance degradation when using CrmServiceClient and AuthType OAuth in Dataverse
我有一个调用 Dataverse API 的 MVC.NET 解决方案,与 (soon to be deprecated ) WS-Trust 连接 (AuthType=Office365)
这是用于创建 CrmServiceClient 连接的代码 (AuthType=OAuth)
var conn = new CrmServiceClient(connectionString);
var service = (IOrganizationService) conn.OrganizationWebProxyClient ?? conn.OrganizationServiceProxy;
这是用于创建 WS-Trust 连接的代码 (AuthType=Office365)
var target = CrmConnection.Parse(connectionString);
target.ServiceConfigurationInstanceMode = ServiceConfigurationInstanceMode.PerName;
var service = (OrganizationService) CrmConfigurationManager.CreateService(target, "DataverseServiceName");
有没有人遇到过同样的问题?
在我们的案例中,问题是我们使用的是旧版本的 CrmSdk,使用最新版本 (9.0.2.42) 解决了我们的问题
https://www.nuget.org/packages/Microsoft.CrmSdk.CoreAssemblies/9.0.2.42
我们在设置呼叫者 ID (https://docs.microsoft.com/en-us/dotnet/api/microsoft.xrm.tooling.connector.crmserviceclient.callerid?view=dataverse-sdk-latest#microsoft-xrm-tooling-connector-crmserviceclient-callerid) 时也存在模拟问题,如果您是 运行 多个线程并使用不同的呼叫者 ID 启动多个连接,我们发现它不是线程安全的并且一些模拟一个用户的调用可能会被另一个用户混淆,即使:
disablecrossthreadsafeties 设置为 false (https://docs.microsoft.com/en-us/dotnet/api/microsoft.xrm.tooling.connector.crmserviceclient.disablecrossthreadsafeties?view=dataverse-sdk-latest#microsoft-xrm-tooling-connector-crmserviceclient-disablecrossthreadsafeties)
RequireNewInstance 设置为 true (https://docs.microsoft.com/en-us/power-apps/developer/data-platform/xrm-tooling/use-connection-strings-xrm-tooling-connect#connection-string-parameters)
我们最终不得不缓存每个 callerid 的每个 IOrganizationService 以防止它
我有一个调用 Dataverse API 的 MVC.NET 解决方案,与 (soon to be deprecated ) WS-Trust 连接 (AuthType=Office365)
这是用于创建 CrmServiceClient 连接的代码 (AuthType=OAuth)
var conn = new CrmServiceClient(connectionString);
var service = (IOrganizationService) conn.OrganizationWebProxyClient ?? conn.OrganizationServiceProxy;
这是用于创建 WS-Trust 连接的代码 (AuthType=Office365)
var target = CrmConnection.Parse(connectionString);
target.ServiceConfigurationInstanceMode = ServiceConfigurationInstanceMode.PerName;
var service = (OrganizationService) CrmConfigurationManager.CreateService(target, "DataverseServiceName");
有没有人遇到过同样的问题?
在我们的案例中,问题是我们使用的是旧版本的 CrmSdk,使用最新版本 (9.0.2.42) 解决了我们的问题 https://www.nuget.org/packages/Microsoft.CrmSdk.CoreAssemblies/9.0.2.42
我们在设置呼叫者 ID (https://docs.microsoft.com/en-us/dotnet/api/microsoft.xrm.tooling.connector.crmserviceclient.callerid?view=dataverse-sdk-latest#microsoft-xrm-tooling-connector-crmserviceclient-callerid) 时也存在模拟问题,如果您是 运行 多个线程并使用不同的呼叫者 ID 启动多个连接,我们发现它不是线程安全的并且一些模拟一个用户的调用可能会被另一个用户混淆,即使:
disablecrossthreadsafeties 设置为 false (https://docs.microsoft.com/en-us/dotnet/api/microsoft.xrm.tooling.connector.crmserviceclient.disablecrossthreadsafeties?view=dataverse-sdk-latest#microsoft-xrm-tooling-connector-crmserviceclient-disablecrossthreadsafeties)
RequireNewInstance 设置为 true (https://docs.microsoft.com/en-us/power-apps/developer/data-platform/xrm-tooling/use-connection-strings-xrm-tooling-connect#connection-string-parameters)
我们最终不得不缓存每个 callerid 的每个 IOrganizationService 以防止它