WCF с общими объектами и полученными классами на клиенте

StackOverflow https://stackoverflow.com/questions/3472926

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

Почему вам нужно знать добавленные свойства на сервере?

Другие советы

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

Я смутно помню, что когда я изучал 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;}
}

В

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, вы можете легко найти в Интернете

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top