C#でDataverseに接続して操作したい。
解決したいこと
Dataverseにログインしてテーブル情報を取得したいです。
しかし、実装しているDataverse接続用のオブジェクトのインスタンス化で失敗してしまいます。
ログイン情報は今は質問用にマスクしていますが、誤りが無い事は確認しました。。
どうか解決方法のご教示お願い致します。
発生している問題・エラー
CrmServiceClientのインスタンス化に失敗しました。
エラーメッセージ:ERROR REQUESTING Token FROM THE Authentication context
ERROR REQUESTING Token FROM THE Authentication contextCould not load type 'Microsoft.IdentityModel.Clients.ActiveDirectory.UserPasswordCredential' from assembly 'Microsoft.IdentityModel.Clients.ActiveDirectory, Version=5.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.Unable to connect to CRM: Could not load type 'Microsoft.IdentityModel.Clients.ActiveDirectory.UserPasswordCredential' from assembly 'Microsoft.IdentityModel.Clients.ActiveDirectory, Version=5.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.
Could not load type 'Microsoft.IdentityModel.Clients.ActiveDirectory.UserPasswordCredential' from assembly 'Microsoft.IdentityModel.Clients.ActiveDirectory, Version=5.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.Unable to Login to Dynamics CRM
該当するソースコード
using System;
using System.Net;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Tooling.Connector;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Metadata;
using Microsoft.Xrm.Sdk.WebServiceClient;
using static System.Net.WebRequestMethods;
using System.Configuration;
namespace FetchXMLDemo
{
class CountProgram
{
static void Main(string[] args)
{
try
{
Console.WriteLine("開始。");
//if (args.Length < 3)
//{
// Console.WriteLine("引数:ユーザ名 パスワード URL");
// return;
//}
string user = "test@test.onmicrosoft.com";
string password = "test0123";
string url = "https://test1234.crm7.dynamics.com/";
var organizationService = CreateCrmService(user, password, url);
var request = new RetrieveAllEntitiesRequest { EntityFilters = EntityFilters.All };
var response = (RetrieveAllEntitiesResponse)organizationService.Execute(request);
foreach (var table in response.EntityMetadata)
{
Console.WriteLine(table.EntitySetName);
}
Console.WriteLine("終了。");
}
catch (Exception ex)
{
// 例外が発生した場合は、ログに出力する
Console.WriteLine("エラー内容:" + ex);
// プログラムを終了する
Environment.Exit(1);
}
}
private static OrganizationWebProxyClient CreateCrmService(string user, string password, string url)
{
string authType = "OAuth";
string appId = "51f81489-12ee-4a9e-aaae-a2591f45987d";
string reDirectURI = "app://58145B91-0C36-4500-8554-080854F2AC97";
string loginPrompt = "Auto";
string ConnectionString = string.Format("AuthType = {0};Username = {1};Password = {2}; Url = {3}; AppId={4}; RedirectUri={5};LoginPrompt={6}",
authType, user, password, url, appId, reDirectURI, loginPrompt);
var serviceClient = new CrmServiceClient(ConnectionString);
// CrmServiceClientのインスタンス化に成功したかどうかを判定する
if (serviceClient.IsReady)
{
// 成功した場合は、OrganizationWebProxyClientプロパティを返す
var organizationService2 = serviceClient.OrganizationWebProxyClient;
return organizationService2;
}
else
{
// 失敗した場合は、エラーメッセージをログに出力し、例外をスローする
Console.WriteLine("CrmServiceClientのインスタンス化に失敗しました。");
Console.WriteLine("エラーメッセージ:" + serviceClient.LastCrmError);
throw new Exception("CrmServiceClientのインスタンス化に失敗しました。");
}
//var organizationService = serviceClient.OrganizationWebProxyClient;
//return organizationService;
}
}
}
自分で試したこと
・Microsoft.IdentityModel.Clients.ActiveDirectoryパッケージの再インストール
・ログイン情報の見直し
0