On your question 2, the Specified
fields are not used only by the sending side. On the receiving side, the XML deserialiser will set the Specified
fields according to the presence or absence of the corresponding fields on the wire, which allows the service methods to find out whether they were actually transmitted.
As for why you would want to do this apart from compactness of wire representation, an example I've seen is a service which allows you to update several fields in a record at once. In addition to setting the expected non-null values for fields, the service uses different wire representations for two special cases:
- Update this field to null:
<field1 xsi:nil="true" />
- Don't update this field: The XML element is omitted altogether.