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