我注意到如果一个字段被指定为非强制性的,当我们生成代理类时,它还会生成一个与该字段相关的“[fieldname] IsSpecified”布尔值。 在使用Fiddler检查请求时,如果关联的'isSpecified'设置为false,则表示该字段不会通过电线发送。
我有两个与此相关的问题
1.这有什么意义?纯粹是为了最小化通过线路发送的数据量吗?
2.如果没有值传递给webservice上的参数,WCF将使用默认数据类型。在整数字段的情况下,默认值为0.因此,一旦进入该方法,如何判断该0是否是从客户端为该字段发送的任何内容生成的,或者它们是否确实发送了0?
答案 0 :(得分:4)
在您的问题2上,发送方未使用 的Specified
字段。在接收方,XML反序列化器将根据线路上相应字段的存在与否设置Specified
字段,这允许服务方法确定它们是否实际传输。
至于除了线表示的紧凑性之外你想要这样做的原因,我看到的一个例子是允许你一次更新记录中的几个字段的服务。除了为字段设置预期的非空值之外,该服务还针对两种特殊情况使用不同的线表示:
<field1 xsi:nil="true" />