这是一个最佳实践问题。根据这篇最佳实践文章和 MSDN,OrganizationServiceProxy
它不是线程安全的。
如果您有一个多线程客户端应用程序,您正在其中创建一个实例
OrganizationServiceContext
(基于每个线程),其构造函数接受一个
IOrganizationService
实例,并且您传入一个全局实例OrganizationServiceProxy
(即在“进程级别”),这是否会导致线程问题和/或如果OrganizationServiceProxy
实例故障,是否会影响线程尝试在它们自己的“本地”实例上执行的操作OrganizationServiceContext
?
我相信它会,并且OrganizationServiceProxy
需要在“每个线程”的基础上创建一个实例,并且OrganizationServiceContext
多线程应用程序中的每个实例都需要其自己的相应 OrganizationServiceProxy
实例。
我发布此内容以确认上述内容。
此外,文章指出
服务代理类使用以下类方法执行元数据下载和用户认证
IServiceManagement<IOrganizationService> orgServiceManagement =
ServiceConfigurationFactory.CreateManagement<IOrganizationService>(
new Uri(organizationUrl))
AuthenticationCredentials authCredentials = orgServiceManagement.Authenticate(credentials)
通过缓存服务管理和经过身份验证的凭证对象,您的应用程序可以更有效地构造服务代理对象,每个应用程序会话不止一次
如果我尝试手动执行上述 API 调用,在 Active Directory 身份验证模式下,authCredentials.SecurityTokenResponse
则为空,如MSDN 所示
有没有办法对 AD 模式执行一次身份验证,并通过以下构造函数将经过身份验证 SecurityTokenResponse
的对象传递给新创建的对象?OrganizationServiceProxy
OrganizationServiceProxy (IServiceConfiguration, SecurityTokenResponse)
这样在为每个线程构建实例时,您不必在“每个线程的基础上”进行身份验证和元数据下载,OrganizationServiceProxy
而只需点击一次?