1

判断 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;        
}   


Service 和 Linq 是私有字段。
上下文是 crmsvcutil.exe 中的 serviceContextName。
我习惯于为 Context 对象使用名称“linq”。

一定会有更好的办法。

4

1 回答 1

3

最简单的方法是执行 a 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;        
}  
于 2013-08-13T20:46:24.647 回答