【问题标题】:PrimitiveResourceTypeMap throws exception when trying to use EF as data feed尝试使用 EF 作为数据源时 PrimitiveResourceTypeMap 抛出异常
【发布时间】:2015-12-01 19:50:18
【问题描述】:

简短说明: 我正在尝试创建一个 WFC 数据服务,它将使用实体框架从数据库中检索数据。重要的是服务必须托管在共享点服务器中。一切(几乎)都很好,除了当我尝试从共享点访问部署的服务时出现异常:

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

在 System.Data.Services.Providers.PrimitiveResourceTypeMap.get_TypeMap() 在 System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMetadata(ProviderMetadataCacheItem metadataCacheItem) 在 System.Data.Services.Providers.BaseServiceProvider.LoadMetadata(Boolean skipServiceOperations) 在System.Data.Services.Providers.EntityFrameworkDataService1.CreateInternalProvider(Object dataSourceInstance) at System.Data.Services.DataService1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider& metadataProviderInstance, IDataServiceQueryProvider& queryProviderInstance, Object& dataSourceInstance, Boolean& isInternallyCreatedProvider) 在 System.Data.Services.DataService1.CreateProvider() at System.Data.Services.DataService1.HandleRequest() 在 System.Data.Services .DataService`1.ProcessRequestForMessage(Stream messageBody) at SyncInvokeProcessRequestForMessage(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] 输入, Object[]& 输出) 在 System .ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) 在 Syste m.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

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

有没有人遇到过类似的问题并有线索?

【问题讨论】:

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


    【解决方案1】:

    我设法在本地创建了托管在 SharePoint 2013 中的功能齐全的 WCF 数据服务。我得到了提到的异常(以及许多其他异常)。

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

    这里是一个简短的描述,什么是让这一切正常工作所必需的。

    1. 需要通过 SharePoint WSP 将一堆来自 nuget 的 dll 部署到 GAC(这里是对我有用的列表)

    一个。 .Net 4.5 的 EntityFramework.dll 6.1.3

    b. .Net 4.5 的 EntityFramework.SqlServer.dll 6.1.3

    c。 Microsoft.Data.Edm.dll 5.6.2

    d。 Microsoft.Data.OData.dll 5.6.2

    e。 Microsoft.Data.Services.dll 5.6.2

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

    g. Microsoft.OData.EntityFrameworkProvider.dll 1.0.0-beta2

    h。 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 文件夹内的专用功能文件夹

    对于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. 如果您的 odata 过滤器已正确转换为 SQL 查询,请检查 SQL Server Profiler

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 2016-11-30
      • 1970-01-01
      • 2016-08-05
      相关资源
      最近更新 更多