2012-01-17 156 views
0

我有一个WCF服务,它带有一个返回空值的操作契约。即:它应该返回一些自定义类“ProgressReport”,但在客户端应用程序中它显示为空。在WCF服务本身中,自定义类被实例化并返回而没有错误,并且在任何时候都不会变为空。从WCF服务操作返回空值

'ProgressReport'类未定义为DataContract,因为它在另一个程序集中定义。

对于返回'ProgressReport'的操作,WcfTestClient通知我它不能执行操作,因为它使用类型'ProgressReport'。 我试过用System.Object添加一个operationcontract作为返回类型,但它给了我同样的错误(无法执行操作,因为它使用了'System.Object'类型)

有没有人知道如何解决这个问题?

+3

是否定义[DataContract]上ProgressReport类[数据成员]属性的属性和您想要转移的每个属性? –

+0

@KarelFrajtak:如果我的问题是正确的,那么这个类就被定义为externaly,并且不能被改变(3rd-Party-Lib左右)... – ChrFin

+0

我看,比你的代码在你的答案中提出的建议是正确的。 –

回答

2

你可以尽量延长ProgressReport -class(如果它没有密封),并定义为DataContract(但我认为不与类的属性有所帮助,他们需要被标记为DataMembers)或创建一个自己的类作为一种代理并返回该对象:

[DataContract] 
public class ProgressReportWcf : ProgressReport 
{ 
} 

[DataContract] 
public class ProgressReportWcf 
{ 
    [DataMember] 
    public int Id { get; set; } 
    //aso... 

    public ProgressReportWcf(ProgressReport report) 
    { 
     Id = report.Id; 
     //aso... 
    } 
} 
+0

这就是我担心的:写一个代理类。好吧,可能会更糟糕,让我们开始吧。 – jkokorian