簡體   English   中英

使用WCF數據服務的VerificationException

[英]VerificationException with WCF Data Services

我使用.Net 4.5.2和Entity Framework 6.1.3創建了一個帶有實體框架的基本WCF數據服務。 在數據庫中只有一個表。

這是配置:

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/

內容:

<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>

當我選擇表時,我得到以下異常:

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

內容:

<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>

它可能是一些.Net錯誤

什么可能導致這個? 我應該改變什么?

它似乎確實是一個錯誤(或至少是一個限制性功能)。

首先,我使用Entity Framework 6.1.3作為數據庫ORM,並且存在錯誤。

當我切換回Entity Framework 5.0時 ,服務正常工作。

根據這篇知識庫文章

假設您在計算機上將早期版本的.NET Framework升級到.NET Framework 4.5。 當您使用某些第三方控件時,您可能會收到System.Security.VerificationException異常。 如果滿足以下條件,則會出現此問題:

  • 第三方控件使用泛型類型。
  • 通過聲明標記為安全透明的程序集來啟用CLR驗證程序。

我認為,EF 6.x使用泛型類型,因此它會導致問題。

解決方法解決方案是使用Entity Framework 5.0。 而不是實體框架6.x.

http://blogs.msdn.com/b/odatateam/archive/2013/10/02/using-wcf-data-services-5-6-0-with-entity-framework-6.aspx有一個Nuget包應該有所幫助,但它仍處於預發布狀態(2015/09/22)。

從2013年10月開始:“現在有一些令人興奮的消息:您最終可以使用帶有Entity Framework 6+的WCF數據服務!今天我們正在上傳一個名為WCF數據服務實體框架提供商的新NuGet包。這個NuGet包填補了WCF之間的空白Data Services 5.6.0和Entity Framework 6+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM