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