判断OrganizationServiceProxy是否已成功连接到CRM的最佳方法是什么?
我在AccountSet上使用GetEnumerator(),因为如果没有连接,则会失败。
/* Tries to connect to CRM and return false if failure - credentials arguments */
public bool Connect(string username, string password, string uri)
{
try
{
var cred = new ClientCredentials();
cred.UserName.UserName = username;
cred.UserName.Password = password;
service = new OrganizationServiceProxy(new Uri(uri), null, cred, null);
service.EnableProxyTypes(); // Allow LINQ early bound queries
linq = new Context(service);
/* This is where I need help */
var e = linq.AccountSet.GetEnumerator(); // this fails if not connected
}
catch
{
return false;
}
return true;
}
服务和Linq是私人领域。
Context是crmsvcutil.exe中的serviceContextName。
我习惯使用名称“linq”作为Context对象。
肯定有更好的办法。
答案 0 :(得分:3)
最简单的方法是执行WhoAmIRequest
,这是因为当您连接到CRM时,您需要提供有效的凭据。
如果凭据正确,WhoAmIRequest
将返回当前用户GUID,如果不正确,请求将失败。
所以你的代码可以是:
public bool Connect(string username, string password, string uri)
{
try
{
var cred = new ClientCredentials();
cred.UserName.UserName = username;
cred.UserName.Password = password;
service = new OrganizationServiceProxy(new Uri(uri), null, cred, null);
WhoAmIRequest request = new WhoAmIRequest();
WhoAmIResponse response = (WhoAmIResponse)service.Execute(request);
Guid userId = response.UserId;
}
catch
{
return false;
}
return true;
}