我有具有类似属性的 WCF ServiceContract:
int P1 { [OperationContract()] get; [OperationContract()] set; }
我在客户端上需要相同的但生成的协议(protocol)给了我:
get_P1() 和 set_P1(int) 方法,因此我每次都需要手动创建另一个类似的类接口(interface):
int P1 { get { return get_P1() } ; set { et_P1(value) ; }
如何自动创建此类类?
原因:我唯一想要编辑的是接口(interface)和实现,所有其他东西我想要自动生成。
最佳答案
您可以更改工具(svcutil 或“添加服务引用”)生成契约(Contract)的方式,但这并不简单。您需要实现 WSDL 导入和代码生成扩展,然后将其连接到工具以在两种方法和属性之间进行转换。帖子于http://blogs.msdn.com/b/carlosfigueira/archive/2011/10/18/wcf-extensibility-wsdl-import-and-code-generation-extensions.aspx有一些有关这些扩展的信息。
另一种选择是在服务器和客户端之间共享契约(Contract) - 您只需在客户端项目中复制(或引用)契约(Contract)文件,而不是让工具生成客户端代理。
所以,你可以这样做。但我认为你不应该这样做。属性通常与对象状态的简单访问器相关联。拥有 [OperationContract]
属性意味着访问属性的行为现在具有完整网络往返的潜在成本,加上它所需要的任何附加序列化/打包/框架。方法没有这种隐含的要求,因为它们可以(并且经常)执行多个任务,包括调用其他方法。即使此时在属性访问器中拥有操作契约是有意义的,但对于几乎没有新接触代码的人来说,这并不自然,因此可能会导致将来的维护问题。
关于c# - 将 WCF 协议(protocol)转换为类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14847004/