Когда я впервые создал свой прокси-сервер для службы данных WCF, генератор кода (Visual Studio 2010 SP1) поместил определения типов сущностей в:
MyClient.DBService.DBModel
И каналы OData, поступающие из службы, выглядели такthis:
<element p2:type="DBModel.GetWorkstationProfile_Result">
Эта версия службы предоставляет только Операции службы , а не наборы сущностей.Довольный первой половиной проекта, я затем начал делать доступными некоторые наборы сущностей, и поэтому я добавил некоторые правила доступа для них в Службу данных, например:
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("FooBars", EntitySetRights.AllRead);
config.SetServiceOperationAccessRule("GetWorkstationProfile", ServiceOperationRights.All);
Я сделал "Служба обновления"Ссылка "на клиенте, но теперь прокси-сервер помещает все в
MyClient.DBService
, включая сложные типы, возвращаемые сервисными операциями, которые использовались в MyClient.DBService.DBModel
.
Однако,Служба данных все еще устанавливает тип возвращаемых элементов равным DBModel.GetWorkstationProfile_Result
, поэтому объекты никогда не десериализуются .Каждый вызов приводит к пустому списку, хотя я могу проверить один и тот же запрос в своем браузере и увидеть, что OData поступает из службы просто отлично.
Я могу заставить генератор прокси-кода идти назад-вперед простовключив или отключив SetEntityAccessRule
в методе InitializeService
Службы данных.Отключено - все идет в MyClient.DBService.DBModel
;Включено - все идет в MyClient.DBService
.
Это ошибка в службах данных WCF?Как я могу убедить либо прокси-генератор кода использовать свое исходное пространство имен, либо заставить службу данных доставлять элементы в новое пространство имен?