У нас есть установщик (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У меня остались вопросы:
- Есть ли другой способ выполнить эту нелепую основную задачу без указания CallerId, который действительно работает?Почему он не работает без него?
- Если нет, как я могу настроить callerId для OrganizationServiceProxy на основе предоставленных мною учетных данных (без жесткого кодирования).
- Почему у меня возникают проблемы такого рода при новой установке Dynamics по умолчанию на совершенно новом сервере?