тип прокси с именем account был определен другой сборкой - PullRequest
9 голосов
/ 21 декабря 2011
  • В нашей локальной системе crm 2011 работает 2 организации.
  • Мы создали ранние связанные классы для обеих организаций.
  • Один из наших плагинов выдает ошибку «тип прокси с именем, учетная запись которого определена другой сборкой» при деактивации учетной записи.
  • Этот плагин ссылается только на один из ранних связанных dll.

Как заставить систему CRM уважать пространство имен этих ссылок.
Я пробовал несколькоэлементы, которые появляются из Google, и ни один из них не работает.

Поскольку вы можете воспроизвести это с помощью двух ванильных органов, я хотел бы представить, что есть что-то ВНЕ вне слоя кода, который мы можем сделать, не возвращаясь и не реорганизуя кучу кодаза 2 орга.

Спасибо,
Джон

Ответы [ 5 ]

8 голосов
/ 10 октября 2012

Проблема на самом деле в том, что WCF пытается десериализовать ответ сервера и не может определить правильный тип.Лучший способ решить эту проблему - передать текущую сборку с помощью Assembly.GetExecutingAssembly () в ProxyTypesBehavior () при создании прокси-сервера.

using (serviceProxy = new OrganizationServiceProxy(config.OrganizationUri,
                config.HomeRealmUri,
                config.Credentials,
                config.DeviceCredentials))
        {
            // This statement is required to enable early-bound type support.
            serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior(Assembly.GetExecutingAssembly()));
        }
4 голосов
/ 26 октября 2015

Вы можете столкнуться с этой проблемой, когда ссылаетесь на разные сборки, содержащие прокси-классы, то есть одну сборку, обертывающую SDK сервера (Microsoft.Xrm.Sdk), и другую сборку, обертывающую SDK клиента (Microsoft.Xrm.Sdk.Client).В таком случае, кажется, необходимо сообщить OrganizationServiceProxy, какую сборку следует использовать для разрешения прокси-классов.

Это должно помочь:

var credentials = new ClientCredentials();
credentials.Windows.ClientCredential = new System.Net.NetworkCredential(userName, password, domain);

var proxy = new OrganizationServiceProxy(new Uri(discoveryUrl), null, credentials, null);
proxy.EnableProxyTypes(typeof(CrmServiceContext).Assembly);

var context = CrmServiceContext(proxy);

Важным является вызов EnableProxyTypes путем передачи правильной сборки.Я видел другое решение, использующее CrmConnection , но CrmConnection доступно только в клиентском SDK, что означает, что вы не можете создать экземпляр «server-OrganizationServiceProxy» таким образом.EnableProxyTypes (сборка сборки) работает для обеих сторон.

Надеюсь, это поможет.

С уважением, MH

0 голосов
/ 30 сентября 2015

добавление Assembly.GetExecutingAssembly () решит мою проблему, вам также нужно добавить using System.Reflection;

спасибо

0 голосов
/ 20 февраля 2013

Я обнаружил, что добавление Assembly.GetExecutingAssembly () решило проблему.

0 голосов
/ 21 декабря 2011

это обычно означает, что существует одна или несколько сборок с одним и тем же именем метода или свойством, чтобы исправить это, используйте полное имя сборки .. например, при использовании System.IO, например, если у вас был метод с именем так же, как в вашем коде класса, который конфликтует с System.IO .... вы бы написали свое исправление как thisObject.System.IO.Path (----) = что-то, например ... это имеет смысл ..?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...