尝试获取类型为Autoscaler的实例时出现激活错误,键“”

时间:2013-01-25 06:07:55

标签: azure-diagnostics

异常: 尝试获取类型为Autoscaler的实例时出现激活错误,键“”

堆栈跟踪:   位于D:\ Windows Azure Cloud \ Samples \ Windows Azure HelloWorld Sample \ C#\ HelloWorld_WebRole \ WebRole.cs:第43行中的IUSCRM.WebRole.OnStart()    在Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeRoleInternal(RoleType roleTypeEnum)    在Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeRole(RoleType roleType)    在Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.b__0()

内部例外: 依赖项的解析失败,type =“Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.Autoscaler”,name =“(none)”。 在解决时发生异常。

异常是:InvalidOperationException - 无法构造String类型。您必须配置容器以提供此值。

在例外时,容器是:

解决Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.Autoscaler,(无)   解析构造函数Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.Autoscaler(System.String dataPointsStoreStorageAccountConnectionString,System.String dataPointsTableName,System.TimeSpan ruleEvaluationRate,Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.Rules.IRulesStore rulesStore,Microsoft的参数“dataPointsStoreStorageAccountConnectionString” .Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.ServiceModel.IServiceInformationStore serviceInformationStore,Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.DataPointsCollection.IDataPointsCollectorsProvider dataPointsCollectorsProvider,Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.IExecutionLease executionLease,Microsoft.Practices.EnterpriseLibrary.WindowsAzure。 Autoscaling.Logging.ILogger logger,Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.Scaling.IServiceManagementRequestTracker tracker,Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Au toscaling.Scaling.IScaler scaler)     解析System.String,(无)

来源: Microsoft.Practices.Unity

堆栈跟踪:    at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t,Object existing,String name,IEnumerable 1 resolverOverrides) at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, String name, IEnumerable 1 resolverOverrides)    在Microsoft.Practices.Unity.UnityContainer.Resolve(Type t,String name,ResolverOverride [] resolverOverrides)    在Microsoft.Practices.Unity.UnityServiceLocator.DoGetInstance(类型serviceType,String key)    at c:\ Home \ Chris \ Projects \ CommonServiceLocator \ main \ Microsoft.Practices.ServiceLocation \ ServiceLocatorImplBase.cs中的Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(类型serviceType,String key):第49行

内部例外: 无法构造String类型。您必须配置容器以提供此值。

来源: Microsoft.Practices.Unity

堆栈跟踪:    在Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.GuardTypeIsNonPrimitive(IBuilderContext context,SelectedConstructor selectedConstructor)    在Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.PreBuildUp(IBuilderContext context)    在Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)    在Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlanCreatorPolicy.CreatePlan(IBuilderContext context,NamedTypeBuildKey buildKey)    在Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)    在Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)    在Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey)    在Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve(IBuilderContext context)    在BuildUp_Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.Autoscaler(IBuilderContext)    在Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)    在Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)    在Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)    在Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t,Object existing,String name,IEnumerable`1 resolverOverrides)

在过去的两天里,我已经遇到了这个例外,所以有人请帮助......

1 个答案:

答案 0 :(得分:0)

最后,我找到了上述问题的解决方案,如下所示,

如果没有app.config在Web角色中使用RoleEntryPoint实现,许多人已经采用了众所周知的解决方法,就是在他们的项目中包含一个WaIISHost.exe.config文件。可以在此处找到此方法的背景和内部详细信息。如果您正在使用此方法,并且已移至最新版本的Windows Azure SDK版本1.8,您可能已经注意到它不再像以前版本那样有效。

我们最近有一些客户使用这种方法,现在迁移到Windows Azure SDK 1.8,却发现他们在WaIISHost.exe.config中的应用程序设置不再可用于RoleEntryPoint实现中运行的代码。不,流程名称没有改变,稍后我会找到一些时间来了解我们发现的更多细节。目前我只想提供另一种适用于SDK 1.8的解决方法,适用于那些可能已经运行过的人。有些情况,例如某些第三方依赖关系阻止我们将所有配置设置移动到.cscfg,甚至代码,并且某些设置实际上不需要在那里。

解决方法。它实际上非常简单。

基本上,我们将WaIISHost.exe.config重命名为包含Web项目中RoleEntryPoint实现的输出程序集的名称,当然还添加了.config扩展名。因此,对于名为“MyApp.Web”的Web应用程序项目和“MyApp.Web”的程序集名称,我们将WaIISHost.exe.config重命名为MyApp.Web.dll.config。如果要将此文件添加到新项目,请不要忘记将“复制到输出目录”属性设置为“始终复制”。

以下链接是此解决方案的来源,

http://www.fullscale180.com/post/2012/11/08/WaIISHostexeconfig-in-Web-Roles-does-not-work-in-Windows-Azure-SDK-18.aspx