Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.231.69] |
|
Сообщ.
#1
,
|
|
|
Здрасьте, господа-специалисты.
Допустим у меня есть класс в сервисе [DataContract] public class Foo { [DataMamber] public int Value {get; set;} public int Modify(int _koof) { return Value * _koof; } } На стороне клиента функции Modify не будет. Так вот и вопрос - с каким бубном нужно плясать вокруг монитора с открытой студией, чтобы эта функция появилась на клиенте при референсе на этот сервис? |
Сообщ.
#2
,
|
|
|
Я думаю)), реализация методов не должна передаватся на клиент в DataContract. В том то и суть, что это DATA contract.
Если действительно так необходимо реализовать метод на клиентской и на серверной стороне, я бы, наверное, поступил следующим образом: 1. Вынести интерфейс этого custom обьекта: public interface IFoo { int Value{ get; set;} } public class Foo : IFoo { public int Value{ get; set;} } 2. Очевидно, что в другой сборке, нужно определить public static class с extension методом: public static class FooManager { public static int GetValue(this IFoo foo, int coef) { return foo.Value * coef; } } (по ходу интерфейс нужно тоже будет определить в этой сборке) 3. Так как на клиенте генерируются PARTIAL классы, просто наследуешь вторую половинку partial класса от интерфейса (реализация интерфейса уже лежит в первой половинке, то есть в сгенеренном классе) public partial class Foo : IFoo { } 4. Ну и, как на серверном, так и на клиентском коде вызываешь extension метод IFoo, соответственно подключив namespace статического класса FooManager: //server var foo = new Foo(); int value = foo.GetValue(0); //client using(var proxy = new DataServiceClient()) { var foo = proxy.GetFoo(); int value = foo.GetValue(0); } Ну и, конечно, соответственным образом нужно подключить референсы на сборку с интерфейсом и статическим классом. Может решение конечно не самое гибкое, но все же лучше, чем с бубном танцевать |