Ошибка запроса ADO.NET Data Services Entity Framework, когда установщик свойств является внутренним - PullRequest
2 голосов
/ 06 ноября 2008

Я получаю сообщение об ошибке при представлении службы данных ADO.NET с использованием модели данных Entity Framework, которая содержит сущность (называемую «Case») с внутренним установщиком свойства. Если я изменю установщик на общедоступный (используя конструктор сущностей), службы данных будут работать нормально.

Мне не нужно, чтобы сущность "Дело" отображалась в службе данных, поэтому я попытался ограничить, какие сущности выставляются с помощью SetEntitySetAccessRule. Это не сработало, и конечная точка службы не работает с той же ошибкой.

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

Сообщение об ошибке отображается в браузере при вызове конечной точки .svc. Он очень общий и гласит «Ошибка запроса. Сервер обнаружил ошибку при обработке запроса. См. Подробности в журналах сервера ». К сожалению, в журналах событий системы и приложения нет записей.

Я нашел этот вопрос stackoverflow , который показывает, как настроить трассировку в службе. После этого в журнале трассировки была зарегистрирована следующая ошибка NullReferenceExceptoin.

Кто-нибудь знает, как избежать этого исключения при включении сущности с внутренним сеттером?

<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>

Ответы [ 4 ]

2 голосов
/ 22 июня 2010

Недавно я столкнулся с подобной проблемой, и исправление в моем случае меняло имя EntitySetAccessRule на «*», например:

public static void InitializeService(DataServiceConfiguration config)
{
  config.SetEntitySetAccessRule("*", EntitySetRights.All);
  config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
0 голосов
/ 19 февраля 2014

У меня была похожая проблема, вызванная EF6.

Согласно этой статье меняется

public class WebDataService : DataService< DataModel.DataEntities >

до

public class WebDataService : EntityFrameworkDataService< DataModel.DataEntities >

должно помочь

0 голосов
/ 16 мая 2011

У меня была та же проблема, и решение оказалось очень простым: хотя имя моей таблицы и сгенерированный объект сущности - это единственное «Порядок», мне нужно обозначить его в этом контексте как «Заказы». Я все еще думаю об этом. просто стандарт EDM.

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

Надеюсь, это поможет.

0 голосов
/ 07 января 2009

У меня была похожая проблема, и она была вызвана передачей неправильного класса в DataService. Вам необходимо передать класс сущностей данных модели данных.

public class WebDataService : DataService< DataModel.DataEntities >
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...