将新参数添加到WCF操作:选择?

Mik*_*las 6 wcf wsdl web-services optional-parameters

处理向现有操作添加新(可选)参数而不需要客户端更新其WSDL的最佳方法是什么?我不想更新命名空间来描述新版本的服务合同,因为这应该与旧客户端向后兼容.

我应该使用新参数添加新操作作为重载吗?或者我应该只将参数添加到现有操作?

这是我的操作:

[OperationContract]
MyResponse GetData();
Run Code Online (Sandbox Code Playgroud)

应该是:

[OperationContract]
MyResponse GetData(); 

[OperationContract]
MyResponse GetData(string filter);
Run Code Online (Sandbox Code Playgroud)

或者更简单地说,只需将其更改为:

[OperationContract]
MyResponse GetData(string filter);
Run Code Online (Sandbox Code Playgroud)

后一个选项似乎是最好的,根据我的参考书," 对客户端的影响是无.新服务在服务时初始化为默认值. "WCF是否将其初始化为所谓的默认值?如果是这样,默认值是多少?

Age*_*191 13

需要考虑的一件事是,您不能拥有两个具有相同名称的OperationContracts.它序列化的方式会引发错误.

最好的方法是使用选项3(仅添加新参数)并在方法逻辑帐户中使用它,对于那些尚未更新的客户端,它是空值.如果这是客户端需要更新的重大更改,请确保不会因为异常而导致整个应用程序死亡.

  • 这是一个不间断的变化.如果过滤器为空或正常空,我将处理. (2认同)
  • @marc_s:由于WCF的灵活性,只要该值可以为null,没有传递给它的客户端仍然可以工作.这是在WCF中允许版本不匹配的优势. (2认同)