Использование 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 не может.