C# 使用WCF数据服务验证异常

C# 使用WCF数据服务验证异常,c#,wcf-data-services,C#,Wcf Data Services,我已经使用.Net 4.5.2和Entity Framework 6.1.3创建了一个基本的WCF数据服务和Entity Framework。在数据库中只有一个表 以下是配置: public class MyDataService : DataService<DataItemsDataContext> { // This method is called only once to initialize service-wide policies.

我已经使用.Net 4.5.2和Entity Framework 6.1.3创建了一个基本的WCF数据服务和Entity Framework。在数据库中只有一个表

以下是配置:

public class MyDataService : DataService<DataItemsDataContext>
    {
        // This method is called only once to initialize service-wide policies.
        public static void InitializeService(DataServiceConfiguration config)
        {            
            config.UseVerboseErrors = true;
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
            config.SetEntitySetAccessRule("DataItem", EntitySetRights.All);
        }
    }
当我选择表格时,会出现以下异常:

URL:
http://localhost:49570/MyDataService.svc/DataItem

内容:

<service xmlns="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom" xml:base="http://localhost:49570/MyDataService.svc/">
<workspace>
<atom:title>Default</atom:title>
<collection href="DataItem">
<atom:title>DataItem</atom:title>
</collection>
</workspace>
</service>
<m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<m:code/>
<m:message xml:lang="en-US">An error occurred while processing this request.</m:message>
<m:innererror>
<m:message>Operation could destabilize the runtime.</m:message>
<m:type>System.Security.VerificationException</m:type>
<m:stacktrace>
 at: queryable_reader(Object )
 at: System.Data.Services.Providers.ReflectionServiceProvider.GetQueryRootForResourceSet(ResourceSet container)
 at: System.Data.Services.Providers.ReflectionDataServiceProvider.GetQueryRootForResourceSet(ResourceSet resourceSet)
 at: System.Data.Services.Providers.DataServiceProviderWrapper.GetQueryRootForResourceSet(ResourceSetWrapper resourceSet)
 at: System.Data.Services.RequestUriProcessor.ComposeExpressionForEntitySet(SegmentInfo segment, IDataService service, Boolean isLastSegment, Boolean checkRights)
 at: System.Data.Services.RequestUriProcessor.ComposeExpressionForSegments(IList`1 segments, IDataService service, Boolean isCrossReferencingUri)
 at: System.Data.Services.RequestUriProcessor.ProcessRequestUri(Uri absoluteRequestUri, IDataService service, Boolean internalQuery)
 at: System.Data.Services.DataService`1.ProcessIncomingRequestUri()
 at: System.Data.Services.DataService`1.HandleRequest()
</m:stacktrace>
</m:innererror>
</m:error>

处理此请求时出错。
操作可能会使运行时不稳定。
System.Security.VerificationException异常
at:queryable_读取器(对象)
位于:System.Data.Services.Providers.ReflectionServiceProvider.GetQueryRootForResourceSet(资源集容器)
位于:System.Data.Services.Providers.ReflectionDataServiceProvider.GetQueryRootForResourceSet(ResourceSet ResourceSet)
位于:System.Data.Services.Providers.DataServiceProviderWrapper.GetQueryRootForResourceSet(ResourceSetWrapper resourceSet)
位于:System.Data.Services.RequestUriProcessor.ComposeExpressionForEntitySet(段信息段、IDataService服务、布尔isLastSegment、布尔检查权限)
at:System.Data.Services.RequestUriProcessor.ComposeExpressionForSegments(IList`1段,IDataService服务,布尔ISCrossReferenceGuri)
at:System.Data.Services.RequestUriProcessor.ProcessRequestUri(Uri绝对请求Uri、IDataService服务、布尔内部查询)
at:System.Data.Services.DataService`1.ProcessIncomingRequestUri()
at:System.Data.Services.DataService`1.HandleRequest()
可能是


这是什么原因造成的?我应该改变什么?

这似乎真的是一个bug(或者至少是一个限制性的特性)

首先,我使用EntityFramework6.1.3作为数据库ORM,出现了错误

当我切换回实体框架5.0时,服务工作正常

据此:

假设您将.NET Framework的早期版本升级到 计算机上的.NET Framework 4.5。当你使用第三方 控件时,您可能会收到System.Security.VerificationException 例外。如果满足以下条件,则会发生此问题:

  • 第三方控件使用泛型类型
  • 通过声明标记为安全透明的程序集来启用CLR验证器
我猜想,EF6.x使用泛型类型,所以它会导致问题

解决方案是使用实体框架5.0。与Entity Framework 6.x不同。

有一个Nuget软件包,该软件包应该会有所帮助,但它仍处于预发布阶段(2015/09/22)


自2013年10月起:“现在来看一些激动人心的消息:您终于可以将WCF数据服务与Entity Framework 6+结合使用了!今天我们上传一个新的NuGet包,名为。此NuGet软件包弥补了WCF Data Services 5.6.0和Entity Framework 6+之间的差距。

您是否已将其发送给Microsoft。我很难过自己遇到了这个问题,不得不降级到EF5。