需要验证CRM凭据
问题描述:
我的目标很简单。使用Dynamics CRM 2013 API并给出url,用户名,密码和域,我如何检查这些值是否有效?需要验证CRM凭据
我有一个将使用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行会引发异常。这工作正常与一个问题。假设用户输入了有效的凭证并成功单击了测试连接。现在让我们假设他们将密码更改为错误,然后单击测试连接。在这种情况下,它仍然是成功的。它似乎使用以前存在的连接。有没有办法消灭或清除以前的连接,以便当我尝试使用无效的值时,它会引发异常?
同样,我的总体目标是验证登录值。无论提供什么最好的方式来实现这一点,都是我所追求的。谢谢!
答
删除使用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
http://msdn.microsoft.com/en-us/library/hh675404.aspx?cs-save-lang=1&cs-lang=csharp #code-snippet-1 – Donal 2014-10-08 22:54:31