WCF和输入参数顺序在SOAP信封(WCF and Input Parameter Order in

2019-07-30 15:23发布

我发现了一个对象引用未设置为我的WCF的Web服务,它使用的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>

但是,如果我更改请求模板输入参数的顺序,我得到上述错误。 即(注意消息和用户ID参数切换)

<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方法的参数,而不是通过名字? 有,我有指定服务合同,使命名参数映射属性可能吗?

Answer 1:

你需要使用XmlSerializerFormat类WCF服务的接口。

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

问题和解决方案在这个环节中解释说: http://neimke.blogspot.com.tr/2012/03/serialization-ordering-causes-problems.html



Answer 2:

您的SOAP消息的XML架构指定的顺序。 在元素事项和WCF是验证针对该架构的XML XML订单。



文章来源: WCF and Input Parameter Order in SOAP Envelope