Как создать одно решение.net для crm 2011, которое подключается к двум различным служебным контекстам, используя ранний связанный код
Я хочу создать консольное приложение VS 2010 C#, которое подключается к двум (или более) различным служебным контактам / клиентам CRM 2011. Я хочу иметь возможность обновлять данные в одном с данными из другого.
Если я создаю два разных ранних связанных класса с помощью crmsvcutil, я получаю ошибку компилятора: "Дублировать" атрибут "Microsoft.Xrm.Sdk.Client.ProxyTypesAssemblyAttribute" "
Если я объединяю два файла, он компилируется, но затем я получаю ошибку во время выполнения: "Тип прокси с учетной записью имени был определен несколькими типами".
Как это можно сделать?
2 ответа
Создайте отдельный проект библиотеки для каждого набора классов с ранней привязкой и поместите один из файлов crmsvcutil в каждую библиотеку (при необходимости добавьте ссылки на сборки). Теперь в консольном приложении добавьте ссылки на библиотеки.
Допустим, я создал два библиотечных проекта, которые компилируются в Proxy1.dll и Proxy2.dll. Корневыми пространствами имен для каждой библиотеки являются Proxy1 и Proxy2. В ConsoleApp.exe я добавляю две ссылки и следующее:
var url1 = new Uri(".../XRMServices/2011/Organization.svc");
var proxy1 = new OrganizationServiceProxy(url1, null, null, null);
proxy1.EnableProxyTypes(Assembly.Load("Proxy1")); // Proxy1.dll
var url2 = new Uri(".../XRMServices/2011/Organization.svc");
var proxy2 = new OrganizationServiceProxy(url2, null, null, null);
proxy2.EnableProxyTypes(Assembly.Load("Proxy2")); // Proxy2.dll
using (var context1 = new Proxy1.Proxy1ServiceContext(proxy1))
using (var context2 = new Proxy2.Proxy2ServiceContext(proxy2))
{
var accounts1 = context1.AccountSet;
var accounts2 = context2.AccountSet;
foreach (var account in accounts1) Console.WriteLine("1: {0}: {1}", account.GetType(), account.Id);
foreach (var account in accounts2) Console.WriteLine("2: {0}: {1}", account.GetType(), account.Id);
}
Вы можете реализовать интерфейс ICustomizeCodeDomService и отключить автоматическую генерацию атрибута ProxyTypesAssemblyAttribute. Пока они находятся в разных пространствах имен, у вас будет одна DLL, и вам не придется загружать две отдельно.
** ОБНОВИТЬ **
Это не будет работать. Пожалуйста, смотрите /questions/39004901/neskolko-fajlov-s-rannim-svyazyivaniem-v-veb-servise/39004908#39004908