简短说明: 我正在尝试创建一个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)
从普通网络应用程序托管的相同服务工作正常。
是否有人有类似的问题,并有一些线索?
答案 0 :(得分:1)
我设法在内部部署SharePoint 2013内部创建功能齐全的WCF数据服务。我得到了提到的异常(以及许多其他人)。
功能齐全,我的意思是我的CSata和java脚本过滤器的odata请求被正确执行,并且(自动神奇地)导致对SQL Server数据库的正确形成查询。适用于http和https。
以下简要说明了使这一切工作的必要条件。
一个。 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时,会显示问题的异常。
服务应与上述类似:
使用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;
}
}
Svc文件:YourService.svc应该部署到ISAPI SP文件夹内的专用功能文件夹
对于http - 片段:
<service behaviorConfiguration="WCFServicesBehavior" name=" Namespace.yourservice ">
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
对于https:类似于http,但使用mexHttpsBinding绑定
在浏览器中打开您的终端以检查这是否正常 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() - 应返回给定类型的所有实体
检查SQL Server Profiler是否将odata过滤器正确转换为SQL查询