2012-08-25 7 views
7

La mia prima volta l'istituzione di un servizio OData e sono, naturalmente, avendo alcuni problemi ...errore di richiesta con WCF Data Services

Il problema è che non riesco a ottenere il servizio in esecuzione, continuo a ricevere un "Errore di richiesta". Request Error

Ho il researched su quale sia il problema e ho riscontrato che un problema comune è che le regole di accesso sono state digitate in modo errato. Così ho provato a risolvere questo problema con nomi Singular, nomi Plural e ho anche provato con typeof(Post).getType().Name

Bene ecco il mio codice. Spero che tu possa aiutarmi, sono rimasto bloccato per ore.

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 struttura della mia classe EntityFramework (db prima) The structure of my EntityFramework class (db first)

Metodi e Utenti per classe di entità. Qui le entità sono scritte al plurale. Methods and Members for Entity class

Questo è il mio 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 messaggio di errore dettagliato:

Il server ha rilevato un errore durante l'elaborazione della richiesta. Il messaggio di eccezione è "Il valore non può essere nullo. Nome parametro: propertyResourceType '. Vedi i log del server per maggiori dettagli. L'eccezione traccia dello stack è:

a System.Data.Services.WebUtil.CheckArgumentNull [T] (valore T, String nomeParametro) a System.Data.Services.Providers.ResourceProperty..ctor (String name, tipo ResourcePropertyKind, ResourceType propertyResourceType) a System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMemberMetadata (ResourceType resourceType, IProviderMetadata lavoro, IDictionary knownTypes, IDictionary 2 childTypes, IDictionary 2 entitySets) a System.Data.Services.Providers.BaseServiceProvider .PopulateMetadata() su System.Data.Servic es.Providers.BaseServiceProvider.LoadMetadata() a System.Data.Services.DataService 1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider& metadataProviderInstance, IDataServiceQueryProvider& queryProviderInstance, BaseServiceProvider& builtInProvider, Object& dataSourceInstance) at System.Data.Services.DataService 1.CreateProvider() a System.Data.Services.DataService 1.HandleRequest() at System.Data.Services.DataService 1.ProcessRequestForMessage (Stream messageBody) a SyncInvokeProcessRequestForMessage (Object, Object [ ], Object []) a System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke (Object esempio, Object ingressi [], Object [] & uscite) da System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin (MessageRpc & RPC) a System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5 (MessageRpc & RPC) a System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41 (MessageRpc & RPC) a System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4 (MessageRpc & RPC) a System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31 (MessageRpc & RPC) a System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3 (MessageRpc & RPC) a System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2 (MessageRpc & RPC) a System.ServiceModel.Dispatcher.ImmutableDispatchRuntime .ProcessMessage11 (MessageRpc & RPC) a System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1 (MessageRpc & RPC) a System.ServiceModel.Dispatcher.MessageRpc.Process (booleano isOperationContextSet)

+3

Potrebbe seguire le istruzioni qui per ottenere un messaggio di errore più dettagliato? http://blogs.msdn.com/b/phaniraj/archive/2008/06/18/debugging-ado-net-data-services.aspx –

+0

@VitekKarasMSFT Grazie per il suggerimento – LazyTarget

+0

È uno dei tuoi immobili un Enum/Tipo spaziale? –

risposta

10

Team di servizi dati WCF confirms - questo è l'errore esatto in cui si verifica l'utilizzo di Enum (che non è ancora supportato).

Rimuovere i tipi di Enum (o utilizzare la loro soluzione alternativa e utilizzare un wrapper attorno alle proprietà enum) e questo dovrebbe andare via.

Problemi correlati