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