views:

3214

answers:

2

In this class for example, I want to force a limit of characters the first/last name can allow.

public class Person
{
     public string FirstName { get; set; }
     public string LastName { get; set; }
}

Is there a way to force the string limit restriction for the first or last name, so when the client serializes this before sending it to me, it would throw an error on their side if it violates the lenght restriction?

Update: this needs to be identified and forced in the WSDL itself, and not after I've recieved the invalid data.

A: 

COnvert the property from an auto property and validate it yourself, you could then throw an argument exception or something similar that they would have to handle before submission.

NOTE: if languages other than .NET will be calling you most likely want to be validating it on the service side as well. Or at minimun test to see how it would work in another language.

Mitchel Sellers
+1  A: 

You can apply XML Schema validation (e.g., maxLength facet) using SOAP Extensions:

[ValidationSchema("person.xsd")]
public class Person { /* ... */ }

<!-- person.xsd -->

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;

  <xsd:element name="Person" type="PersonType" />

  <xsd:simpleType name="NameString">
     <xsd:restriction base="xsd:string">
        <xsd:maxLength value="255"/>
     </xsd:restriction>
  </xsd:simpleType>

  <xsd:complexType name="PersonType">
    <xsd:sequence>
         <xsd:element name="FirstName" type="NameString" maxOccurs="1"/>
         <xsd:element name="LastName"  type="NameString" maxOccurs="1"/>
     </xsd:sequence>
  </xsd:complexType>
</xsd:schema>
Mark Cidade
I feel like I'm missing something what namespace is the ValidationSchema attribute located in?
jasonlaflair
It's a custom class -- see the linked article ( http://msdn.microsoft.com/en-us/magazine/cc164115.aspx )
Mark Cidade