2012-08-25 18 views
7

Su creación de un servicio de OData y estoy, por supuesto, tener algunos problemas ...error de solicitud con WCF Data Services

El problema es que no puedo conseguir el servicio en ejecución la primera vez, me siguen dando un "Error de solicitud". Request Error

que tienen researched sobre lo que el problema puede ser y me encontré con que un problema común es que las reglas de acceso se escriben de forma incorrecta. Así que he intentado arreglar esto con nombres únicos, nombres Plural y también he intentado con typeof(Post).getType().Name

Bueno, aquí está mi código. Espero que me puedas ayudar, he estado estancado por horas.

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(); 
    } 
} 

La estructura de mi clase de ADO.NET Entity Framework (db primero) The structure of my EntityFramework class (db first)

Métodos y miembros de la clase de entidad. Aquí las entidades se deletrean en plural. Methods and Members for Entity class

Esta es mi 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> 

un mensaje de error detallado:

El servidor encontró un error al procesar la solicitud. El mensaje de excepción es 'El valor no puede ser nulo. Nombre del parámetro: propertyResourceType '. Vea los registros del servidor para más detalles. La excepción seguimiento de la pila es:

en System.Data.Services.WebUtil.CheckArgumentNull [T] (valor T, cadena nombreParámetro) en System.Data.Services.Providers.ResourceProperty..ctor (String name, tipo ResourcePropertyKind, TipoRecurso propertyResourceType) en System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMemberMetadata (TipoRecurso resourceType, IProviderMetadata espacio de trabajo, IDictionary knownTypes, IDictionary 2 childTypes, IDictionary 2 entitySets) en System.Data.Services.Providers.BaseServiceProvider .PopulateMetadata() en System.Data.Servic es.Providers.BaseServiceProvider.LoadMetadata() en System.Data.Services.DataService 1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider& metadataProviderInstance, IDataServiceQueryProvider& queryProviderInstance, BaseServiceProvider& builtInProvider, Object& dataSourceInstance) at System.Data.Services.DataService 1.CreateProvider() en System.Data.Services.DataService 1.HandleRequest() at System.Data.Services.DataService 1.ProcessRequestForMessage (Corriente messageBody) en SyncInvokeProcessRequestForMessage (Object, Object [ ], Object []) en System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke (Object ejemplo, objeto entradas [], Object [] & salidas) en System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin (MessageRpc & RPC) en System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5 (MessageRpc) RPC) en System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41 (MessageRpc & RPC) en System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4 (MessageRpc & RPC) en System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31 (MessageRpc & RPC) en System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3 (MessageRpc & RPC) en System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2 (MessageRpc & RPC) en System.ServiceModel.Dispatcher.ImmutableDispatchRuntime .ProcessMessage11 (MessageRpc & RPC) en System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1 (MessageRpc & RPC) en System.ServiceModel.Dispatcher.MessageRpc.Process (Boolean isOperationContextSet)

+3

¿Podría seguir las instrucciones aquí para obtener un mensaje de error más detallado? http://blogs.msdn.com/b/phaniraj/archive/2008/06/18/debugging-ado-net-data-services.aspx –

+0

@VitekKarasMSFT Gracias por la sugerencia – LazyTarget

+0

Es una de sus propiedades un Enum/¿Tipo espacial? –

Respuesta

10

equipo de WCF Data Services confirms - este es el error exacto que se presentan cuando se utiliza enumeraciones (que todavía no es compatible).

Elimine los tipos Enum (o utilice su solución alternativa sugerida y utilice un contenedor alrededor de las propiedades enumeradas) y esto debería desaparecer.

Cuestiones relacionadas