c# - 将 WCF 协议(protocol)转换为类

标签 c# wcf servicecontract

我有具有类似属性的 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/

相关文章:

c# - 尝试优化 MongoDB 的 I/O

c# - 在客户端和 WCF 服务之间共享枚举?

c# - 在 WCF Rest 端点中使用参数 "params string[]"

c# - WCF 服务在 2 个不同的服务契约(Contract)上公开 2 个端点

c# - 将未知对象转换为接口(interface)的泛型接口(interface)(从最初明确的泛型类型到泛型集合类型的类型)

c# - 为什么这个 C# 正则表达式会使我的程序崩溃?

c# - 检索满足选定条件的数据的最佳实践

c# - 使用来自 WCF WebService 的模型

c# - “Do not use Abstract Base class in Design; but in Modeling/Analysis”