我的目标很简单。使用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行会引发异常。这有一个问题很好。假设用户输入了有效凭据并成功单击了“测试连接”。现在让我们说他们将密码更改为错误,然后单击“测试连接”。在这种情况下,它仍然成功。它似乎使用以前存在的连接。有没有办法消除或清除以前的连接,以便当我尝试使用无效值时会抛出异常?
同样,我的总体目标是验证登录值。无论什么能提供实现这一目标的最佳方式,我所追求的是什么。谢谢!
答案 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