我希望将WCF合约接口移动到第三个DLL,并在我手动生成代理时开始从客户端使用它们。
当我从客户端使用它们生成代理时,DLL中的那些接口是否必须具有[ServiceContract]
属性?
任何想法Dll的最佳命名是什么,只有合同和DTO在客户端和服务器之间共享。
答案 0 :(得分:5)
将WCF数据和服务合同放在单独的程序集中是很常见的做法。在我之前的项目中,我们使用了Company.OurProject.Contracts.dll
之类的命名。
我认为要生成具有重用现有类的代理,您应该将服务契约的接口(标有[ServiceContractAttribute]
的那些)和相应的数据契约放到该程序集中。我会避免在那里实施服务。
以下是关于SO的另一个很好的答案,可以更深入地了解选择“重用引用程序集中的类型”时可以重用的内容:WCF Service Reference generates its own contract interface, won't reuse mine
答案 1 :(得分:1)
这是常见的,也许是推荐的方法。
是的,您应该将服务合同放在合同dll中的服务接口上。
请记住,命名空间不必与dll的名称匹配。假设您当前的程序集类似CompanyName.Technology.Service.dll
,其名称空间如CompanyName.Technology.Service
,您应该将合同提取到另一个程序集但是保持名称空间相同(提供它仍然有意义)并具有程序集名称CompanyName.Technology.Service.Contracts
。你不想拥有的是一个名为“contracts”的命名空间。
答案 2 :(得分:0)
我使用* .ServiceContracts.dll,因为我的系统中最终有多个合同程序集。例如,DataContracts.dll用于访问数据存储。