【问题标题】:Dynamics CRM SDK in C# connect with Invalid PasswordC# 中的 Dynamics CRM SDK 连接无效密码
【发布时间】:2015-09-10 06:02:04
【问题描述】:

我正在开发一个 C# 应用程序,用于从 Dynamics CRM Online 检索数据。为了验证 Dynamics CRM 的用户名和密码,我使用 WhoAmIRequest。在发生以下情况之前,它可以正常工作。

1) 使用有效 URL、用户名和密码连接 Dynamics CRM。

2) 释放组织服务对象。

3) 使用有效 URL、用户名和无效密码重新连接 Dynamics CRM。

在这种情况下,WhoAmIRequest 也成功执行。但它应该会失败。

下面是我正在使用的代码:

private void button6_Click(object sender, EventArgs e)
    {
        CrmConnection connection;
        string url = "Url=https://mytest.crm.dynamics.com ;Username=mytest@mytest.onmicrosoft.com; Password=goodpassword;";
        connection = CrmConnection.Parse(url);
        OrganizationService orgService = new OrganizationService(connection);
        Guid userid = ((WhoAmIResponse)orgService.Execute(new WhoAmIRequest())).UserId;
        if (userid == null)
            MessageBox.Show("Login Failed");
        else
            MessageBox.Show("Login Success");
        orgService.Dispose();

        url = "Url=https://mytest.crm.dynamics.com ;Username=mytest@mytest.onmicrosoft.com; Password=badpassword;";
        connection = CrmConnection.Parse(url);
        orgService = new OrganizationService(connection);
        userid = ((WhoAmIResponse)orgService.Execute(new WhoAmIRequest())).UserId;
        if (userid == null)
            MessageBox.Show("Login Failed");
        else
            MessageBox.Show("Login Success");
        orgService.Dispose();

        url = "Url=https://mytest.crm.dynamics.com ;Username=mytest@mytest.onmicrosoft.com; Password=goodpassowrd;";
        connection = CrmConnection.Parse(url);
        orgService = new OrganizationService(connection);
        userid = ((WhoAmIResponse)orgService.Execute(new WhoAmIRequest())).UserId;
        if (userid == null)
            MessageBox.Show("Login Failed");
        else
            MessageBox.Show("Login Success");
        orgService.Dispose();
    }

上面代码的输出显示3个消息框

登录成功

登录成功

登录成功

但它应该显示为

登录成功

登录失败

登录成功

我也尝试了NicknowNeed to validate CRM credentials 问题中建议的答案,但没有任何帮助

我们将不胜感激。

感谢和问候 文卡特桑

【问题讨论】:

  • 当我尝试这样做时,它会要求我提供凭据,您是否在该响应中获得了有效用户?
  • 感谢 Sxntk 的回复,这不是我刚刚修改为某些无效的有效凭证,因此我使用的凭证仅限于共享。您可以在动态 crm 中创建试用帐户以进行测试。如果您需要证书,请告诉我。
  • 我在本地的 crm 上尝试这个,所以当我处理服务并尝试使用错误的密码进行身份验证时,会弹出活动目录,所以如果我不提供正确的凭据,它会失败.
  • 感谢 Sxntk 的回复,也许你是对的,我只用它来连接在线版本。我没有在本地测试它。

标签: c# dynamics-crm crm microsoft-dynamics


【解决方案1】:

问题出在您的检查中:

if (userid == null)

UserId是Guid,Guid是struct,struct是值类型,值类型永远不会是null,所以check总是返回false。

更多信息请看这里Guid == null should not be allowed by the compiler

我建议改用以下检查:

if (userid == Guid.Empty)

【讨论】:

  • 感谢詹姆斯的建议,我已经尝试了您的建议,得到了相同的结果。它仅在以下情况下接受无效密码。 1) 使用有效 URL、用户名和密码连接 Dynamics CRM。 2) 处置组织服务对象。 3) 使用有效 URL、用户名和无效密码重新连接 Dynamics CRM。当我们第一次尝试使用无效密码登录时,它会正确显示身份验证失败消息。
【解决方案2】:

您需要更改此行,因为这是一个静态方法:

connection = CrmConnection.Parse(url);

类似于:

connection = new CrmConnection();
connection.ServiceUri = new Uri("https://mytest.crm.dynamics.com");
var clientCredentials = new ClientCredentials();
clientCredentials.UserName.UserName = "mytest@mytest.onmicrosoft.com";
clientCredentials.UserName.Password = "goodpassword";
connection.ClientCredentials = clientCredentials;

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,我找到了解决方案!所以这是我的连接字符串:

    Url=mytestcrm.crm.dynamics.com;Username=myUser@MyDomain.com;Password=MyPassword;authtype=Office365;RequireNewInstance=True

    注意连接字符串末尾的“RequireNewInstance=True”,它可以解决问题。

    试一试,它会解决问题的。

    【讨论】:

      猜你喜欢
      • 2018-12-03
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多