c# - 在服务器上托管时出现 MEF 异常

标签 c# wcf mef

我正在使用 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/

相关文章:

c# - 如何从 MySQL 数据库中选择数据以用于组合框选择?

c# - 使用 wsDualHttpBinding 通过 Internet 连接到 WCF 服务超时

c# - 数组的反序列化不支持 JSON 反序列化类型

C#:WinRT 中的托管扩展性框架

c# - 使用 CompositionScopeDefinition 在 MEF 中定义范围

C# - MessageBox - 资源和换行符中的消息本地化

C# - Windows 服务 - 远程 WMI 查询引发错误 : RPC not found

c# - 如何使用 Moq 为异步函数抛出异常

c# - 从 WCF 服务转换类型

c# - 如何在 MEF 中使用事件聚合器?