WCF中“FieldSpecified”的重点是什么?

时间:2013-08-13 08:25:07

标签: .net wcf web-services

我注意到如果一个字段被指定为非强制性的,当我们生成代理类时,它还会生成一个与该字段相关的“[fieldname] IsSpecified”布尔值。 在使用Fiddler检查请求时,如果关联的'isSpecified'设置为false,则表示该字段不会通过电线发送。

我有两个与此相关的问题

1.这有什么意义?纯粹是为了最小化通过线路发送的数据量吗?

2.如果没有值传递给webservice上的参数,WCF将使用默认数据类型。在整数字段的情况下,默认值为0.因此,一旦进入该方法,如何判断该0是否是从客户端为该字段发送的任何内容生成的,或者它们是否确实发送了0?

1 个答案:

答案 0 :(得分:4)

在您的问题2上,发送方未使用 Specified字段。在接收方,XML反序列化器将根据线路上相应字段的存在与否设置Specified字段,这允许服务方法确定它们是否实际传输。

至于除了线表示的紧凑性之外你想要这样做的原因,我看到的一个例子是允许你一次更新记录中的几个字段的服务。除了为字段设置预期的非空值之外,该服务还针对两种特殊情况使用不同的线表示:

  • 将此字段更新为null: <field1 xsi:nil="true" />
  • 不要更新此字段:完全省略XML元素。