简体   繁体   English

在WCF中发布XML请求标签顺序

[英]post xml request tags order in wcf rest

I have wcf service, which gets data with POST request. 我有wcf服务,该服务通过POST请求获取数据。 When I send body like this: 当我像这样发送身体时:

<Package>
 <sn>00001</sn>
 <sign>6pG4K5T8Y5yqAcLJd37n3TLIwyg=</sign>
 <xml_encoded>DQo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KPG9wPiAgICAgDQogICAgICA8aW5fc2F0IGxhdD0iMjYuNDU2ODc4OTEyMzQiIGxvbj0iNDkuNTY1NjEzNyIgc2F0PSI3IiBmbGc9IjEiIC8+DQo8L29wPg==</xml_encoded>
</Package>

My response is: "sn: 00001 sign: lat: 26.45687891234 lon: 49.5656137 sat: 7 flg: 1" but when i send it: 我的回应是:“ sn:00001号:lat:26.45687891234 lon:49.5656137 sat:7 flg:1”,但当我发送时:

<Package>
  <sign>6pG4K5T8Y5yqAcLJd37n3TLIwyg=</sign> 
  <sn>00001</sn>
  <xml_encoded>DQo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KPG9wPiAgICAgDQogICAgICA8aW5fc2F0IGxhdD0iMjYuNDU2ODc4OTEyMzQiIGxvbj0iNDkuNTY1NjEzNyIgc2F0PSI3IiBmbGc9IjEiIC8+DQo8L29wPg==</xml_encoded>
</Package>

my response is: "sn: 00001 sign: 6pG4K5T8Y5yqAcLJd37n3TLIwyg= lat: 26.45687891234 lon: 49.5656137 sat: 7 flg: 1" 我的回应是:“ sn:00001号:6pG4K5T8Y5yqAcLJd37n3TLIwyg = lat:26.45687891234 lon:49.5656137饱和度:7 flg:1”

Why so? 为什么这样?

code: 码:

    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "GetData", ResponseFormat=WebMessageFormat.Json)]
        string GetData(Package value);
    }
public class Service1 : IService1
    {
        #region static methods
        public static string HexStringFromBytes(byte[] bytes)
        {
            var sb = new StringBuilder();
            foreach (byte b in bytes)
            {
                var hex = b.ToString("x2");
                sb.Append(hex);
            }
            return sb.ToString();
        }
        private static string SHA1HashStringForUTF8String(string s)
        {
            byte[] bytes = Encoding.UTF8.GetBytes(s);

            var sha1 = SHA1.Create();
            byte[] hashBytes = sha1.ComputeHash(bytes);
            return HexStringFromBytes(hashBytes);
        }

        private static string fromBase64(string str)
        {
            var bytes = Convert.FromBase64String(str);
            var result = Encoding.UTF8.GetString(bytes);
            return result;
        }

        private static string toBase64(string str)
        {
            var bytes = Encoding.UTF8.GetBytes(str);
            var base64 = Convert.ToBase64String(bytes);
            return base64;
        }
        #endregion

        public string GetData(Package value)
        {
            var enc_pack = fromBase64(value.xml_encoded).Replace("\u000d\u000a", "");
            //return enc_pack;
            XDocument doc = XDocument.Parse(enc_pack);
            var lat = doc.Root.Element("in_sat").Attribute("lat").Value;
            var lon = doc.Root.Element("in_sat").Attribute("lon").Value;
            var sat = doc.Root.Element("in_sat").Attribute("sat").Value;
            var flg = doc.Root.Element("in_sat").Attribute("flg").Value;
            return "sn: " + value.sn + " sign: " + value.sign + " lat: " + lat + " lon: " + lon + " sat: " + sat + " flg: " + flg;
        }
    }

I have found a solution 我找到了解决方案

[DataContract(Namespace = "")]
    public class Package
    {
        [DataMember(Order = 0, IsRequired = true)]
        public string sn { get; set; }
        [DataMember(Order = 1, IsRequired = true)]
        public string sign { get; set; }
        [DataMember(Order=2, IsRequired=true)]
        public string xml_encoded { get; set; }
    }

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

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