オンライン バージョンに接続するときは、デバイスの資格情報とユーザーの資格情報を提供する必要があります。そのままです (Windows ライブ認証スキームとすべて)。
編集
少し調査した後、これがなぜなのかについての公式文書をまだ見つけていません。一般に、MSDN フォーラムでは、デバイス ID を Windows Live に関連付けることであることが認められています。これは、CRM を使用しているワークステーションを Microsoft が追跡できるようにするためでしょうか? 特定のアカウントを使用して CRM に接続できるマシン ID を制限することで、ある時点でセキュリティを強化できる可能性があります。たぶん、上記のすべて/どれも。
憶測はさておき、私の経験では、デバイス資格情報が CRM に対して認証されていない場合 (つまりOrganizationServiceProxy
、IServiceManagment 実装で使用されるコンストラクターまたは認証プロセスを介して)、正常なクエリを実行できませんでした。
以下に、これを行うために使用していた古いコードをいくつか示します。@Jason Lattimer で言及されているように、接続文字列を使用することをお勧めします。さらに並列処理が必要な場合は、 の使用を検討してIServiceManagement<IOrganizationService>
ください。
var reader = new AppSettingsReader();
//instatantiate credential class and populate values
var cc = new ClientCredentials();
cc.UserName.UserName = reader.GetValue("WLID", typeof(string)).ToString();
cc.UserName.Password = reader.GetValue("WLPS", typeof(string)).ToString();
//repeat for device credentials
var deviceCredentials = new ClientCredentials();
deviceCredentials.UserName.UserName = reader.GetValue("deviceWLID", typeof(string)).ToString();
deviceCredentials.UserName.Password = reader.GetValue("deviceWLPS", typeof(string)).ToString();
//create a uri for the organization service location
#if DEBUG
var orgServiceUri = new Uri(reader.GetValue("CrmNonProductionUri", typeof(string)).ToString());
#else
Uri orgServiceUri = new Uri(reader.GetValue("CrmProductionUri", typeof(string)).ToString());
#endif
OrganizationServiceProxy retval = new OrganizationServiceProxy(orgServiceUri, null, cc, deviceCredentials);
retval.EnableProxyTypes();
したがって、最終的には、設定ファイルを使用して、資格情報と URI を作成するために必要なさまざまな値を保存します (両方の環境で)。