我正在使用 MEF 动态加载 wcf 服务。 MyInstanceProvider 属于我的服务所在的同一个物理库。代码适用于我的开发框 IIS7(64 位),但在我的测试框(32 位)上抛出此异常。在我引入 MEF 之前工作正常。
我很困惑为什么会这样?
public object GetInstance(InstanceContext context)
{
var lazyInstance = _container.GetExports(_serviceType, null, null).FirstOrDefault();
if (lazyInstance == null) throw new InvalidOperationException();
return lazyInstance.Value;
}
异常
System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
at System.Reflection.RuntimeModule.GetTypes()
at System.Reflection.Assembly.GetTypes()
at System.ComponentModel.Composition.Hosting.AssemblyCatalog.get_InnerCatalog()
at System.ComponentModel.Composition.Hosting.AssemblyCatalog.GetExports(ImportDefinition definition)
at System.ComponentModel.Composition.Hosting.DirectoryCatalog.<>c__DisplayClass1.<GetExports>b__0(ComposablePartCatalog catalog)
at System.Linq.Enumerable.<SelectManyIterator>d__14`2.MoveNext()
at System.ComponentModel.Composition.Hosting.CatalogExportProvider.GetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition)
at System.ComponentModel.Composition.Hosting.ExportProvider.TryGetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition, IEnumerable`1& exports)
at System.ComponentModel.Composition.Hosting.ExportProvider.GetExports(ImportDefinition definition, AtomicComposition atomicComposition)
at System.ComponentModel.Composition.Hosting.AggregateExportProvider.GetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition)
at System.ComponentModel.Composition.Hosting.ExportProvider.TryGetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition, IEnumerable`1& exports)
at System.ComponentModel.Composition.Hosting.ExportProvider.TryGetExports(ImportDefinition definition, AtomicComposition atomicComposition, IEnumerable`1& exports)
at System.ComponentModel.Composition.Hosting.CompositionContainer.GetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition)
at System.ComponentModel.Composition.Hosting.ExportProvider.TryGetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition, IEnumerable`1& exports)
at System.ComponentModel.Composition.Hosting.ExportProvider.GetExports(ImportDefinition definition, AtomicComposition atomicComposition)
at System.ComponentModel.Composition.Hosting.ExportProvider.GetExportsCore(Type type, Type metadataViewType, String contractName, ImportCardinality cardinality)
at System.ComponentModel.Composition.Hosting.ExportProvider.GetExports(Type type, Type metadataViewType, String contractName)
at MyInstanceProvider.GetInstance(InstanceContext context) in C:\CodeWorkspace\IDATT\Code\IDATT.Web.Services\MyInstanceProvider.cs:line 21
at MyInstanceProvider.GetInstance(InstanceContext context, Message message) in C:\CodeWorkspace\IDATT\Code\IDATT.Web.Services\MyInstanceProvider.cs:line 30
at System.ServiceModel.Dispatcher.InstanceBehavior.GetInstance(InstanceContext instanceContext, Message request)
at System.ServiceModel.InstanceContext.GetServiceInstance(Message message)
at System.ServiceModel.Dispatcher.InstanceBehavior.EnsureServiceInstance(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</
编辑:
关注这篇博文以获取详细信息: http://weblogs.asp.net/kencox/archive/2010/08/24/fed-up-with-system-data-metadata-edm-objectitemassemblyloader.aspx
这是我看到的:
Could not load file or assembly 'System.ServiceModel.DomainServices.EntityFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
我知道这是 RIA 服务。我确实使用了那些但不是在这个地方,所以这很奇怪。但不管怎么说。为什么它提示这个图书馆?我应该将它们添加为引用并放入 Bin 文件夹中吗?
编辑2(解决方案) 好的,在我正在使用 RIA 服务的解决方案中的某个地方(甚至没有使用,只是添加了引用) 因此,不知何故,所有 MEF 都需要那些 RIA 引用。而且,RIA 服务不是 .NET 框架的一部分,所以我必须这样做:http://blogs.msdn.com/b/deepm/archive/2010/03/15/are-you-a-hoster-and-want-to-support-ria-services.aspx
现在一切正常
最佳答案
我会检查该机器上是否安装了 WCF RIA 服务,然后我会检查您是否正在使用 System.ServiceModel.DomainServices.EntityFramework 程序集中(或依赖于任何类型)的任何类型。
关于c# - 在服务器上托管时出现 MEF 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7149578/