WCF, как мне реализовать все объекты в DataContract? [OnDeserializing] не работает - PullRequest
4 голосов
/ 15 февраля 2011

Итак, у меня есть такой код.

[DataContract]
public class Example
{
    SomeClass _someVar;

    [OnDeserializing]
    public void OnDeserializing(StremingContext c)
    {
        _someVar = new SomeClass();
    }
}

Вот забавная вещь: OnDeserializing () вызывается, если я использую тестовый клиент отладки из Visual Studio 2010. Но если я пытаюсь разместить свой сервис WCF, а затем вызываю его из моего собственного клиента, он не вызывается ( или, вероятно, нет), потому что _someVar всегда нулевой.

Argh!

Что еще мне нужно сделать?

С уважением, Фуга

Ответы [ 2 ]

1 голос
/ 25 февраля 2011

WCF не использует стандартную сериализацию .net, поэтому я не уверен, что он вызовет ваш метод OnDeserializing. Однако вы можете попросить WCF использовать XmlSerializer, который должен дать вам желаемое поведение. Взгляните на «Управление процессом сериализации» здесь .

0 голосов
/ 25 февраля 2011

В дополнение к ответу PaulF ваш класс не является одноэлементным - 2 вызова службы будут по умолчанию создавать экземпляр Example дважды и вызывать метод один раз.

Из-за этого на самом деле очень мало смысла в объявлении переменных на уровне класса.

Если вы хотите изменить это поведение, посмотрите здесь для получения дополнительной информации

...