OrganizationServiceProxy是否已连接?

时间:2013-08-13 09:59:22

标签: dynamics-crm-2011

判断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对象。

肯定有更好的办法。

1 个答案:

答案 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;        
}