WCF и порядок ввода параметров в конверте SOAP

Я получаю ссылку на объект, не установленную на экземпляр ошибки объекта в моем веб-сервисе WCF, который использует webHttpBinding (soap 1.1). Я заметил, что если у вас есть входные параметры в определенном порядке, ошибка не возникает.

т.е.

<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>

Однако если я изменю порядок входных параметров в шаблоне запроса, я получу вышеупомянутую ошибку. т.е. (примечание сообщения и параметры идентификатора пользователя переключаются)

<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>

Почему это происходит? Параметры запроса сопоставляются с параметрами метода.Net через порядок, а не по именам? Есть ли атрибут, который я должен указать в контракте на обслуживание, чтобы сделать возможным сопоставление именованных параметров?

2 ответа

Решение

Вам необходимо использовать класс XmlSerializerFormat в интерфейсе службы WCF.

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

Проблема и решение объяснены в этой ссылке: http://neimke.blogspot.com.tr/2012/03/serialization-ordering-causes-problems.html

Схема XML вашего сообщения SOAP определяет порядок. В XML порядок элементов имеет значение, и WCF проверяет XML на соответствие схеме.

Другие вопросы по тегам