2

我有具有类似属性的 WCF ServiceContract:

int P1 { [OperationContract()] get; [OperationContract()] set; }

我在客户端也需要同样的东西,但生成的协议给了我:

get_P1() 和 set_P1(int) 方法,所以我需要每次手动创建另一个类接口:

int P1 { get { return get_P1() } ; set { et_P1(value) ; }

我怎样才能自动化这样的类创建?

原因:我只想编辑界面和实现,其他的东西我想自动生成。

4

1 回答 1

2

您可以更改工具(svcutil 或“添加服务参考”)生成合同的方式,但这并不简单。您需要实现 WSDL 导入和代码生成扩展,然后将其连接到工具以在两种方法和属性之间进行转换。http://blogs.msdn.com/b/carlosfigueira/archive/2011/10/18/wcf-extensibility-wsdl-import-and-code-generation-extensions.aspx上的帖子包含有关这些扩展的一些信息。

另一种选择是在服务器和客户端之间共享合约——而不是让工具生成客户端代理,您只需在客户端项目中复制(或引用)合约文件。

所以,你可以这样做。但我认为你不应该。属性通常与对象状态的简单访问器相关联。拥有一个[OperationContract]属性意味着访问一个属性的行为现在有一个完整的网络往返的潜在成本,加上它需要的任何额外的序列化/打包/框架。方法没有那种隐含的要求,因为它们可以(并且经常这样做)执行多个任务,包括调用其他方法。即使此时在属性访问器中有一个操作合约是有意义的,但几乎没有人接触代码也不是很自然,因此可能会导致将来出现维护问题。

于 2013-02-13T06:06:20.443 回答