无法在 visual studio 2012 中添加对 Dynamics 365 crm 的服务引用

Unable to add a service reference to Dynamics 365 crm in visual studio 2012

我正在尝试使用以下 API https://[Organization].api.crm8.dynamics.com/api/data/v8.2/ 添加对 Dynamics 365 CRM 的服务引用,但每次我收到此 window 时都要求我提供凭据....

我尝试使用我用来登录 crm 的凭据...但它们不起作用...有人可以告诉我应该使用哪个凭据吗?..

从外观上看,您正在尝试通过 Dynamics 365 上下文之外的应用程序进行身份验证。如果您想通过 Web API 通过这种方式进行身份验证,则必须连接到 Microsoft Dynamics 365使用 OAuth 的 Web 服务并使用 ADAL

进行身份验证

https://msdn.microsoft.com/en-us/library/gg327838.aspx

这是有关如何操作的演练

https://msdn.microsoft.com/en-us/library/mt622431.aspx

补充说明:

如果您使用的是 CRM 2013 SDK,您可能需要更新到 6.1.2 以获得 Dynamics 365 支持

https://blogs.msdn.microsoft.com/crm/2017/02/01/dynamics-365-sdk-backwards-compatibility/

您究竟为什么要尝试添加对 CRM 网络服务的引用?假设您想从服务器端代码访问 CRM,您需要做的是:

  1. 添加对核心 CRM SDK 程序集的引用(Microsoft.Crm.Sdk.Proxy.dll 和 Microsoft.Xrm.Sdk.dll)。您可以从可下载的 SDK 中获取它们,也可以只添加 "Microsoft.CrmSdk.CoreAssemblies" NuGet 包。
  2. 完成此操作后,您将能够使用 CRM 编写代码 "talking"。但是您缺少的是实际的 "connection"。有几种获取它的方法,但最简单的方法是使用 Xrm 工具助手 class,此处有描述 - https://msdn.microsoft.com/en-us/library/mt608573.aspx。您需要引用所需的程序集或使用 "Microsoft.CrmSdk.XrmTooling.CoreAssembly" NuGet 包。

完成所有这些后,您将能够成功地针对 Dynamics CRM 进行编码。

CrmServiceClient crmSvc = new CrmServiceClient(ConfigurationManager.ConnectionStrings["MyCRMServer"].ConnectionString);

IOrganizationService orgService = crmSvc.OrganizationServiceProxy;

// Who am I?
WhoAmIResponse whoAmIResp = orgService.Execute(new WhoAmIRequest()) as WhoAmIResponse;
Guid myUserId = whoAmIResp.UserId;

// Get all accounts starting with 'A'
QueryExpression query = new QueryExpression("account");
query.ColumnSet = new ColumnSet("accountid", "name");
query.Criteria.AddCondition("name", ConditionOperator.BeginsWith, "a");

EntityCollection ecoll = orgService.RetrieveMultiple(query);

foreach(Entity account in ecoll.Entities)
{
    if(account.Attributes.Contains("name"))
    {
        Console.WriteLine((string)account["name"]);
    }
}

// Update some account
Entity accountToUpdate = new Entity("account");
accountToUpdate["accountid"] = new Guid("_some_guid_here");
accountToUpdate["name"] = "new name";

orgService.Update(accountToUpdate);

如果您想使用类型安全的方法,您需要生成一个代理 class - 如此处所述:https://msdn.microsoft.com/en-us/library/gg327844.aspx

之后你就可以这样写代码了:

DataContext data = new DataContext(orgService);
// DataContext is the name of the service context, as defined in the CrmScv tool

var myAccountData = (from a in data.AccountSet
                        where a.Address1_Telephone1 == "12312313"
                        select new
                        {
                            a.AccountId,
                            a.Name,
                            a.EMailAddress1,
                            a.PrimaryContactId
                        }).First();

Contact contactToUpdate = new Contact()
{
    ContactId = myAccountData.PrimaryContactId.Id,
    EMailAddress1 = myAccountData.EMailAddress1
};

orgService.Update(contactToUpdate);

...这更好,更不容易出错。