Silverlight中的WCF服务无法识别自定义类和方法

时间:2009-07-24 19:10:17

标签: silverlight web-services

我有以下网络服务:

[ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class MyTestClass
    {
        [OperationContract]
        public List<TrackInfo> GetAll(string songName)
        {
            return new List<tracksInfo>;
        }
}

我的目的很简单。 Anyhows,当TrackInfo在服务引用之外的类中声明时,另一端的服务(意味着在silverlight区域中)仅识别TrackInfo类,但无法找到GetAll方法。当我尝试将trackinfo类放在引用内但在MyTestClass之外时,会出现同样的问题

我尝试将trackinfo类放在serivce中作为datacontract:

[DataContract]
    public class TrackInfo
    {
        public int ID { get; set; }
        //Should consider using a stream instead
        public List<Image> FullSizeNotes { get; set; }
        public Image TrackNotes { get; set; }
        public Stream MidiFile { get; set; }
    }

现在服务识别GetAll函数,但不识别trackinfo的属性。

2 个答案:

答案 0 :(得分:1)

数据合同是一种“选择加入”技术,与ASMX服务中的XML Serializer不同。除非你另有说明,否则那个序列化所有公共字段和公共读/写属性。

数据合同需要使用[DataMember]属性对要序列化的属性进行修饰。

[DataContract]
public class TrackInfo
{
        [DataMember]
        public int ID { get; set; }
        //Should consider using a stream instead
        [DataMember]
        public List<Image> FullSizeNotes { get; set; }
        [DataMember]
        public Image TrackNotes { get; set; }
        [DataMember]
        public Stream MidiFile { get; set; }
}

答案 1 :(得分:0)

另一种适用于.NET 3.5 SP1的方法是将您的实体外部化,这样您就不必编写它们了。请务必阅读完整图片的评论:

http://community.irritatedvowel.com/blogs/pete_browns_blog/archive/2009/07/13/Sharing-Entities-between-WCF-and-Silverlight.aspx

基本上,您在客户端和服务器之间共享类文件代码,并在设置服务引用时,告诉VS重用客户端上已存在的类型。

皮特