wcfsoaprequestinput-parameters

WCF and Input Parameter Order in SOAP Envelope


I'm getting an Object reference not set to an instance of object error in my WCF web service which uses webHttpBinding (soap 1.1) I have noticed that if you have the input parameters in a certain order the error does not get raised.

i.e.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:not="http://schemas.globalfoundries.com/NotificationService">
   <soapenv:Header/>
   <soapenv:Body>
      <not:NotifyWorkflowItemUpdate>
         <not:userIDs>testUserID</not:userIDs>
         <not:taskID>testTaskID</not:taskID>
         <not:taskType>testTaskType</not:taskType>
         <not:status>testStatus</not:status>
         <not:appID>testAppID</not:appID>
         <not:message>testMessage</not:message>
      </not:NotifyWorkflowItemUpdate>
   </soapenv:Body>
</soapenv:Envelope>

However if I change the order of the input parameters in the request template I get the aforementioned error. i.e. (note message and userIDs parameters are switched)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:not="http://schemas.globalfoundries.com/NotificationService">
   <soapenv:Header/>
   <soapenv:Body>
      <not:NotifyWorkflowItemUpdate>
     <not:message>testMessage</not:message>
         <not:taskID>testTaskID</not:taskID>
         <not:taskType>testTaskType</not:taskType>
         <not:status>testStatus</not:status>
         <not:appID>testAppID</not:appID>
         <not:userIDs>testUserID</not:userIDs>
      </not:NotifyWorkflowItemUpdate>
   </soapenv:Body>
</soapenv:Envelope>

Why is this happening? Are request parameters mapped to the .Net method parameters via the order and not by the names? Is there an attribute that I have to specify on the service contract to make named parameter mapping possible?


Solution

  • You need to use XmlSerializerFormat class in your WCF service interface.

    [ServiceContract, XmlSerializerFormat]
    public interface IGoodMessageService
    {
        ...
    }
    

    Problem and solution is explained in this link: http://neimke.blogspot.com.tr/2012/03/serialization-ordering-causes-problems.html