C# 将WCF协定移动到单独的dll

C# 将WCF协定移动到单独的dll,c#,.net,wcf,C#,.net,Wcf,我想将WCF合同接口移动到第三个DLL,并在手动生成代理时开始从客户端使用它们 当我从客户端使用DLL中的接口生成代理时,这些接口是否必须具有[ServiceContract]属性 对于只有合同和DTO可在客户端和服务器之间共享的Dll,您知道什么是最佳命名吗。将WCF数据和服务合同放在单独的程序集中是非常常见的做法。在我以前的项目中,我们使用了类似于Company.OurProject.Contracts.dll的命名。 我认为,要通过重用现有类来生成代理,您应该将服务契约的接口(标有[Ser

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

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


对于只有合同和DTO可在客户端和服务器之间共享的Dll,您知道什么是最佳命名吗。

将WCF数据和服务合同放在单独的程序集中是非常常见的做法。在我以前的项目中,我们使用了类似于
Company.OurProject.Contracts.dll的命名。
我认为,要通过重用现有类来生成代理,您应该将服务契约的接口(标有
[ServiceContractAttribute]
的接口)和相应的数据契约放入该程序集。我会避免把服务的实际实施放在那里


下面是另一个很好的答案,以便更深入地了解在选择“在引用的程序集中重用类型”时可以重用什么:

这是一种常见的方法,可能也是推荐的方法

是的,您应该将服务合同放在服务接口上,服务接口将位于合同dll中


请记住,命名空间不必与dll的名称匹配。假设您当前的程序集类似于
CompanyName.Technology.Service.dll
,其命名空间类似于
CompanyName.Technology.Service
,您应该将契约提取到另一个程序集,但保持命名空间不变(前提是它仍然有意义)程序集名称为
CompanyName.Technology.Service.Contracts
。您不希望有一个名称为“contracts”的命名空间。

我使用*.ServiceContracts.dll,因为我的系统中有多个contract程序集。例如,DataContracts.dll用于访问数据存储。

手动生成代理是什么意思?据我所知,您希望通过重用现有程序集中的类来生成代理。是这样吗?另外,如果共享二进制文件,我会避免生成代理。我发现这是一种更干净的使用WCF的方式。您可以直接使用代理,而不是生成包装代理的代码?为了向后兼容?@xr280xr-我想说的是,如果不在ServiceContract属性中设置自定义名称空间,则将其移动到另一个程序集,您不希望更改名称空间。这将导致现有客户之间的合同不匹配。