Web服务更改方法响应而不通知客户端

时间:2016-03-10 15:58:36

标签: .net web-services wcf wsdl asmx

假设我有一个web服务,它返回所有方法的类,通知客户端进程的状态,例如:

15 * * * * * java -jar /home/scarter/scripts/java/autobackup.jar

现在我们要为此类添加属性,而不强制所有使用我们服务的客户端更新其软件。这可能吗?

例如:

public class WsResult {

  string result; // either "error" or "ok"

}

我正在寻找WCF和ASMX的答案。

2 个答案:

答案 0 :(得分:5)

<强> WCF

有可能。您只需添加一个新属性即可,只要不需要此新属性即可。有关详细信息,请参阅Best Practices: Data Contract Versioning文章的第8点。

如果您需要处理往返方案,您应该阅读IExtensibleDataObject接口。当数据从服务器发送到客户端并且预期它将被发回时,发生往返。有关详细信息,请参阅Forward-Compatible Data Contracts文章。

<强> ASMX

ASMX的情况是一样的。您可以添加新属性,所有客户端都应该可以使用。在这种情况下,您还可以使用IExtensibleDataObject界面。

最终评论

这个答案基于VS 2015的实证测试。我强烈建议你这样做,即:编写简单的WCF / ASMX服务器和客户端,并验证我描述的行为。我花了几分钟才这样做。或者甚至更好,您可以使用现有的服务。

我建议您使用其他测试,因为您可能正在使用某些非默认配置来更改WCF / ASMX服务的默认行为,因此最好进行检查。我不知道这种配置,但你永远不知道。

答案 1 :(得分:-1)

使用WCF,您实际上可以在客户端和服务器端拥有不同的类,这通常也会在使用添加服务引用 UI时发生。使这项工作的技巧是在DataContract属性上设置命名空间和名称(如果成员名称不同,甚至可能在DataMember属性上设置名称。)

只有匹配的属性才会被反序列化,因此在服务器端添加属性不会影响客户端。