これはベスト プラクティスの質問です。このベスト プラクティスの記事および 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 認証モードで、MSDN で示されauthCredentials.SecurityTokenResponse
ているように null になります
ADモードで認証を1回だけ実行し、次のコンストラクターを介して新しく作成された認証済みを渡す方法はありますか? SecurityTokenResponse
OrganizationServiceProxy
OrganizationServiceProxy (IServiceConfiguration, SecurityTokenResponse)
OrganizationServiceProxy
スレッドごとにインスタンスを構築するときに、「スレッドごとに」認証とメタデータのダウンロード ヒットを取得する必要がなく、ヒットを 1 回だけ取得する必要はありません。