Прокси-сервер службы WCF не в настроении дважды использовать одно и то же пространство имен - PullRequest
2 голосов
/ 30 марта 2011

Когда я впервые создал свой прокси-сервер для службы данных 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?Как я могу убедить либо прокси-генератор кода использовать свое исходное пространство имен, либо заставить службу данных доставлять элементы в новое пространство имен?

1 Ответ

0 голосов
/ 30 марта 2011

Вносили ли вы изменения на сервере, что приводит к новому пространству имен?

Вы можете попробовать удалить прокси и создать его с нуля.

Редактировать

попробовать:

config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
...