Несколько файлов с ранним связыванием в веб-сервисе

У меня есть служба WCF с 3 разными конечными точками, которые должны использовать разные файлы классов с ранней привязкой Dynamics CRM. Я их в отдельных пространствах имен, и удалил: [assembly: Microsoft.Xrm.Sdk.Client.ProxyTypesAssemblyAttribute()] Кажется, я не могу понять, как указать, какой файл с ранней привязкой использовать при включении прокси-типов. Я пытаюсь избежать того, чтобы каждый ранний связанный файл находился в отдельном проекте. Файлы совместно используют некоторые похожие объекты, но наиболее важно, что существуют уникальные поля и объекты, которые не существуют в организациях разработки для соответствующих конечных точек (конечная точка 1 имеет объекты, которых не существует в конечной точке 2).

1 ответ

Решение

Вам нужно иметь атрибут ProxyTypesAssemblyAttribute, определенный как минимум в одном файле. На самом деле не имеет значения, какой файл, так как это атрибут сборки, а не атрибут класса. Вам нужно убедиться, что вы не пытаетесь использовать тип для вызова IOrganizationService, которого нет в этой организации.

Обновление 1

Мое понимание того, как работает ProxyTypesAssemblyAttribute, было неверным. Очевидно, вы не можете иметь более одного класса в одной сборке с одинаковыми Microsoft.Xrm.Sdk.Client.EntityLogicalNameAttribute(string) атрибут (строковое значение должно быть уникальным).

У вас есть два возможных решения:

  1. Создайте отдельные сборки.
  2. Используйте одно и то же пространство имен для обоих, но не дублируйте классы, создавая класс для каждой сущности для каждой организации CRM (именно здесь https://xrmearlyboundgenerator.codeplex.com/ становится очень полезным). Любые сущности, которые существуют в обоих, вам придется либо
    • Вручную объедините все различия (и когда вы вызываете это, вам нужно знать, что является действительным, а что - недействительным для каждой организации! Т. Е. Если у сущности контакта Org 1 есть поле ShirtSize, а у организации 2 нет, вы не может заполнить этот атрибут и попытаться вставить в Org 2),
    • Используйте файл из одной организации и удалите другую.

Второе возможное решение будет работать, но я не думаю, что оно жизнеспособно.

Другие вопросы по тегам