Demande d'erreur avec les Services de Données WCF
Ses mon premier temps la mise en place d'un Service OData et je suis bien sûr d'avoir quelques problèmes...
Le problème est que je ne peux pas obtenir le service, je reçois une "Erreur de Requête".
J'ai recherches sur ce que le problème peut être et je l'ai trouvé un problème commun est que les règles d'accès sont mal tapé. J'ai donc essayé de fixation, cette fois avec le Singulier des noms, le Pluriel des noms et j'ai aussi essayé avec typeof(Post).getType().Name
Bien, voici mon code. J'espère que vous pourrez m'aider, j'ai été coincé pendant des heures.
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();
}
}
De la structure de mon EntityFramework classe (db première)
Des méthodes et des Membres de l'Entité de la classe. Ici, les entités sont définies dans le pluriel.
C'est mon 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 message d'erreur détaillé:
Le serveur a rencontré une erreur de traitement de la demande. L'exception
message est " la Valeur ne peut pas être null. Nom du paramètre:
propertyResourceType'. Voir les journaux du serveur pour plus de détails. L'exception
trace de la pile est:au Système.Les données.Services.WebUtil.CheckArgumentNull[T](T valeur, Chaîne de
parameterName) à
Système.Les données.Services.Les prestataires.ResourceProperty..ctor(String nom,
ResourcePropertyKind genre, ResourceType propertyResourceType) à
Système.Les données.Services.Les prestataires.ObjectContextServiceProvider.PopulateMemberMetadata(ResourceType
resourceType, IProviderMetadata espace de travail, IDictionary2 knownTypes,
2
PrimitiveResourceTypeMap primitiveResourceTypeMap) at
System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMetadata(IDictionary
knownTypes, IDictionary2 childTypes, IDictionary
2 entitySets) à
Système.Les données.Services.Les prestataires.BaseServiceProvider.PopulateMetadata()
au Système.Les données.Services.Les prestataires.BaseServiceProvider.LoadMetadata()
au
Système.Les données.Services.DataService1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider&
1.CreateProvider() à
metadataProviderInstance, IDataServiceQueryProvider&
queryProviderInstance, BaseServiceProvider& builtInProvider, Object&
dataSourceInstance) at
System.Data.Services.DataService
Système.Les données.Services.DataService1.HandleRequest() at
1.ProcessRequestForMessage(Stream
System.Data.Services.DataService
messageBody) à SyncInvokeProcessRequestForMessage(Object , Object[] ,
Object[] )
Système.ServiceModel.Répartiteur.SyncMethodInvoker.Invoke(Object
exemple, Object[] entrées, Object[]& sorties) à
Système.ServiceModel.Répartiteur.DispatchOperationRuntime.InvokeBegin(MessageRpc&
rpc) à
Système.ServiceModel.Répartiteur.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&
rpc) à
Système.ServiceModel.Répartiteur.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc&
rpc) à
Système.ServiceModel.Répartiteur.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&
rpc) à
Système.ServiceModel.Répartiteur.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&
rpc) à
Système.ServiceModel.Répartiteur.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&
rpc) à
Système.ServiceModel.Répartiteur.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&
rpc) à
Système.ServiceModel.Répartiteur.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&
rpc) à
Système.ServiceModel.Répartiteur.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&
rpc) au Système.ServiceModel.Répartiteur.MessageRpc.Processus(Boolean
isOperationContextSet)
Merci pour l'astuce
Est l'une de vos propriétés d'un Enum/type Spatial?
Oui j'en ai plusieurs, de l'Utilisateur.UserRole, De L'Utilisateur.Genre, Post.Type De Poste.Visibilité (De L'Album.Visiblity). @MarkStafford-MSFT voulez-vous dire que EF Énumérations ne fonctionne pas dans WCF encore?
Oui - les Services de Données WCF ne prend pas en charge le protocole enum propriétés (encore).
OriginalL'auteur LazyTarget | 2012-08-25
Vous devez vous connecter pour publier un commentaire.
Des Services de Données WCF équipe confirme - c'est l'erreur exacte face lorsque vous utiliser les Énumérations (ce qui n'est pas encore pris en charge).
Supprimer les types Enum (ou de l'utilisation de leur travail et utiliser un wrapper autour de l'enum propriétés) et cela devrait aller.
OriginalL'auteur Roopesh Shenoy