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".
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)
Metody i członkom do klasy Entity. Tutaj jednostki są pisane w liczbie mnogiej.
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="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>
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.DataService1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider& metadataProviderInstance, IDataServiceQueryProvider& queryProviderInstance, BaseServiceProvider& builtInProvider, Object& dataSourceInstance) at System.Data.Services.DataService
1.CreateProvider() w System.Data.Services.DataService1.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)
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 –
@VitekKarasMSFT Dziękujemy za podpowiedź – LazyTarget
Jest jedną z twoich właściwości Enum/Typ przestrzenny? –