C# 如何在WCF服务中重构数据契约?

C# 如何在WCF服务中重构数据契约?,c#,vb.net,wcf,refactoring,C#,Vb.net,Wcf,Refactoring,我们有很多WCF服务,它们只由我们自己的代码使用;使用它们的代码大多位于包含服务的相同解决方案文件中 但是,它们不为契约使用共享程序集,因此每次更改数据契约时,必须在使用该服务的所有项目中手动更新对该服务的引用。(那么代码需要手工修改) 那么如何进行简单的重构,比如在数据契约中重命名数据项? 是否有一种方法可以用一个命令更新单个解决方案中对服务的所有引用,而不必单击每个项目中的每个引用?您可能已经在此处回答了自己的问题 将数据契约移动到共享的“契约”项目,这将允许您使用Visual Studi

我们有很多WCF服务,它们只由我们自己的代码使用;使用它们的代码大多位于包含服务的相同解决方案文件中

但是,它们不为契约使用共享程序集,因此每次更改数据契约时,必须在使用该服务的所有项目中手动更新对该服务的引用。(那么代码需要手工修改)

那么如何进行简单的重构,比如在数据契约中重命名数据项?



是否有一种方法可以用一个命令更新单个解决方案中对服务的所有引用,而不必单击每个项目中的每个引用?

您可能已经在此处回答了自己的问题

将数据契约移动到共享的“契约”项目,这将允许您使用Visual Studio中的内置重构->重命名选项来更改名称,更改将反映在解决方案中的所有项目中

更新

为了澄清,合同项目是合同的内部“组织”。它允许您的许多项目引用一组合同。例如

WCF服务公开“List GetCustomerById(int id)”

WCF服务可能会调用处理层,处理层可能需要使用另一个项目等进行计算。所有这些项目都可以使用合同项目中的单个“客户”定义


WCF服务的任何消费者都将通过服务引用获得客户的定义。您不会共享合同项目或发送dll供其使用。

使用当前设置,您无法执行此操作,因为您每次都要重新生成代理。从SOA的角度来看,这很好,因为数据契约不应该经常更改。但是,如果您同时控制客户机和服务,并且它都是.Net,那么您可以按照Shonee的建议去做。使用svcutil中的/r选项从公共程序集生成代理。然后你就可以轻松地进行重构。

有人告诉我,我们不能使用共享契约项目,因为当“补丁”完成时,它会给版本控制带来问题。例如,两端的合同组件可能是在客户设置的不同时间构建的。在过去,这种类型的东西和.net远程处理有很多问题,我不知道这是否是WCF的真正问题,或者只是人们不希望做书本上说你不应该做的事情。你不会将合同项目提供给外部方-他们会通过服务获得所有合同。这对您服务的消费者没有任何影响。您只需使用它来组织合同,并在内部项目中共享它们。我将在我的回答中添加更多细节。。。