WCF с общими объектами и производными классами на клиенте - PullRequest
1 голос
/ 13 августа 2010

У меня есть служба WCF, и я делюсь типами с клиентом в общей сборке.Если клиент создаст производный класс, можно ли будет передать производный тип обратно службе, чтобы я мог прочитать добавленные свойства с помощью отражения?

Я пытался, но возникли проблемы с KnownTypes, так как служба незнать, как десериализовать производный тип.

[Serializable]
public abstract class Car : ICar
{........

// на клиенте:

[Serializable]
public class MyCar : Car
{......

при передаче myCar в Service я получаю исключение, сообщающее об известном типе, но я не могу добавить это на сервер, так как я не знаю, через что будет отправлять клиент, и я хочу обработать дополнительные свойства посредством отражения.

Можно ли зарегистрировать типы клиентов как Knowntypes во время выполнения?Это может быть решение?http://blogs.msdn.com/b/sowmy/archive/2006/03/26/561188.aspx

Ответы [ 2 ]

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

Я думаю, что есть способ.

Я смутно помню, что когда я изучал WCF, я встретил ExtensionData, который должен быть механизмом для получения всего, что не соответствует сериализации класса.например, если вы включаете ExtensionData и вы находитесь в этой ситуации

//Server
public class GenericRQ
{
    public string GenericProperty {get;set;}
}


public Service GenericService
{
    Public void GenericMethod(GenericRQ RQ)
    {
    }

}

// client

Public class MoreSpecificRQ : GenericRQ
{
    public string SpecificProperty {get;set;}
}

At

Public void GenericMethod(GenericRQ RQ)
    {
    // the serializer adds automatically in RQ.ExtensionData everything that has come and that does not match the class GenericRQ.

    }

Как включить ExtensionData, вы можете легко искать в Интернете

0 голосов
/ 13 августа 2010

Это невозможно. И служба, и клиент должны знать, какие типы будут отправляться в сообщениях. Если вы хотите использовать известный тип, вы должны определить это отношение к родительскому типу в сервисе.

Зачем вам нужно знать дополнительные свойства на сервере?

...