2012-08-25 63 views
7

它的我第一次设立的OData服务,我有一些问题,当然......与请求错误WCF数据服务

的问题是,我不能让业务正常运行,我不断收到一个“请求错误”。 Request Error

我有researched问题可能是什么,我发现一个共同的问题是访问规则是错误地键入。所以我已经尝试修复这与单数名称,复数名称,我也试过typeof(Post).getType().Name

那么这里是我的代码。我希望你能帮助我,我已经坚持了几个小时。

public class ODataService : DataService<Entity> 
{ 
    // This method is called only once to initialize service-wide policies. 
    public static void InitializeService(DataServiceConfiguration config) 
    { 
     //config.SetEntitySetAccessRule("Users", EntitySetRights.All); 
     //config.SetEntitySetAccessRule("Posts", EntitySetRights.All); 
     //config.SetEntitySetAccessRule("Albums", EntitySetRights.All); 


     config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); 
     config.SetServiceOperationAccessRule("*", ServiceOperationRights.AllRead); 
     //config.SetServiceOperationAccessRule("GetPosts", ServiceOperationRights.AllRead); 

     config.UseVerboseErrors = true; 
     config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; 
    } 

    [WebGet] 
    public IQueryable<Post> GetPosts() 
    { 
     return CurrentDataSource.Posts.AsQueryable(); 
    } 
} 

我的EntityFramework类的结构(DB头) The structure of my EntityFramework class (db first)

方法和成员的实体类。这里的实体拼写为复数。 Methods and Members for Entity class

这是我的web.config:

<?xml version="1.0"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=169433 
    --> 
<configuration> 
    <connectionStrings> 
    <add name="Entity" connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider connection string=&quot;data source=XXX;Initial Catalog=XXX;persist security info=True;user id=XXX;password=XXX;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime requestValidationMode="4.5" targetFramework="4.5" encoderType="System.Web.Security.AntiXss.AntiXssEncoder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    <pages controlRenderingCompatibilityVersion="4.5" /> 
    <machineKey compatibilityMode="Framework45" /> 
    </system.web> 
<system.serviceModel> 
    <services> 
     <service name="LinkIT.Core.OData.ODataService" behaviorConfiguration ="DebugEnabled"> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors > 
     <behavior name="DebugEnabled"> 
      <serviceDebug includeExceptionDetailInFaults="True"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    </system.serviceModel> 
</configuration> 

详细的错误消息:

服务器遇到错误处理请求。消息的例外 是'值不能为空。参数名称: propertyResourceType'。查看服务器日志获取更多详细信例外 堆栈跟踪是:

在System.Data.Services.WebUtil.CheckArgumentNull [T](T值,字符串 parameterName)以在 System.Data.Services.Providers.ResourceProperty..ctor(字符串名称, ResourcePropertyKind种类,的ResourceType propertyResourceType)在 System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMemberMetadata(的ResourceType resourceType为,IProviderMetadata工作区,IDictionary的 knownTypes,IDictionary的2 childTypes, IDictionary 2 entitySets)在 System.Data.Services.Providers.BaseServiceProvider .PopulateMetadata() at System.Data.Servic es.Providers.BaseServiceProvider.LoadMetadata() 处 System.Data.Services.DataService 1.HandleRequest() at System.Data.Services.DataService 1.ProcessRequestForMessage(流 消息体) System.Data.Services.DataService 1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider& metadataProviderInstance, IDataServiceQueryProvider& queryProviderInstance, BaseServiceProvider& builtInProvider, Object& dataSourceInstance) at System.Data.Services.DataService 1.CreateProvider()在SyncInvokeProcessRequestForMessage(对象,对象[ ],在 System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(对象 实例 对象[]),对象[]输入,在 System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin对象[] &输出)(MessageRpc & RPC )at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc & RPC)处 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc & RPC)在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc & RPC)。ProcessMessage31(MessageRpc & RPC)处 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc & RPC) System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc & RPC)在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime .ProcessMessage11(MessageRpc & RPC)在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc & RPC)在System.ServiceModel.Dispatcher.MessageRpc.Process(布尔 isOperationContextSet)

+3

您能否按照这里的指示获取更详细的错误信息? http://blogs.msdn.com/b/phaniraj/archive/2008/06/18/debugging-ado-net-data-services.aspx –

+0

@VitekKarasMSFT谢谢你的提示 – LazyTarget

+0

是你的一个属性Enum /空间类型? –

回答

10

WCF数据服务团队confirms - 这是使用枚举(尚未支持)时所面临的确切错误。

删除枚举类型(或使用他们建议的变通办法,并围绕枚举属性使用包装),这应该消失。