Неожиданный тип - исключение сериализации

У меня есть служба WCF.

В нормальном режиме сервер выполняет некоторую обработку, возвращая заполненный объект XactTaskIn клиенту через обратный вызов. У меня все работает нормально.

Моя проблема в том, что когда я пытаюсь установить для переменной returnData заполненное исключение XactException и пытаюсь отправить XactTaskIn обратно клиенту через обратный вызов, я получаю следующее исключение.

Исключение - «Введите 'XactException' с имя контракта данных 'XactException: http: //schemas.datacontract.org/2004/07/' не ожидается. Рассмотрите возможность использования DataContractResolver или добавить любые типы статически неизвестен списку известные типы - например, с помощью атрибут KnownTypeAttribute или добавление их в список известных типов передается в DataContractSerializer ". (System.Runtime.Serialization.SerializationException) Исключение Message = "Введите" XactException "с имя контракта данных 'XactException: http: //schemas.datacontract.org/2004/07/' не ожидается. Рассмотрите возможность использования DataContractResolver или добавить любые типы статически неизвестен списку известные типы - например, с помощью атрибут KnownTypeAttribute или добавление их в список известных типов передается в DataContractSerializer. ", Тип исключения = "System.Runtime.Serialization.SerializationException"

Вот класс XactTaskIn

[DataContract]
public class XactTaskIn
{
    [DataMember]
    public DateTime timeOut;
    [DataMember]
    public DateTime timeIn;
    [DataMember]
    public string name;
    [DataMember]
    public string responseTo;
    [DataMember]
    public String moduleFromName;
    [DataMember]
    public String moduleFromType;
    [DataMember]
    public String methodFromName;
    [DataMember]
    public object[] originalInputs;
    [DataMember]
    public String returnMethodToCall;
    [DataMember]
    public String returnModuleToCall;
    [DataMember]
    public object returnData;

    public XactTaskIn(DateTime timeOut, DateTime timeIn, string name, string responseTo, String moduleFromName, String moduleFromType, String methodFromName, object[] originalInputs, String returnMethodToCall, String returnModuleToCall, object returnData)
    {
        this.timeOut = timeOut;
        this.timeIn = timeIn;
        this.name = name;
        this.responseTo = responseTo;
        this.moduleFromName = moduleFromName;
        this.moduleFromType = moduleFromType;
        this.methodFromName = methodFromName;
        this.originalInputs = originalInputs;
        this.returnMethodToCall = returnMethodToCall;
        this.returnModuleToCall = returnModuleToCall;
        this.returnData = returnData;
    }
}

Вот класс XactException:

[DataContract]    
public class XactException
{
    [DataMember]
    string message;

    public XactException(string message)
    {
        this.message = message;
        // Add implementation.
    }
}

Обновление:

Хорошо, поэтому комментарий Даниэля мне помог.

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

  • Обнаружено: «Модуль форматирования выдал исключение при попытке десериализации сообщение: Во время пытаясь десериализовать параметр http://tempuri.org/:taskIn . В Сообщение InnerException было "Ошибка в строка 1 позиция 960. Элемент 'http://schemas.datacontract.org/2004/07/:returnData' содержит данные из типа, который соответствует имя 'http://schemas.datacontract.org/2004/07/:XactException'. Десериализатор не знает любой тип, который соответствует этому имени. Рассмотрите возможность использования DataContractResolver или добавьте тип, соответствующий 'XactException' в список известных типы - например, с помощью Атрибут KnownTypeAttribute или добавление в список известных типов передается в DataContractSerializer. '. Подробнее см. InnerException Детали." (System.ServiceModel.Dispatcher.NetDispatcherFaultException) Исключение Message = "Средство форматирования бросило исключение при попытке десериализации сообщение: Во время пытаясь десериализовать параметр http://tempuri.org/:taskIn . В Сообщение InnerException было "Ошибка в строка 1 позиция 960. Элемент 'http://schemas.datacontract.org/2004/07/:returnData' содержит данные из типа, который соответствует имя 'http://schemas.datacontract.org/2004/07/:XactException'. Десериализатор не знает любой тип, который соответствует этому имени. Рассмотрите возможность использования DataContractResolver или добавьте тип, соответствующий 'XactException' в список известных типы - например, с помощью Атрибут KnownTypeAttribute или добавление в список известных типов передается в DataContractSerializer. '. Подробнее см. InnerException подробности. ", Тип исключения = "System.ServiceModel.Dispatcher.NetDispatcherFaultException"

48
задан abatishchev 30 June 2012 в 08:24
поделиться