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".
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)
Metodi e Utenti per classe di entità. Qui le entità sono scritte al plurale.
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="data source=XXX;Initial Catalog=XXX;persist security info=True;user id=XXX;password=XXX;MultipleActiveResultSets=True;App=EntityFramework"" 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.DataService1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider& metadataProviderInstance, IDataServiceQueryProvider& queryProviderInstance, BaseServiceProvider& builtInProvider, Object& dataSourceInstance) at System.Data.Services.DataService
1.CreateProvider() a System.Data.Services.DataService1.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)
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 –
@VitekKarasMSFT Grazie per il suggerimento – LazyTarget
È uno dei tuoi immobili un Enum/Tipo spaziale? –