Динамика 2011 ОрганизацияServiceProxy Аутентификация - PullRequest
2 голосов
/ 21 сентября 2011

У нас есть установщик (vdproj msi), который устанавливает управляемый пакет Dynamics 2011 (zip-файл, хранящийся как встроенный ресурс) с использованием OrganizationServiceProxy.Он создает OrganizationServiceProxy следующим образом:

var organizationUri = new Uri(string.Format(
  ORGANIZATION_SERVICE_URI_TEMPLATE, configuration.WebServiceUrl, 
  configuration.CrmOrganizationName));

var credentials = new ClientCredentials();
credentials.Windows.ClientCredential = GetNetworkCredentials();

credentials.UserName.UserName = credentials.Windows.ClientCredential.UserName;
credentials.UserName.Password = credentials.Windows.ClientCredential.Password;

var client = new OrganizationServiceProxy(organizationUri, null, credentials, null)
  { Timeout = TimeSpan.FromMilliseconds(WEB_SERVICE_TIMEOUT) };

return client;

и выполняет запрос ImportSolutionRequest

var importSolutionRequest = new ImportSolutionRequest
{
  CustomizationFile = Resources.DynamicsSolution,
  ImportJobId = Guid.NewGuid()
};
service.Execute(importSolutionRequest);

. Это приводит к чудесной непонятной ошибке:

Подключаемый модуль веб-службыв организации с ошибкой в ​​идентификаторе организации: 510c06a3-6ee9-43a7-ba54-677054348813;SdkMessageProcessingStepId: 1b830950-e106-4ee1-b3fd-d348cb65dc8d;EntityName: нет;Стадия: 30;MessageName: ImportSolution;AssemblyName: Microsoft.Crm.Extensibility.InternalOperationPlugin, Microsoft.Crm.ObjectModel, версия = 5.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35;ClassName: Microsoft.Crm.Extensibility.InternalOperationPlugin;Исключение: необработанное Исключение: System.Reflection.TargetInvocationException: Исключение было сгенерировано целью вызова.в System.RuntimeMethodHandle._InvokeMethodFast (метод IRuntimeMethodInfo, объектная цель, аргументы Object [], SignatureStruct & sig, метод MethodAttributes, методAttributes, RuntimeType typeOwner) в системном объекте.Культура CultureInfo, логическое skipVisibilityChecks) в System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, связыватель Binder, параметры Object [], CultureInfo culture) в System.Web.Services.Protocols.LogicalMethodInfo.Invoke (объект]) в Microsoft.Crm.Extensibility.InternalOperationPlugin.Execute (IServiceProvider serviceProvider) в Microsoft.Crm.Extensibility.V5PluginProxyStep.ExecuteInternal (контекст PipelineExecutionContext) в Microsoft.Crm.Extensibility.VersionedPluginTextextExExecution.ExceptionIntection.Exception.Extection.Exception.Globalization.CultureNotFoundException: культура не поддерживается.Имя параметра: культура 0 (0x0000) является недопустимым идентификатором культуры.в System.Globalization.CultureInfo.InitializeFromCultureId (культура Int32, булево использование useUserOverride) в Microsoft.Crm.Tools.ImportExportPublish.SolutionPackageUpgrade..ctor (контекст ExecutionContext) в Microsoft.Crm.Tools.ImportExport.lempHort ()overwriteUnmanagedCustomizations, логическое значение publishWorkflows, Byte [] сжатыйCustomizationFile, логическая настройка, версия существующиеDatabaseVersion, контекст ExecutionContext, логическое значение extractAllFiles) в Microsoft.Crm.Tools.ImportExportPublish.ImportXml..ctor, BooleansedFormBoolean convertToManaged, контекст ExecutionContext) в Microsoft.Crm.WebServices.ImportXmlService.ImportSolution (логическое overwriteUnmanagedCustomizations, логическое значение publishWorkflows, Byte [] customizationFile, Guid importJobId * логические * 101 * часы

контекста выполнения> 1012 * контекста выполнения> 1010 * контекста исполнения> 1011 нескольких контекста)исследования иРазбирая внутренние библиотеки Microsoft Dynamics (было бы забавно, если бы не было так грустно, что мне нужно было это сделать), я обнаружил, что CallerId в ExecutionContext входящего запроса был пуст (даже если запрос аутентифицирован правильно с использованием предоставленных учетных данных).

Итак, я искал SystemUserId, который я хочу использовать, из таблицы SystemUser и указал

client.CallerId = Guid.Parse("94DB2FFC-DBDE-E011-95D5-005056AF0052");

И вот, после этого ImportSolutionRequest успешно завершился.

IУ меня остались вопросы:

  1. Есть ли другой способ выполнить эту нелепую основную задачу без указания CallerId, который действительно работает?Почему он не работает без него?
  2. Если нет, как я могу настроить callerId для OrganizationServiceProxy на основе предоставленных мною учетных данных (без жесткого кодирования).
  3. Почему у меня возникают проблемы такого рода при новой установке Dynamics по умолчанию на совершенно новом сервере?

1 Ответ

1 голос
/ 21 сентября 2011

У меня нет большого опыта программного импортирования решения, поэтому я не могу ответить 1. Для вопроса 2, я думаю, вы можете использовать WhoAmIRequest .Что касается 3, я не уверен, что классифицировал бы это как проблему, пока не получу ответ на 1. :)

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