2012-08-25 10 views
7

Jest to mój pierwszy raz konfiguracji usługi OData i jestem oczywiście pewne problemy ...błąd Zapytanie z WCF Data Services

Problem polega na tym, że nie mogę dostać biegu usług, wciąż otrzymuję "Błąd żądania". Request Error

Mam researched na temat tego, na czym może polegać problem. Stwierdziłem, że często problemem jest niepoprawne wpisanie reguł dostępu. Próbowałem naprawić to zarówno z nazwami Singular, liczby mnogiej i próbowałem również z typeof(Post).getType().Name

Tutaj jest mój kod. Mam nadzieję, że możesz mi pomóc, utknąłem na wiele godzin.

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

Struktura mojej klasie EntityFramework (db pierwszy) The structure of my EntityFramework class (db first)

Metody i członkom do klasy Entity. Tutaj jednostki są pisane w liczbie mnogiej. Methods and Members for Entity class

To mój 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> 

Szczegółowy komunikat o błędzie:

Serwer napotkał błąd podczas przetwarzania żądania. Komunikat o wyjątku to "Wartość nie może być pusta. Nazwa parametru: propertyResourceType '. Zobacz dzienniki serwera, aby uzyskać więcej szczegółów. Wyjątkiem stos śladowy:

w System.Data.Services.WebUtil.CheckArgumentNull [T] (wartość T ciąg ParameterName) w System.Data.Services.Providers.ResourceProperty..ctor (nazwa Ciąg ResourcePropertyKind rodzaju, ResourceType propertyResourceType) w System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMemberMetadata (ResourceType ResourceType, IProviderMetadata roboczego, IDictionary knownTypes, IDictionary 2 childTypes, IDictionary 2 entitySets) w System.Data.Services.Providers.BaseServiceProvider .PopulateMetadata() w System.Data.Servic es.Providers.BaseServiceProvider.LoadMetadata() w System.Data.Services.DataService 1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider& metadataProviderInstance, IDataServiceQueryProvider& queryProviderInstance, BaseServiceProvider& builtInProvider, Object& dataSourceInstance) at System.Data.Services.DataService 1.CreateProvider() w System.Data.Services.DataService 1.HandleRequest() at System.Data.Services.DataService 1.ProcessRequestForMessage (strumień messageBody) w SyncInvokeProcessRequestForMessage (Object, obiekt [ ] obiektu []) w System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke (Przedmiot przykład, obiekt [] wejścia, obiekt [] & wyjść) w System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin (MessageRpc & RPC) pod adresem System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5 (MessageRpc RPC) w System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41 (MessageRpc & RPC) w System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4 (MessageRpc & RPC) w System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31 (MessageRpc & RPC) w System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3 (MessageRpc & RPC) w System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2 (MessageRpc & RPC) w System.ServiceModel.Dispatcher.ImmutableDispatchRuntime .ProcessMessage11 (MessageRpc & RPC) w System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1 (MessageRpc & RPC) w System.ServiceModel.Dispatcher.MessageRpc.Process (logiczna isOperationContextSet)

+3

Czy możesz postępować zgodnie z instrukcjami tutaj, aby uzyskać bardziej szczegółowy komunikat o błędzie? http://blogs.msdn.com/b/phaniraj/archive/2008/06/18/debugging-ado-net-data-services.aspx –

+0

@VitekKarasMSFT Dziękujemy za podpowiedź – LazyTarget

+0

Jest jedną z twoich właściwości Enum/Typ przestrzenny? –

Odpowiedz

10

Zespół usług WCF Data Services confirms - jest to dokładny błąd występujący podczas korzystania z Enums (który nie jest jeszcze obsługiwany).

Usuń typy wyliczeniowe (lub użyj ich sugerowanego obejścia i użyj obwoluty wokół właściwości wyliczania), co powinno zniknąć.

Powiązane problemy