我们有一个安装程序(vdproj msi),它使用OrganizationServiceProxy安装Dynamics 2011托管软件包(作为嵌入式资源存储的zip文件)。它按如下方式构造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);
这会产生奇妙的错误:
WebI服务插件在OrganizationId中失败:510c06a3-6ee9-43a7-ba54-677054348813; SdkMessageProcessingStepId:1b830950-e106-4ee1-b3fd-d348cb65dc8d; EntityName:无;阶段:30; MessageName:ImportSolution; AssemblyName:Microsoft.Crm.Extensibility.InternalOperationPlugin,Microsoft.Crm.ObjectModel,Version = 5.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35; ClassName:Microsoft.Crm.Extensibility.InternalOperationPlugin;异常:未处理的异常:System.Reflection.TargetInvocationException:调用的目标抛出了异常。 在System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo方法,Object target,Object []参数,SignatureStruct& sig,MethodAttributes methodAttributes,RuntimeType typeOwner) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object [] parameters,CultureInfo culture,Boolean skipVisibilityChecks) 在System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo文化) 在System.Web.Services.Protocols.LogicalMethodInfo.Invoke(Object target,Object [] values) 在Microsoft.Crm.Extensibility.InternalOperationPlugin.Execute(IServiceProvider serviceProvider) 在Microsoft.Crm.Extensibility.V5PluginProxyStep.ExecuteInternal(PipelineExecutionContext context) 在Microsoft.Crm.Extensibility.VersionedPluginProxyStepBase.Execute(PipelineExecutionContext context) 内部异常:System.Globalization.CultureNotFoundException:不支持Culture。 参数名称:culture 0(0x0000)是无效的区域性标识符。 在System.Globalization.CultureInfo.InitializeFromCultureId(Int32 culture,Boolean useUserOverride) 在Microsoft.Crm.Tools.ImportExportPublish.SolutionPackageUpgrade..ctor(ExecutionContext context) 在Microsoft.Crm.Tools.ImportExportPublish.RootImportHandler..ctor(ImportXml parent,Boolean overwriteUnmanagedCustomizations,Boolean publishWorkflows,Byte [] compressedCustomizationFile,Boolean setup,Version existingDatabaseVersion,ExecutionContext context,Boolean extractAllFiles) at Microsoft.Crm.Tools.ImportExportPublish.ImportXml..ctor(Boolean overwriteUnmanagedCustomizations,Boolean publishWorkflows,Byte [] compressedCustomizationFile,Guid importJobId,Boolean convertToManaged,ExecutionContext context) at Microsoft.Crm.WebServices.ImportXmlService.ImportSolution(Boolean overwriteUnmanagedCustomizations,Boolean publishWorkflows,Byte [] customizationFile,Guid importJobId,Boolean convertToManaged,ExecutionContext context)
经过几个小时的研究和反汇编Microsoft Dynamics内部dll(如果不是那么悲伤我会这么做会很有趣),我发现传入请求的ExecutionContext中的CallerId是空的(即使请求使用提供的凭据进行身份验证。
所以,我从SystemUser表中查找了想要使用的SystemUserId并指定了
client.CallerId = Guid.Parse("94DB2FFC-DBDE-E011-95D5-005056AF0052");
请注意,ImportSolutionRequest在执行此操作后成功。
我留下了问题:
答案 0 :(得分:1)
我没有太多以编程方式导入解决方案的经验,因此我无法回答1.对于问题2,我认为您可以使用WhoAmIRequest。至于3,我不确定在得到1的答案之前我将其归类为问题。:)