Я получаю ошибку в результате
<ServiceKnownType(GetType(EmailMessageTemplate))> _
<ServiceKnownType(GetType(SmsMessageTemplate))> _
<OperationContract()> <WebMethod()> _
Public Function GetMessageTemplates(ByVal handlerId As Integer) As Collection(Of MessageTemplate)
Dim result = New Collection(Of MessageTemplate)
result = MessageDataAccess.GetMessageTemplates(handlerId)
Return result
End Function
, который я веб-метод wcf
службы (потому что я использую:
<%@ServiceHost Language="VB" Service="MyAppITWS.Service1" %>
и я ссылаюсь на свое приложение в качестве службы ссылки
результат - коллекция EmailMessageTemplates
и SmsMessageTemplates
. Вот мои dtacontracts:
[DataContract]
public class EmailMessageTemplate : MessageTemplate
{
[DataMember]
public string EmailSubject { get; set; }
[DataMember]
public EmailFormat EmailFormat { get; set; }
}
[DataContract]
public class EmailMessageTemplate : MessageTemplate
{
[DataMember]
public string EmailSubject { get; set; }
[DataMember]
public EmailFormat EmailFormat { get; set; }
}
[DataContract]
public class SmsMessageTemplate : MessageTemplate
{
}
Как это исправить?
Вот довольно красивая ошибка:
{System.Runtime.Serialization.SerializationException: Ошибка в строке 1, позиция 1535. Элемент 'http://schemas.datacontract.org/2004/07/MyAppUtils.DataModel.Messaging:MessageTemplate' содержит данные контракта данных' http://schemas.datacontract.org/2004/07/MyAppUtils.DataModel.Messaging:EmailMessageTemplate'. Десериализатор не знает ни о каком типекоторый сопоставляется с этим контрактом. Добавьте тип, соответствующий «EmailMessageTemplate», в список известных типов - например, с помощью атрибута KnownTypeAttribute или добавив его в список известных типов, передаваемых в DataContractSerializer. w System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize (читатель XmlReaderDelegator, имя строки, строка ns, DataContract и dataContract) w System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize (XmlReaderDelegator XMLReader, Int32 идентификатор, RuntimeTypeHandle declaredTypeHandle, имя String, String нс) ш ReadArrayOfMessageTemplateFromXml (XmlReaderDelegator, XmlObjectSerializerReadContext, XmlDictionaryString, XmlDictionaryString, CollectionDataContract) ш System.Runtime.Serialization.CollectionDataContract.ReadXmlValue (XmlReaderDelegator XMLReader, XmlObjectSerializerReadContext контекст) шSystem.Runtime.Serialization.XmlObjectSerializerReadContext.ReadDataContractValue (DataContract dataContract, читатель XmlReaderDelegator) w System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize.XmlReaderDelegator xmlReader, Тип объявленного типа, DataContract dataContract, Имя строки, Строка ns) w System.Runtime.Serialization.DataContractSerializer.InternalReadObject (XmlReaderDelegatorxmlReader, Boolean verifyObjectName) w System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions (читатель XmlReaderDelegator, Boolean verifyObjectName) w System.Runtime.Serialization.DataContractSerializer.ReadObjectSourcePlaySourcePlaySourceRameServiceReaderSourceServiceReaderReaderSourceServiceReaderReaderSourceService_Reader_Reader_nameЧитатель XmlDictionaryReader, часть PartInfo, логическое isRequest)}