需要验证CRM凭据

时间:2014-10-08 22:02:13

标签: dynamics-crm

我的目标很简单。使用Dynamics CRM 2013 API并提供URL,用户名,密码和域,如何检查值是否有效?

我有一个将使用API​​的自定义应用程序。我有一个设置屏幕,用户将在其中输入URL,用户名,密码和域。我还有一个名为“测试连接”的按钮,它将验证它是否可以使用该信息进行连接。

以下是我用来创建连接的逻辑:

string connectionString;
if (_crmDomain != "")
    connectionString = string.Format(@"Url={0}; Username={1}\{2}; Password={3}", url, domain, userName, password);
else
    connectionString = string.Format(@"Url={0}; Username={1}; Password={2}", url, userName, password);

var css = new ConnectionStringSettings("CRMConnectionString", connectionString);
var cn = new CrmConnection(css);
var service = new OrganizationService(cn);

问题是即使凭据无效(可能是不正确的密码),创建新OrganizationService的行也可以正常工作。有没有办法检查它是否会在最终进行实际通话时起作用?

现在我通过打电话来绕过它。这迫使它创建连接。这就是我正在做的事情:

var request = new RetrieveAllEntitiesRequest();
request.EntityFilters = EntityFilters.Entity;
service.Execute(request);

如果凭据无效,则service.Execute行会引发异常。这有一个问题很好。假设用户输入了有效凭据并成功单击了“测试连接”。现在让我们说他们将密码更改为错误,然后单击“测试连接”。在这种情况下,它仍然成功。它似乎使用以前存在的连接。有没有办法消除或清除以前的连接,以便当我尝试使用无效值时会抛出异常?

同样,我的总体目标是验证登录值。无论什么能提供实现这一目标的最佳方式,我所追求的是什么。谢谢!

1 个答案:

答案 0 :(得分:3)

放弃使用ConnectionStringSettings并使用CrmConnection.Parse()

var cn = CrmConnection.Parse(connectionString);
var service = new OrganizationService(cn);

try
{           
    service.Execute(new WhoAmIRequest());
}
catch (Exception ex)
{
    //Do something because connection setup was bad
}

<强>已更新

我运行了以下代码并获得了预期的输出,如下面的代码所示。当密码更改为错误密码时,请求失败,当更改为正确的密码时,它会成功。

var connectionString = @"Url=https://server.com/orgname/;Username=domain\username;Password=goodpassword;";
var cn = CrmConnection.Parse(connectionString);
var service = new OrganizationService(cn);

try
{           
    service.Execute(new WhoAmIRequest());
    Console.WriteLine("Good Password");
}
catch
{
    Console.WriteLine("Bad Password");    
}

connectionString = @"Url=https://server.com/orgname/;Username=domain\username;Password=badpassword;";
cn = CrmConnection.Parse(connectionString);
service = new OrganizationService(cn);

try
{           
    service.Execute(new WhoAmIRequest());
    Console.WriteLine("Good Password");
}
catch
{
    Console.WriteLine("Bad Password");    
}

connectionString = @"Url=https://server.com/orgname/;Username=domain\username;Password=goodpassword;";
cn = CrmConnection.Parse(connectionString);
service = new OrganizationService(cn);

try
{           
    service.Execute(new WhoAmIRequest());
    Console.WriteLine("Good Password");
}
catch
{
    Console.WriteLine("Bad Password");    
}

控制台的输出是:

Good Password
Bad Password
Good Password