Я новичок в WCF-материалах, так что простите мой наивный вопрос, но я не уверен, с чего начать при определении ошибки при изучении основ OData.
У меня есть приложение MVC3использование базы данных, использование универсального поставщика членства (добавлено с помощью nuget) и небольшой базы данных SDF, доступ к которой осуществляется через SQL Server Compact Edition Client Data Provider 4.0.Я создал его, выполнив следующие шаги:
1) создайте новый проект библиотеки для уровня данных , добавьте EDMX из базы данных, затем добавьте ADO.NET DB и шаблоны генераторов сущностей.
2) создать новый проект библиотеки для универсальных интерфейсов данных : интерфейс репозитория, реализованный в (1), и шаблон сущностей t4 с его выводом, перемещенный из (1) в этотпроект (изменив параметр TT inputFile так, чтобы он ссылался на EDMX в другом проекте).
3) создайте новое приложение MVC , которое использует Ninject для создания экземпляраобщий репозиторий, объявленный в (2), с репозиторием на основе SDF, реализованным в (1).
Веб-приложение работает нормально, и я могу просматривать и редактировать данные.Теперь я должен раскрыть некоторые из его функций через службу WCF, и я искал OData для этого.Поэтому я добавил новую Службу данных WCF и изменил сгенерированный код просто для его тестирования, добавив имя моего класса сущностей (как реализовано в (1)) и имя набора сущностей, например:
public class ProjectService : DataService<OrganizerEntities>
{
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("Projects", EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
В любом случае, когда я открываю SVC в браузере, я получаю Ошибка запроса : Сервер обнаружил ошибку при обработке запроса.Подробнее смотрите в журналах сервера. .Если я просматриваю журнал, то вижу прежде всего предупреждение:
... http://msdn.microsoft.com/it-IT/library/System.ServiceModel.EvaluationContextNotFound.aspx Контекст оценки конфигурации не найден ....
, а затем исключение ArgumentNullException , подробности которого приведены ниже.Во всех примерах и руководствах, которые я обнаружил, я вижу типичный нереальный пример, в котором слой данных не отделен от потребительского приложения: создайте новое приложение MVC, добавьте EDMX, добавьте службу данных WCF,изменить некоторые строки сгенерированного кода, и все волшебным образом работает :).Так что я предполагаю, что это связано с моей многоуровневой архитектурой, особенно с отсутствующим контекстным предупреждением.Может ли кто-нибудь помочь в использовании этого сервиса в многоуровневом сценарии, подобном этому?Спасибо!
... Значение не может быть нулевым.Имя параметра: ключ в System.Collections.Generic.Dictionary 2.FindEntry(TKey
key) at System.Collections.Generic.Dictionary
2.get_Item (ключ TKey) в System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMetadata (IDictionary 2
knownTypes, IDictionary
2 childTypes, IDictionary 2 entitySets) at
System.Data.Services.Providers.BaseServiceProvider.PopulateMetadata()
at System.Data.Services.DataService
1.CreateProvider () в System.Data.Services.DataService 1.HandleRequest() at
System.Data.Services.DataService
1.ProcessRequestForMessage (Stream messageBody) в SyncInvokeProcessRequestForMessage (Object, Object [], Object []) в System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke (входы объекта, Object []], Object [] & output) в System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin (MessageRpc & rpc) в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5 (MessageRpc & rpcProcessImpRecPrice.RuPRIP).System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4 (MessageRpc & rpc) в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31 (MessageRpc & rpc) в System.ServiceModeImmutischer.ableDispatchRuntime.ProcessMessage3 (MessageRpc & RPC) в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2 (MessageRpc & RPC) в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11 (MessageRpc & RPC) в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1 (MessageRpc & RPC) вSystem.ServiceModel.Dispatcher.MessageRpc.Process (Boolean isOperationContextSet) System.ArgumentNullException: значение не может быть нулевым.Имя параметра: ключ вSystem.Collections.Generic.Dictionary 2.FindEntry(TKey key) at
System.Collections.Generic.Dictionary
2.get_Item (ключ TKey) в System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMetadata (IDictionary 2
knownTypes, IDictionary
2 childTypes, IDictionary 2 entitySets) at
System.Data.Services.Providers.BaseServiceProvider.PopulateMetadata()
at System.Data.Services.DataService
1.CreateProvider () в System.Data.Services.DataService 1.HandleRequest() at
System.Data.Services.DataService
1.ProcessRequestForMessage (Stream messageBody) в SyncInvokeProcessRequestForMessage (Object, Object [], Object []) в System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke (Object instance, Object [] входные данные, Object []выводится) в System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin (MessageRpc & rpc) в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5 (MessageRpc & rpc) в System.ServiceModelMessageRisp.Service.Serp..ImmutableDispatchRuntime.ProcessMessage4 (MessageRpc & rpc) в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31 (MessageRpc & rpc) в System.ServiceModel.Dispatcher.ImmutableDispatchRuntimecessMessage3 (MessageRpc & rpc) в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2 (MessageRpc & rpc) в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage.RecisPTIServiceModel.Dispatcher.MessageRpc.Process (Boolean isOperationContextSet) ...