我有一个webservice,它的方法是将抽象基类型的参数Specification<TDomainModel>作为参数。我意识到,WCF不知道如何在不指定已知类型的情况下反/序列化它。但是,当我试图指定它们时,我仍然会得到这样的例外:
在试图序列化参数http://myproject.org:specification时出错。这个'MyProject.DomainModel.WebSnapshot.WebSnapshotSpecification‘消息是'Type InnerException,其数据契约名为'WebSnapshotSpecification:http://schemas.datacontract.org/2004/07/MyProject.DomainModel.WebSnapshot’,这是不需要的。向已知类型列表中添加任何静态不知道的类型--例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。
如果有人能看到我漏掉了什么东西,我们会非常感激的:)课程如下:
WebSnapshotRepositoryService
[ServiceContract(Namespace = "http://myproject.org")]
[ServiceKnownType(typeof(Specification<WebSnapshot>))]
[ServiceKnownType(typeof(WebSnapshotSpecification))]
public class WebSnapshotRepositoryService
{
[OperationContract]
public IEnumerable<WebSnapshot> Get(Specification<WebSnapshot> specification)
{
// Code here.
}
}和WebSnapshotSpecification
public class WebSnapshotSpecification : Specification<WebSnapshot>
{
public override Expression<Func<WebSnapshot, bool>> IsSatisfiedByExpression()
{
return (t) => true;
}
}它是WebSnapshot的规范。
[DataContract(IsReference = true, Name = "WebSnapshot", Namespace = "MyProject.DomainModel.WebSnapshot")]
public class WebSnapshot
{
[DataMember(Order = 1)]
public virtual string Name { get; set; }
[DataMember(Order = 2)]
public virtual string PictureFilePath { get; set; }
[DataMember(Order = 3)]
public virtual int PictureHeight { get; set; }
[DataMember(Order = 4)]
public virtual int PictureWidth { get; set; }
}最后,这里是Specification<TDomainModel>
public abstract class Specification<TDomainModel>
{
public virtual bool IsSatisfiedBy(TDomainModel domainObject)
{
return IsSatisfiedByExpression().Compile().Invoke(domainObject);
}
public virtual TDomainModel AssembleObject()
{
return Activator.CreateInstance<TDomainModel>();
}
public abstract Expression<Func<TDomainModel, bool>> IsSatisfiedByExpression();
}发布于 2011-07-29 12:38:39
您似乎试图向服务发送一个WebSnapshotSpecification类实例,并期望WCF序列化/反序列化它包含的IsSatisfiedByExpression 方法。WCF不支持这种情况。如果WebSnapshotSpecification类具有一些属性,那么这些属性将被序列化/反序列化,但是方法从来不是WCF隐式或显式DataContract定义的一部分。
https://stackoverflow.com/questions/6872783
复制相似问题