在wcf rest中按顺序发布xml请求标记

在wcf rest中按顺序发布xml请求标记,xml,wcf,post,tags,Xml,Wcf,Post,Tags,我有wcf服务,它通过POST请求获取数据。 当我这样发送身体时: <Package> <sn>00001</sn> <sign>6pG4K5T8Y5yqAcLJd37n3TLIwyg=</sign> <xml_encoded>DQo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KPG9wPiAgICAgDQogICAgICA8aW5fc2F0IGxhdD0iM

我有wcf服务,它通过POST请求获取数据。 当我这样发送身体时:

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

我找到了解决办法

[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; }
    }
    [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;
        }
    }
[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; }
    }