繁体   English   中英

更改节点元素WCF中的URN

[英]Change URN in node element WCF

大家。 我正在使用通过消息合同和wcf使用URN的旧版服务,但我遇到了这种小巧但非常棘手的不便之处。

 <soapenv:Envelope      xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:UMARKETSPIWS:v2" xmlns:gps="http://schemas.datacontract.org/2004/07/GPS">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:CreditAirtime>
         <!--Optional:-->
         <urn:transactionId>321321</urn:transactionId>
         <!--Optional:-->
         <urn:extraParameters>
            <!--Zero or more repetitions:-->
            <gps:KeyValuePairs>
               <!--Optional:-->
               <gps:key>?</gps:key>
               <!--Optional:-->
               <gps:value>?</gps:value>
            </gps:KeyValuePairs>
         </urn:extraParameters>
         <!--Optional:-->
         <urn:msisdn>50370823063</urn:msisdn>
         <!--Optional:-->
         <urn:amount>5</urn:amount>
      </urn:CreditAirtime>
   </soapenv:Body>
</soapenv:Envelope>

我想在extraParameters部分示例中将gps:标记更改为urn:

 <soapenv:Envelope      xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:UMARKETSPIWS:v2" xmlns:gps="http://schemas.datacontract.org/2004/07/GPS">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:CreditAirtime>
         <!--Optional:-->
         <urn:transactionId>321321</urn:transactionId>
         <!--Optional:-->
         <urn:extraParameters>
            <!--Zero or more repetitions:-->
            <urn:KeyValuePairs>
               <!--Optional:-->
               <urn:key>?</gps:key>
               <!--Optional:-->
               <urn:value>?</gps:value>
            </urn:KeyValuePairs>
         </urn:extraParameters>
         <!--Optional:-->
         <urn:msisdn>50370823063</urn:msisdn>
         <!--Optional:-->
         <urn:amount>5</urn:amount>
      </urn:CreditAirtime>
   </soapenv:Body>
</soapenv:Envelope>

我已经尝试通过添加[MessageBodyMember(Name =“ key”,Order = 0,Namespace =“ urn:”)]来尝试,但其他程序都无法正常工作,但我真的不知道从哪里开始这个。

接口和类在这里。 http://pastebin.com/dtjmXQaz

MessageContract属性仅控制与SOAP消息信封相对应的类型的SOAP格式-该类型直接出现在OperationContract 对于未映射到SOAP消息但仅由根消息类型引用的类型,您需要使用数据协定属性 从而:

    [DataContract(Namespace = "urn:UMARKETSPIWS:v2")]
    public class KeyValuePair
    {
        [DataMember(Name = "key", Order = 0)]
        public string key { get; set; }

        [DataMember(Name = "value", Order = 1)]
        public string value { get; set; }
    }

实际上,对于不需要精确控制SOAP消息格式或安全性的简单消息,通常可以只使用数据协定属性。 请参阅使用消息合同在服务合同中指定数据传输

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM