6 Appendix A: Full WSDL

For ease of implementation, the full WSDL is provided below. After the full WSDL, a binding is included for using the Resource and ResourceFactory port types with SOAP 1.2 [SOAP1.2-1/2003] over the "net.tcp" transport [MC-NMF]. This binding is included to illustrate how the IdentityManagementOperation SOAP header is used in the SOAP messages and should not be construed to restrict servers from implementing the IMDA protocol extensions using other versions of SOAP or over other transports.

Full WSDL.

[SOAP]

 <?xml version="1.0" encoding="utf-8"?>
 <wsdl:definitions 
     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess"
 xmlns:da="http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess"
   xmlns:wsa="http://www.w3.org/2005/08/addressing"
   xmlns:wxf="http://schemas.xmlsoap.org/ws/2004/09/transfer"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12"
   >
  
 <wsdl:types>
 <xsd:schema>
   <xsd:import
    namespace="http://schemas.xmlsoap.org/ws/2004/09/transfer" />
 </xsd:schema>
  
     <xsd:schema elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2006/11/IdentityManagement/DirectoryAccess">
  
       <xsd:complexType name="ExtensibleType">
         <xsd:complexContent mixed="true">
           <xsd:restriction base="xsd:anyType">
             <xsd:sequence>
               <xsd:any processContents="lax"
                        minOccurs="0" maxOccurs="unbounded" />
             </xsd:sequence>
           </xsd:restriction>
         </xsd:complexContent>
       </xsd:complexType>
  
       <xsd:element name="AttributeType">
         <xsd:complexType>
           <xsd:complexContent>
             <xsd:extension base="da:ExtensibleType" />
           </xsd:complexContent>
         </xsd:complexType>
       </xsd:element>
  
       <xsd:complexType name="ValueXmlType">
         <xsd:complexContent>
           <xsd:extension base="da:ExtensibleType" />
         </xsd:complexContent>
       </xsd:complexType>
  
       <xsd:complexType name="PartialAttributeXmlType">
         <xsd:complexContent>
           <xsd:extension base="da:ExtensibleType" />
         </xsd:complexContent>
       </xsd:complexType>
  
       <xsd:complexType name="AttributeTypeAndValueXmlType">
         <xsd:sequence>
           <xsd:element ref="da:AttributeType"
                        minOccurs="1" maxOccurs="1" />
           <xsd:element name="AttributeValue" type="da:ValueXmlType"
                        minOccurs="0" maxOccurs="1" />
         </xsd:sequence>
       </xsd:complexType>
  
       <xsd:element name="AttributeTypeAndValue"  
                    type="da:AttributeTypeAndValueXmlType" />
  
       <xsd:element name="BaseObjectSearchRequest">
         <xsd:complexType>
           <xsd:sequence>
             <xsd:element ref="da:AttributeType" minOccurs="0"  
                          maxOccurs="unbounded" />
           </xsd:sequence>
           <xsd:attribute name="Dialect" type="xsd:anyURI" />
         </xsd:complexType>
       </xsd:element>
  
       <xsd:element name="BaseObjectSearchResponse">
         <xsd:complexType>
           <xsd:sequence>
             <xsd:element name="PartialAttribute"  
                          type="da:PartialAttributeXmlType"
                          minOccurs="1" maxOccurs="unbounded" />
           </xsd:sequence>
         </xsd:complexType>
       </xsd:element>
  
       <xsd:element name="AddRequest">
         <xsd:complexType>
           <xsd:sequence>
             <xsd:element ref="da:AttributeTypeAndValue"
                          minOccurs="0" maxOccurs="unbounded" />
           </xsd:sequence>
           <xsd:attribute name="Dialect" type="xsd:anyURI" />
         </xsd:complexType>
       </xsd:element>
  
       <xsd:simpleType name="OperationXmlType">
         <xsd:restriction base="xsd:NMTOKEN">
           <xsd:enumeration value="add" />
           <xsd:enumeration value="delete" />
           <xsd:enumeration value="replace" />
         </xsd:restriction>
       </xsd:simpleType>
  
       <xsd:element name="Change" >
         <xsd:complexType>
           <xsd:complexContent>
             <xsd:extension base="da:AttributeTypeAndValueXmlType">
               <xsd:attribute name="Operation" type="da:OperationXmlType"
                              use="required" />
             </xsd:extension>
           </xsd:complexContent>
         </xsd:complexType>
       </xsd:element>
  
       <xsd:element name="ModifyRequest">
         <xsd:complexType>
           <xsd:sequence>
             <xsd:element ref="da:Change"
                          minOccurs="0" maxOccurs="unbounded" />
           </xsd:sequence>
           <xsd:attribute name="Dialect" type="xsd:anyURI" />
         </xsd:complexType>
       </xsd:element>
  
       <xsd:element name="IdentityManagementOperation" />
  
       <xsd:element name="AttributeTypeOrValueAlreadyExists">
         <xsd:complexType>
           <xsd:sequence>
             <xsd:element ref="da:AttributeTypeAndValue"
                          minOccurs="0" maxOccurs="unbounded" />
           </xsd:sequence>
         </xsd:complexType>
       </xsd:element>
  
       <xsd:element name="AttributeTypeNotValidForDialect">
         <xsd:complexType>
           <xsd:sequence>
             <xsd:element ref="da:AttributeType"
                          minOccurs="1" maxOccurs="unbounded" />
           </xsd:sequence>
         </xsd:complexType>
       </xsd:element>
  
       <xsd:element name="AttributeTypeNotValidForEntry">
         <xsd:complexType>
           <xsd:sequence>
             <xsd:element ref="da:AttributeType"
                          minOccurs="1" maxOccurs="unbounded" />
           </xsd:sequence>
         </xsd:complexType>
       </xsd:element>
  
     </xsd:schema>
   </wsdl:types>
  
   <wsdl:message name="BaseObjectSearchRequestMessage">
     <wsdl:part name="BaseObjectSearchRequestMessageBody" 
                element="da:BaseObjectSearchRequest"/>
   </wsdl:message>
  
   <wsdl:message name="BaseObjectSearchResponseMessage">
     <wsdl:part name="BaseObjectSearchResponseMessageBody" 
                element="da:BaseObjectSearchResponse"/>
   </wsdl:message>
  
   <wsdl:message name="AddRequestMessage">
     <wsdl:part name="AddRequestMessageBody" element="da:AddRequest"/>
   </wsdl:message>
  
   <wsdl:message name="AddResponseMessage">
     <wsdl:part name="AddResponseMessageBody" element="wxf:ResourceCreated"/>
   </wsdl:message>
  
   <wsdl:message name="ModifyRequestMessage">
     <wsdl:part name="ModifyRequestMessageBody" element="da:ModifyRequest"/>
   </wsdl:message>
  
   <wsdl:message name="ModifyResponseMessage" />
  
   <wsdl:message name="DeleteRequestMessage" />
  
   <wsdl:message name="DeleteResponseMessage" />
  
   <wsdl:message name="IdentityOperationManagementMessage_Header">
     <wsdl:part name="request_header" 
                element="da:IdentityManagementOperation" />
   </wsdl:message>
  
   <wsdl:portType name="Resource">
     <wsdl:documentation>
       This is the port for reading, modifying and deleting an identity object.
     </wsdl:documentation>
     <wsdl:operation name="Get">
       <wsdl:input message="da:BaseObjectSearchRequestMessage" 
         wsa:Action="http://schemas.xmlsoap.org/ws/2004/09/transfer/Get" />
       <wsdl:output message="da:BaseObjectSearchResponseMessage"    wsa:Action="http://schemas.xmlsoap.org/ws/2004/09/transfer/GetResponse" /> 
     </wsdl:operation>
     <wsdl:operation name="Put">
       <wsdl:input message="da:ModifyRequestMessage" 
          wsa:Action="http://schemas.xmlsoap.org/ws/2004/09/transfer/Put" />
       <wsdl:output message="da:ModifyResponseMessage" wsa:Action="http://schemas.xmlsoap.org/ws/2004/09/transfer/PutResponse" />
     </wsdl:operation>
     <wsdl:operation name="Delete">
       <wsdl:input message="da:DeleteRequestMessage" 
          wsa:Action="http://schemas.xmlsoap.org/ws/2004/09/transfer/Delete" />
       <wsdl:output message="da:DeleteResponseMessage" wsa:Action="http://schemas.xmlsoap.org/ws/2004/09/transfer/DeleteResponse" />
     </wsdl:operation>
   </wsdl:portType>
  
   <wsdl:portType name="ResourceFactory">
     <wsdl:documentation>
       This is the port for creating a new identity object.
     </wsdl:documentation>  
     <wsdl:operation name="Create">
       <wsdl:input message="da:AddRequestMessage" 
          wsa:Action="http://schemas.xmlsoap.org/ws/2004/09/transfer/Create" />
       <wsdl:output message="da:AddResponseMessage" 
  wsa:Action="http://schemas.xmlsoap.org/ws/2004/09/transfer/CreateResponse" />
     </wsdl:operation>
   </wsdl:portType>
  
 </wsdl:definitions>

Binding for using the Resource and ResourceFactory port types with [SOAP1.2-1/2003] over the "net.tcp" transport [MC-NMF]:

 <wsdl:binding name="NetTcpBinding_Resource" type="Resource">
     <wsdl:documentation>
       Binding for the Resource port type on the net.tcp transport
       using SOAP 1.2.
     </wsdl:documentation>
     <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
     <wsdl:operation name="Get">
       <soap12:operation 
            soapAction="http://schemas.xmlsoap.org/ws/2004/09/transfer/Get"
            style="document" />
       <wsdl:input>
         <soap12:header
            message="da:IdentityOperationManagementMessage_Header" 
            part="request_header" use="literal" />
         <soap12:body use="literal" />
       </wsdl:input>
       <wsdl:output>
         <soap12:body use="literal" />
       </wsdl:output>
     </wsdl:operation>
     <wsdl:operation name="Put">
       <soap12:operation 
          soapAction="http://schemas.xmlsoap.org/ws/2004/09/transfer/Put" 
          style="document" />
       <wsdl:input>
         <soap12:header
            message="da:IdentityOperationManagementMessage_Header" 
            part="request_header" use="literal" />
         <soap12:body use="literal" />
       </wsdl:input>
       <wsdl:output>
         <soap12:body use="literal" />
       </wsdl:output>
     </wsdl:operation>
     <wsdl:operation name="Delete">
       <soap12:operation 
         soapAction="http://schemas.xmlsoap.org/ws/2004/09/transfer/Delete" 
         style="document" />
       <wsdl:input>
         <soap12:body use="literal" />
       </wsdl:input>
       <wsdl:output>
         <soap12:body use="literal" />
       </wsdl:output>
     </wsdl:operation>
   </wsdl:binding>
  
   <wsdl:binding
      name="NetTcpBinding_ResourceFactory" 
      type="ResourceFactory">
     <wsdl:documentation>
       Binding for the ResourceFactory port type
       on the net.tcp transport using SOAP 1.2.
     </wsdl:documentation>
     <soap12:binding 
        transport="http://schemas.microsoft.com/soap/tcp" />
     <wsdl:operation name="Create">
       <soap12:operation 
          soapAction="http://schemas.xmlsoap.org/ws/2004/09/transfer/Create" 
          style="document" />
       <wsdl:input>
         <soap12:header 
           message="da:IdentityOperationManagementMessage_Header" 
           part="request_header" use="literal" />
         <soap12:body use="literal" />
       </wsdl:input>
       <wsdl:output>
         <soap12:body use="literal" />
       </wsdl:output>
     </wsdl:operation>
   </wsdl:binding>