在具有AppPoolIdentity的IIS 7.5上,StructureMap失败

时间:2011-03-30 08:05:58

标签: asp.net-mvc structuremap iis-7.5

我在IIS 7.5上托管的ASP.NET MVC应用程序出现问题,该应用程序池使用AppPoolIdentity和.NET 4.0 Framework进行配置。

应用程序正常工作一段时间后突然部分控制器开始在StructureMap内抛出异常

  

System.ArgumentNullException:正在尝试   找到[MyType]类型的实例   参数名称:instance

     

在   StructureMap.InstanceCache.Get(Type pluginType, Instance instance) +376

请求的类型已正确注册(并在发生异常前一分钟正确解析)。我无法验证它是否仍然已注册,因为 WhatDoIHave也会引发异常

  

NullReferenceException:对象   引用未设置为的实例   宾语。在   StructureMap.Diagnostics.WhatDoIHaveWriter.writeInstance(InstanceRef instance) +133

看起来StructureMap的内部缓存会以某种方式损坏

当我将AppPoolIdentity更改为“真正的”本地系统用户凭据时,

问题消失。所以看起来问题出在IIS和StructureMap之间。也许应用池回收会在这里产生问题?但它配置为每1740分钟回收一次,有时在开始5分钟后失败......

1 个答案:

答案 0 :(得分:0)

嗯,问题似乎非常不同,我不知道它与应用程序池和权限的关联方式。

缺陷在GetNamedInstance<T> StructureMap的容器方法中。我请求一个未注册的命名实例,StructureMap尝试创建实例并将其添加到容器中。创建失败,但是,StructureMap在容器中注册null。遇到此null时,该命名实例的每个后续请求都会失败。

我们的解决方法是,我们使用GetAllInstances<T>代替GetNamedInstance<T>,并手动迭代T的所有实例以查找匹配的实例。