2014-03-19 222 views
0

我试图主机那里是返回以下类型的方法的服务:DataContractException在托管WCF服务

[DataContract] 
[Obfuscation(ApplyToMembers = true, Exclude = true)] 
[Serializable] 
public class Output 
{ 
    [DataMember] 
    public DataSet dsOutput{get;set;} 
} 

方法签名如下:

[OperationContract] 
[WebGet] 
function Output matchData(DataSet pDSSide1,DataSet pDSSide2) 
{ 
    return new Output(); 
} 

在浏览服务我遇到以下异常:

System.InvalidOperationException:在调用WSDL ex时抛出异常端口扩展:System.ServiceModel.Description.DataContractSerializerOperationBehavior 合同:http://tempuri.org/:TesterTool ---->

System.Runtime.Serialization.InvalidDataContractException:类型 '的System.Data.DataRow' 不能被序列化。考虑使用DataContractAttribute属性标记它,并使用DataMemberAttribute属性标记要序列化的所有成员。如果类型是一个集合,请考虑使用CollectionDataContractAttribute来标记它。有关其他支持的类型,请参阅Microsoft .NET Framework文档。 `

任何建议。

+0

是,不返回数据集,该框架将如何能够解析所有可能的数据集? – Jocke

回答

1

通过服务发送数据表不是一个好习惯。

如前所述通过govindaraj here

最好的方法是使用自定义对象的自定义集合。

如果您使用的是2.0,那么您可以使用泛型集合而不是 自定义集合来减少代码。

怎么样?

  1. 创建自定义数据对象(只包含私有字段和每个字段的公共属性),它类似于在 数据表的每一行。

  2. 创建一个将执行所有数据库(在这种情况下,数据集)访问和翻译到自定义对象的图层。

  3. 所有客户端代码将访问该层。

+0

当复制他人的话时,你绝对必须像上面所做的那样提供归属。请务必在将来做到这一点。 –