在wcf项目中共享公共类

时间:2012-10-23 14:18:03

标签: c# wcf service-reference code-sharing

class MyCommonClass
{
//properties
}

此类应该可以在

中访问
  1. 服务项目
  2. wcf-client project
  3. 他们引用的另一个。在这个共同的项目中,我无法生成服务参考。
  4. 我认为,我无法在MyCommonClass中生成ServiceReferences但是如何将类标记为不可序列化?在属性中有IgnoreDataMemberAttribute。我还尝试重用位于常见项目中的MyCommonClass类型,但它仍然生成

    更新

    换句话说:如果在ServiceOperation中使用某种类型,它会自动生成到wsdl文档中。如何禁用它? (我不希望它在wcf-client端)

1 个答案:

答案 0 :(得分:0)

目前尚不清楚公共类是否需要部分WCF服务合同,因此可以通过WSDL文档使任何客户端可用,或者如果您正在尝试使WCF服务和WCF客户端都可以访问公共类作为标准的.NET类。

在服务和客户端之间共享标准.NET类的唯一原因是提供对共享逻辑的访问。否则,只需使用DataContractSerializable标记该类,以使服务通过WSDL将类公开给客户端。请记住,其中一个four tenets of SOA是共享类型(WSDL)而不是类(.NET程序集)。

根据更新的问题,您可以通过强制WCF使用XmlSerializer而不是默认DataContractSerializer来更好地控制WCF序列化为soap XML的内容。此外,您可能希望将域模型对象与WCF服务公开的对象分离,如this SO question and answers中所述。这个excellent blog post解释了两个序列化器之间的差异以及如何强制WCF使用XmlSerializer