Использование Asp.net mvc 2 и WCF - Передача общего объекта на вызов службы?
1 Mark [2011-03-11 21:55:00]
[DataContract]
public class UserCertification
{
…
}
[DataContract]
public class UserPhone
{
…
}
[DataContract]
public class UserAddress
{
…
}
[DataContract]
public abstract class Request
{
[DataMember]
public int UserMakingRequest { get; set; }
[DataMember]
public Guid RequestId { get; set; }
[DataMember]
public Object RequestObjectDTO { get; set; }
}
var request = new Request
{
RequestId = new Guid(),
UserMakingRequest = loggedInUserId,
RequestObjectDTO = userCertification,
};
У меня есть DataContracts: UserCertification, UserAddress и UserPhone
У меня также есть запрос DataContact. Это то, что я хотел бы передать каждому методу службы WCF.
Таким образом, уведомление в Request DataContract - это DataMember, называемый RequestObjectDTO. Я сделал это типа объекта, надеясь, что тогда я смогу подключить к нему другие DataContracts.
Это не сработало - оно выдает ошибку "Невозможно создать абстрактный класс".
Какой тип должен быть? Могу ли я это сделать?
asp.net-mvc wcf
2 ответа
2 Решение Ladislav Mrnka [2011-03-11 22:43:00]
Это точка абстрактного класса - вы не можете создать свой экземпляр. Вы должны создать instace производного не абстрактного класса, но в этом случае вы должны пометить свой Request класс KnownTypeAttribute описанием дочерних классов, которые могут быть переданы сообщениями WCF. Кроме того, WCF не нравится тип объекта как DataMember - он не будет работать, потому что WCF должен знать, какой тип следует десериализовать на клиенте.
0 John Saunders [2011-03-11 22:53:00]
Имейте в виду, что все, что вы отправляете службе, должно быть сериализовано и десериализовано, в большинстве случаев, как XML.
Точно, какой XML вы отправили бы службе, и что XML-схема описала бы? Если вы не можете ответить на эти вопросы, то и WCF не может.