尝试使用EF作为数据馈送时,PrimitiveResourceTypeMap会引发异常

时间:2015-12-01 19:50:18

标签: entity-framework sharepoint entity-framework-6 odata wcf-data-services

简短说明: 我正在尝试创建一个WFC数据服务,它将使用实体框架从db中检索数据。重要的是该服务必须托管在sharepoint服务器中。一切(差不多)都没问题,只是当我尝试从sharepoint访问已部署的服务时,我有一个例外:

服务器在处理请求时遇到错误。异常消息是'System.Data.Services.Providers.PrimitiveResourceTypeMap'的类型初始化程序'引发异常。'。请参阅服务器日志以获取更多详异常堆栈跟踪是:

at System.Data.Services.Providers.PrimitiveResourceType.get_TypeMap()at System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMetadata(ProviderMetadataCacheItem metadataCacheItem)at System.Data.Services.Providers.BaseServiceProvider.LoadMetadata(Boolean skipServiceOperations)at at System.Data.Services.Providers.EntityFrameworkDataService 1.CreateInternalProvider(Object dataSourceInstance) at System.Data.Services.DataService 1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider& metadataProviderInstance,IDataServiceQueryProvider& queryProviderInstance,Object& dataSourceInstance,Boolean& isInternallyCreatedProvider)at System.Data.Services.DataService 1.CreateProvider() at System.Data.Services.DataService 1.HandleRequest ()处于System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance,Object []输入的SyncInvokeProcessRequestForMessage(Object,Object [],Object [])的System.Data.Services.DataService`1.ProcessRequestForMessage(Stream messageBody), System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin中的Object []& outputs)(MessageRpc& r pc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

从普通网络应用程序托管的相同服务工作正常。

是否有人有类似的问题,并有一些线索?

1 个答案:

答案 0 :(得分:1)

我设法在内部部署SharePoint 2013内部创建功能齐全的WCF数据服务。我得到了提到的异常(以及许多其他人)。

功能齐全,我的意思是我的CSata和java脚本过滤器的odata请求被正确执行,并且(自动神奇地)导致对SQL Server数据库的正确形成查询。适用于http和https。

以下简要说明了使这一切工作的必要条件。

  1. 需要通过SharePoint WSP将一堆来自nuget的dll部署到GAC(这是适用于我的列表)
  2. 一个。 EntityFramework.dll 6.1.3 for .Net 4.5

    湾EntityFramework.SqlServer.dll 6.1.3 for .Net 4.5

    ℃。 Microsoft.Data.Edm.dll 5.6.2

    d。 Microsoft.Data.OData.dll 5.6.2

    即Microsoft.Data.Services.dll 5.6.2

    F。 Microsoft.Data.Services.Client.dll 5.6.2

    克。 Microsoft.OData.EntityFrameworkProvider.dll 1.0.0-beta2

    小时。 System.Spatial.dll 5.6.2

    注意:诀窍是没有直接错误,其中一些dll缺失。当GAC中没有System.Spatial.dll时,会显示问题的异常。

    1. 服务应与上述类似:

      使用System.Data.Services;   使用System.Data.Services.Providers;   使用System.ServiceModel.Activation;

            [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
            public class yourService : EntityFrameworkDataService<YourEntities>
            {
              public static void InitializeService(DataServiceConfiguration config)
              {
                config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
                config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
                config.DataServiceBehavior.MaxProtocolVersion = System.Data.Services.Common.DataServiceProtocolVersion.V3;      
      
              }
      
            }
      
    2. Svc文件:YourService.svc应该部署到ISAPI SP文件夹内的专用功能文件夹

    3. 对于http - 片段:

      <service behaviorConfiguration="WCFServicesBehavior" name=" Namespace.yourservice ">
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
      

      对于https:类似于http,但使用mexHttpsBinding绑定

      1. 在浏览器中打开您的终端以检查这是否正常 http://yoursite.local/_vti_bin/name_of_your_feature/yourservice.svc - 应该返回有关服务的信息 http://yoursite.local/_vti_bin/name_of_your_feature/yourservice.svc/Name_of_your_entitySet() - 应返回给定类型的所有实体

      2. 检查SQL Server Profiler是否将odata过滤器正确转换为SQL查询

相关问题