Pergunta

Estou recebendo uma referência de Objeto não definida para uma instância de objeto de erro no meu serviço web do WCF, que usa webHttpBinding (soap 1.1) tenho notado que, se você tiver os parâmetros de entrada em uma determinada ordem para que o erro não se levantou.

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>

No entanto, se eu alterar a ordem dos parâmetros de entrada no modelo de solicitação de eu obter o erro mencionado anteriormente.i.e.(mensagem de observação e userIDs parâmetros são trocados)

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

Por que isso está acontecendo?São parâmetros de solicitação mapeado para o .Net método de parâmetros através da ordem e não pelos nomes?Existe um atributo que eu tenho que especificar no contrato de serviço para fazer o chamado mapeamento de parâmetro possível?

Foi útil?

Solução

Você precisa usar XmlSerializerFormat classe em serviço WCF interface.

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

O problema e a solução é explicado neste link: http://neimke.blogspot.com.tr/2012/03/serialization-ordering-causes-problems.html

Outras dicas

O esquema XML do seu SABÃO mensagem especifica a ordem.Em XML, a fim de elemento de questões e o WCF é validar o XML com o esquema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top