Почему именно вы пытаетесь добавить ссылку на веб-службы CRM? Предполагая, что вы хотите получить доступ к CRM с сервером коды на стороне, что вам нужно сделать, это:
- Добавить ссылки на SDK сборки ядра CRM (Microsoft.Crm.Sdk.Proxy.dll и Microsoft.Xrm.Sdk.dll). Вы можете получить их из загружаемого SDK или просто добавить пакет NuGet «Microsoft.CrmSdk.CoreAssemblies».
- После этого вы сможете написать код «говорить» с CRM. Но то, что вам не хватает, - это фактическое «соединение». Существует несколько способов его получения, но проще всего использовать вспомогательный класс Xrm Tooling, описанный здесь - https://msdn.microsoft.com/en-us/library/mt608573.aspx. Вам нужно будет ссылаться на необходимые сборки или использовать пакет NuGet «Microsoft.CrmSdk.XrmTooling.CoreAssembly».
После выполнения всего этого вы сможете успешно выполнить кодовое сопоставление с 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);
Если вы хотите использовать безопасный подход типа, вам необходимо сгенерировать прокси-класс - как описано здесь: 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);
... который намного приятнее и менее подвержен ошибкам.