Геттеры и сеттеры для обобщения над WCF - PullRequest
0 голосов
/ 03 апреля 2012

Если у меня есть универсальный класс в службе WCF

[DataContract(Name = "TestGenericOf{0}")]
public class TestGeneric<T>
{
    [DataMember]
    public string TestProperty
    {
        get { return _testProperty.ToUpper(); }
        set { _testProperty = value; }
    }

    private string _testProperty;
}

и клиент (в данном случае MVC) использует сервис через ссылку на сервис. Я хотел бы разделить логику получения и установки между сервисом и клиентом; однако, поскольку класс является универсальным, класс, созданный на клиенте, отличается от класса в службе.

public partial class TestGenericOfstring : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {

    [System.Runtime.Serialization.OptionalFieldAttribute()]
    private string TestPropertyField;

    [System.Runtime.Serialization.DataMemberAttribute()]
    public string TestProperty {
        get {
            return this.TestPropertyField;
        }
        set {
            if ((object.ReferenceEquals(this.TestPropertyField, value) != true)) {
                this.TestPropertyField = value;
                this.RaisePropertyChanged("TestProperty");
            }
        }
    }
}

Как лучше всего реализовать одну и ту же логику получения и установки как для службы, так и для клиента?

1 Ответ

0 голосов
/ 03 апреля 2012

У вас должна быть возможность поделиться сборкой, указав ее в svcutil при создании кода клиента. Общий аспект не должен иметь значения.

Проверьте эту ссылку для примера: http://www.codeproject.com/Articles/19625/Sharing-Types-Between-WCF-Service-and-Client

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

...