У меня есть служба 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"