C# WCF是否需要DataContract属性
我在写WCF服务和他的客户。我想在服务和客户端之间发送/接收自定义类的对象 我有3个模块C# WCF是否需要DataContract属性,c#,.net,wcf,serialization,C#,.net,Wcf,Serialization,我在写WCF服务和他的客户。我想在服务和客户端之间发送/接收自定义类的对象 我有3个模块 WCF服务 WCF客户端 公共类库 WCF服务和客户端都有对公共类库的引用。 我不想用DataContract属性标记所有类 所以,我的问题是“WCF是否需要DataContract属性?” 我使用.NET 4和netTcpBinding。您可以在WCF中使用多种序列化技术,这是它很好的适应性之一。看看: 不需要使用DataContract属性,没有这些属性,您的服务就可以正常工作 话虽如此,我真的不认
- WCF服务
- WCF客户端
- 公共类库
我使用.NET 4和netTcpBinding。您可以在WCF中使用多种序列化技术,这是它很好的适应性之一。看看:
不需要使用DataContract属性,没有这些属性,您的服务就可以正常工作 话虽如此,我真的不认为让您的服务和客户共享类库是最好的设计方法。如果您通过DataContracts公开您的类型,这将更加清晰 如果有一天,有人想使用您的服务,但无法访问共享类库,会发生什么情况?如果我没记错(IIRC),如果您不使用正式的数据协定标记,它默认会像字段序列化程序一样工作。这会起作用,但版本不太容易,因为私有更改会破坏客户机/服务器。在我看来,您应该始终使用数据契约/数据成员属性正式地修饰WCF类型。没有它们它也能工作,但出于错误的原因(IIRC,最初没有正式的标记就不能工作) “是否需要DataContract属性 世界粮食基金会“ 从技术上讲,不是。这取决于是否使用DataContractSerializer(这是许多绑定的默认设置) 还有其他选择:
当服务有一个方法([OperationContract]),该方法有我的自定义类的参数,而该类没有默认构造函数时,我从WCF服务主机收到InvalidDataContractException。即使您的服务和客户端共享一个类库,WCF也将尝试序列化您的类型,为此它需要一个默认构造函数。您的设计违反了web服务设计的基本原则,我认为您最好使用其他类似.NET remoting.Retracted ContractDescription的建议。我怀疑您可以使用ContractDescription来更改序列化程序,该序列化程序以某种方式表示,默认情况下,合同中只包含公共读/写属性和字段。讽刺的是,读取堆栈溢出的答案需要引用缩写的含义