【发布时间】:2023-04-03 23:19:02
【问题描述】:
我有如下的 WCF 操作合同。我有一个要求,其中这个操作合同应该有一个额外的参数来处理客户端场景。但是我无法更改操作合同签名,因为它也被其他各种客户使用。
据我检查,WCF 中的操作合同不能有可选参数。还有其他建议吗?
Code GetDataElementes(String MyType, String MyUniqueID, out DataTable dTableOut);
【问题讨论】:
我有如下的 WCF 操作合同。我有一个要求,其中这个操作合同应该有一个额外的参数来处理客户端场景。但是我无法更改操作合同签名,因为它也被其他各种客户使用。
据我检查,WCF 中的操作合同不能有可选参数。还有其他建议吗?
Code GetDataElementes(String MyType, String MyUniqueID, out DataTable dTableOut);
【问题讨论】:
WCF 操作可以有可选参数。任何可为空的参数都是可选的。客户端可以传递 null,也可以在发送的 XML 中省略参数。
此功能对于向后兼容很重要。
只需创建一个包含所有参数的方法并处理某些参数为空的情况。
关于参数:创建 DTO 类并返回其实例通常是更好的方式。所有输出参数都成为该类的属性。
【讨论】:
out 参数的好建议。 DTO 更适合 SOA 概念 (IMO),而 out 参数是特定于 C# 的,更多的是一般的编程概念。
服务上的方法名称必须是唯一的。您可以为方法使用不同的名称,也可以像这样设置OperationContract 的Name 属性:
[OperationContract(Name = "GetDataElementes")]
Code GetDataElementes(String MyType, String MyUniqueID, out DataTable dTableOut);
[OperationContract(Name = "GetDataElementes2")]
Code GetDataElementes();//Or with different parameters
还可以查看this 可能会有所帮助。
【讨论】: