Использование Asp.net MVC 2 и WCF - Передача универсального объекта для вызова службы? - PullRequest
1 голос
/ 11 марта 2011
[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.

Поэтому в запросе DataContract указано DataMember с именем RequestObjectDTO.Я сделал это с объектом типа, надеясь, что смогу присоединить к нему другие мои DataContracts.

Это не сработало - выдает ошибку «Не удается создать абстрактный класс».

Какого типа это должно быть?Могу ли я сделать это?

Ответы [ 2 ]

2 голосов
/ 11 марта 2011

Это точка абстрактного класса - вы не можете создать его экземпляр.Вы должны создать набор производных неабстрактных классов, но в этом случае вы должны пометить свой Request класс KnownTypeAttribute, описывающим дочерние классы, которые могут транспортироваться сообщениями WCF.Более того, WCF не любит тип объекта как DataMember - он не будет работать, потому что WCF должен знать, какой тип должен быть десериализован на клиенте.

0 голосов
/ 11 марта 2011

Имейте в виду, что все, что вы отправляете в службу, должно быть сериализовано и десериализовано, в большинстве случаев, в виде XML.

Точно, какой XML вы отправили бы в службу, и какая XML-схема описала бы это?Если вы не можете ответить на эти вопросы, то и WCF не может.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...