Ролевая база данныхКонтракт - PullRequest
0 голосов
/ 10 мая 2011

Просто приведу пример.У меня есть служба WCF с методом, который возвращает Datacontract.Контракт данных имеет несколько членов данных, и сервис используется несколькими клиентами.немногие участники контракта с данными имеют конфиденциальную информацию, которая не должна передаваться всем клиентам.Каков наилучший способ контролировать поток данных от wcf к клиенту.Если такие члены данных показывают значения по умолчанию, это нормально для меня.Я хочу избежать кода каждого типа клиента и хочу использовать некоторый подход к конфигурации.Например, в файле конфигурации я могу записать все свойства, которые будут сериализованы, в виде строки, разделенной запятыми.Для тех, кто не сериализован, я могу передать исключение «Не авторизовано» клиенту, когда клиент пытается получить доступ к свойству.Почему я прошу избегать использования кода, каждый член данных может быть подсчитан за стоимость подписки.Там может быть много контрактов и расширение.

1 Ответ

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

Динамические контракты с WCF невозможны.Что вы можете сделать, так это иметь базовый класс контракта данных, а затем наследовать его от:

[DataContract]
public class MyOperationResultBase { ... }


[DataContract]
public class SpecificSchema01 : MyOperationResultBase { ... }

, а затем в вашем сервисе вы можете сделать

[OperationContract]
public MyOperationResultBase DoMyOperation(MyOperationRequest request) { ... }

Затем вы возвращаете экземплярприменимый производный класс по мере необходимости.

Очевидно, это также означает, что ваш клиент должен проверить тип возвращаемого результата, и вы должны указать типы производных классов в базовом классе (или создать преобразователь типов,но вы можете сделать это позже, если это решение будет работать для вас):

[KnownType(typeof(SpecificSchema01))]
[KnownType(typeof(SpecificSchema02))]
[KnownType(typeof(SpecificSchema03))]
[DataContract]
public class MyOperationResultBase { ... }

Это то, что вы ищете?

...