将WCF合同移动到单独的dll

时间:2012-05-13 22:23:52

标签: c# .net wcf

我希望将WCF合约接口移动到第三个DLL,并在我手动生成代理时开始从客户端使用它们。

当我从客户端使用它们生成代理时,DLL中的那些接口是否必须具有[ServiceContract]属性?

任何想法Dll的最佳命名是什么,只有合同和DTO在客户端和服务器之间共享。

3 个答案:

答案 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用于访问数据存储。