2008-11-05 34 views
2

當使用包含實體(稱爲「Case」)的實體框架數據模型公開ADO.NET數據服務時,我收到一條錯誤消息,內部設置器在財產上。如果我修改setter以公開(使用實體設計器),則數據服務可以正常工作。當屬性設置器在內部時,ADO.NET數據服務實體框架請求錯誤

我不需要實體「案」中的數據服務公開,所以我試圖限制哪些實體使用SetEntitySetAccessRule暴露。這不起作用,並且服務終點失敗並出現相同的錯誤。

public static void InitializeService(IDataServiceConfiguration config) 
{ 
    config.SetEntitySetAccessRule("User", EntitySetRights.AllRead); 
} 

當調用.svc端點時,會在瀏覽器中報告錯誤消息。這是非常通用的,並讀取「請求錯誤。服務器在處理請求時遇到錯誤。有關更多詳細信息,請參閱服務器日誌。「不幸的是,系統和應用程序事件日誌中沒有條目。

,我發現這個stackoverflow question展示瞭如何配置跟蹤的服務。這樣做後,在跟蹤日誌中報告了以下NullReferenceExceptoin錯誤。

有誰知道如何避免這種異常包括一個內部setter實體時?

<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent"> 
<System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system"> 
<EventID>131076</EventID> 
<Type>3</Type> 
<SubType Name="Error">0</SubType> 
<Level>2</Level> 
<TimeCreated SystemTime="2008-11-05T22:30:44.1523578Z" /> 
<Source Name="System.ServiceModel" /> 
<Correlation ActivityID="{da77ee97-960f-4275-a5e7-a181c0b024b1}" /> 
<Execution ProcessName="WebDev.WebServer" ProcessID="6388" ThreadID="8" /> 
<Channel /> 
<Computer>MOTOJIM</Computer> 
</System> 
<ApplicationData> 
<TraceData> 
<DataItem> 
<TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Error"> 
<TraceIdentifier>http://msdn.microsoft.com/en-US/library/System.ServiceModel.Diagnostics.TraceHandledException.aspx</TraceIdentifier> 
<Description>Handling an exception.</Description> 
<AppDomain>685a2910-19-128703978432492675</AppDomain> 
<Exception> 
<ExceptionType>System.NullReferenceException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType> 
<Message>Object reference not set to an instance of an object.</Message> 
<StackTrace> 
at System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMemberMetadata(ResourceType resourceType, MetadataWorkspace workspace, IDictionary`2 entitySets, IDictionary`2 knownTypes) 
at System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMetadata(IDictionary`2 knownTypes, IDictionary`2 entitySets) 
at System.Data.Services.Providers.BaseServiceProvider.PopulateMetadata() 
at System.Data.Services.DataService`1.CreateProvider(Type dataServiceType, Object dataSourceInstance, DataServiceConfiguration&amp; configuration) 
at System.Data.Services.DataService`1.EnsureProviderAndConfigForRequest() 
at System.Data.Services.DataService`1.ProcessRequestForMessage(Stream messageBody) 
at SyncInvokeProcessRequestForMessage(Object , Object[] , Object[]) 
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp; outputs) 
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&amp; rpc) 
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet) 
</StackTrace> 
<ExceptionString>System.NullReferenceException: Object reference not set to an instance of an object. 
    at System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMemberMetadata(ResourceType resourceType, MetadataWorkspace workspace, IDictionary`2 entitySets, IDictionary`2 knownTypes) 
    at System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMetadata(IDictionary`2 knownTypes, IDictionary`2 entitySets) 
    at System.Data.Services.Providers.BaseServiceProvider.PopulateMetadata() 
    at System.Data.Services.DataService`1.CreateProvider(Type dataServiceType, Object dataSourceInstance, DataServiceConfiguration&amp; configuration) 
    at System.Data.Services.DataService`1.EnsureProviderAndConfigForRequest() 
    at System.Data.Services.DataService`1.ProcessRequestForMessage(Stream messageBody) 
    at SyncInvokeProcessRequestForMessage(Object , Object[] , Object[]) 
    at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp; outputs) 
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</ExceptionString> 
</Exception> 
</TraceRecord> 
</DataItem> 
</TraceData> 
</ApplicationData> 
</E2ETraceEvent> 

回答

0

我也有類似的問題,它是由傳遞錯誤的類的DataService造成的。您需要傳遞數據模型的數據實體類。

public class WebDataService : DataService<DataModel.DataEntities> 
2

我最近遇到了類似的問題,在我的情況下,修復被changinghe的EntitySetAccessRule爲「*」,這樣的名字:

public static void InitializeService(DataServiceConfiguration config) 
{ 
    config.SetEntitySetAccessRule("*", EntitySetRights.All); 
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; 
} 
0

我有同樣的問題,並該解決方案結果非常簡單:雖然我的表名和生成的實體對象是單數「Order」,但我需要在此上下文中將其稱爲「Orders」。仍然讓我的頭在附近。只是EDM標準。

config.SetEntitySetAccessRule("Orders", EntitySetRights.All); 

希望這會有所幫助。

0

我有EF6引起的類似問題。

根據this article改變

public class WebDataService : DataService<DataModel.DataEntities> 

public class WebDataService : EntityFrameworkDataService<DataModel.DataEntities> 

應該幫助

相關問題