Geeks With Blogs
Scott Wojan DotRant BLOG

I simply DO NOT understand how Microsoft can be this far along with a tool like WCF and it STILL tout it as being an "Enterprise" tool.

For example... The following is a simple xsd schema with a VERY simple data contract that any enterprise would expect an "enterprise system" to be able to handle:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Sample"
    targetNamespace="http://tempuri.org/Sample.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/Sample.xsd"
    xmlns:mstns="http://tempuri.org/Sample.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
 
 <xs:element name="SomeDataElement">
    <xs:annotation>
      <xs:documentation>This documents the data element. This sure would be nice for consumers to see!</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:all>
        <xs:element name="Description" minOccurs="0">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:minLength value="0"/>
              <xs:maxLength value="255"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
      </xs:all>
      <xs:attribute name="IPAddress" use="required">
        <xs:annotation>
          <xs:documentation>Another explanation!  WOW!</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:pattern value="(([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
 </xs:element>
 
</xs:schema> 

An minimal example xml document would be:

<?xml version="1.0"encoding="utf-8" ?>
<SomeDataElementxmlns="http://tempuri.org/Sample.xsd" IPAddress="1.1.168.10">
</SomeDataElement>

With the max example being: 

<?xml version="1.0"encoding="utf-8" ?>
<SomeDataElementxmlns="http://tempuri.org/Sample.xsd" IPAddress="1.1.168.10">
 <Description>ddd</Description>
</SomeDataElement>

This schema simply CANNOT be exposed by WCF. 

Let's list why: 

  1. svcutil.exe will not generate classes for you because it can't read an xsd with xs:annotation.
  2. Even if you remove the documentation, the DataContractSerializer DOES NOT support attributes so IPAddress would become an element this not meeting the contract
  3. xsd.exe could generate classes but it is a very legacy tool, generates legacy code, and you still suffer from the following issues:
  4. NONE of the serializers support emitting of the xs:annotation documentation.  You'd think a consumer would really like to have as much documentation as possible!
  5. NONE of the serializers support the enforcement of xs:restriction so you can forget about the xs:minLength, xs:maxLength, or xs:pattern enforcement.

Microsoft... please, please, please, please look at putting the work into your serializers so that they support the very basics of designing enterprise data contracts!!

 

Posted on Friday, December 10, 2010 12:40 PM Rants | Back to top

Copyright © Scott Wojan | Powered by: GeeksWithBlogs.net