Data distribution methods Description Pros Cons Best for
.NET assembly resources Store the data driving the validators as XML within text-based resources of a .NET assembly. Uses .NET no-touch auto-deployment to update validator data to client apps. Loads SOAP-serialized XML stream from a resource assembly. Validation changes require recompiling resources. Validation variation not supported—uses one set of data for all users and requests. Apps with low variability that require ease of implementation.
Per-request payloads Response to each Web service DataSet request could contain corresponding validation data as XML. Allows variation of validation data for each request. Doesn't require recompilation of an assembly for data updates. Sends validation data with response, often slowing app. Invasive changes needed to modify validation request processing. Apps with high variability and unavoidable implementation cost and performance impact.
Per-application-use payloads Data driving the validators is requested once by the client when the app is executed, then cached in memory during its use. Validation can vary in context of each user. Retrieves validation data only once per use, removing performance hit for per-request payloads. Limits variability to user context, not single requests. Extra call needed to get validation data at startup. Client code needed to match validators to payload data sets. Apps with medium variability in validation data that changes relatively frequently and varies by user but not request. Minimal performance and implementation costs.

Table 1. Distribute Your Validation Rules
Smart-client applications must update their validators whenever the data driving the validators changes. You have several options for distributing this data, including storing it within .NET assembly resources, transmitting it as an XML payload within each request that returns DataSets, or sending it as an XML payload that is retrieved once per application invocation. Each option varies in complexity of implementation and flexibility of support for the possible variations of validators' data. Each application's unique requirements determine which option you should implement.