C# POst 接收或发送XML(转)

项目分成两个 web(ASP.Net)用户处理请求,客户端(wpf/winform)发送请求

1.web项目

有两个页面

SendPost.aspx(单纯发送数据给客户端)

代码:

public partial class SendPost : System.Web.UI.Page
{protected void Page_Load(object sender, EventArgs e){if (Request.RequestType == "POST"){//声明一个XMLDoc文档对象,LOAD()xml字符串XmlDocument doc = new XmlDocument();doc.LoadXml("1.2.0_2012_12_05");//把XML发送出去Response.Write(doc.InnerXml);Response.End();}}
}

Accept.aspx(接收数据并反馈发送会客户端)

protected void Page_Load(object sender, EventArgs e)
{if (Request.RequestType == "POST"){//接收并读取POST过来的XML文件流StreamReader reader = new StreamReader(Request.InputStream);String xmlData = reader.ReadToEnd();//把数据重新返回给客户端Response.Write(xmlData);Response.End();}
}

2.客户端项目:

一个处理Post类

public class PostHelp
{public string GetWebContent(string url){Stream outstream = null;Stream instream = null;StreamReader sr = null;HttpWebResponse response = null;HttpWebRequest request = null;// 要注意的这是这个编码方式,还有内容的Xml内容的编码方式Encoding encoding = Encoding.GetEncoding("UTF-8");byte[] data = encoding.GetBytes(url);// 准备请求,设置参数request = WebRequest.Create(url) as HttpWebRequest;request.Method = "POST";request.ContentType = "text/xml";//request.ContentLength = data.Length;outstream = request.GetRequestStream();outstream.Write(data, 0, data.Length);outstream.Flush();outstream.Close();//发送请求并获取相应回应数据response = request.GetResponse() as HttpWebResponse;//直到request.GetResponse()程序才开始向目标网页发送Post请求instream = response.GetResponseStream();sr = new StreamReader(instream, encoding);//返回结果网页(html)代码string content = sr.ReadToEnd();return content;}public string PostXml(string url, string strPost){string result = "";StreamWriter myWriter = null;HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url);objRequest.Method = "POST";//objRequest.ContentLength = strPost.Length;objRequest.ContentType = "text/xml";//提交xml //objRequest.ContentType = "application/x-www-form-urlencoded";//提交表单try{myWriter = new StreamWriter(objRequest.GetRequestStream());myWriter.Write(strPost);}catch (Exception e){return e.Message;}finally{myWriter.Close();}HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();using (StreamReader sr = new StreamReader(objResponse.GetResponseStream())){result = sr.ReadToEnd();sr.Close();}return result;}
}

一个XML处理类

public class XMLHelp
{private XDocument _document;public XDocument Document{get { return _document; }set { _document = value; }}private string _fPath = "";public string FPath{get { return _fPath; }set { _fPath = value; }}/// 
/// 初始化数据文件,当数据文件不存在时则创建。
/// 
public void Initialize()
{if (!File.Exists(this._fPath)){this._document = new XDocument(new XElement("entity", string.Empty));this._document.Save(this._fPath);}elsethis._document = XDocument.Load(this._fPath);}public void Initialize(string xmlData)
{XmlDocument doc = new XmlDocument();doc.LoadXml(xmlData);this._document = XmlDocumentExtensions.ToXDocument(doc, LoadOptions.None);
}
/// 
/// 清空用户信息
/// 
public void ClearGuest()
{XElement root = this._document.Root;if (root.HasElements){XElement entity = root.Element("entity");entity.RemoveAll();}elseroot.Add(new XElement("entity", string.Empty));
}/// 
/// 提交并最终保存数据到文件。
/// public void Commit()
{try{this._document.Save(this._fPath);}catch (Exception ex){throw new Exception(ex.Message, ex);}
}/// 
/// 更新
/// 
public void UpdateQrState(string PId, string state)
{XElement root = this._document.Root;XElement entity = root.Element("entity");IEnumerable elements = entity.Elements().Where(p =>p.Attribute("PId").Value == PId);if (elements.Count() == 0)return;else{XElement guest = elements.First();guest.Attribute("FQdState").Value = state;guest.Attribute("FQdTime").Value = DateTime.Now.ToString();Commit();}
}public IEnumerable GetXElement()
{XElement root = this._document.Root;IEnumerable elements = root.Elements();return elements;
}public DataTable GetEntityTable()
{DataTable dtData = new DataTable();XElement root = this._document.Root;IEnumerable elements = root.Elements();foreach (XElement item in elements){dtData.Columns.Add(item.Name.LocalName);}DataRow dr = dtData.NewRow();int i = 0;foreach (XElement item in elements){dr[i] = item.Value;i = i + 1;}dtData.Rows.Add(dr);return dtData;}}//因为我这里用的是Linq操作XML所以多一个转换XML类public static class XmlDocumentExtensions
{public static XDocument ToXDocument(this XmlDocument document){return document.ToXDocument(LoadOptions.None);}public static XDocument ToXDocument(this XmlDocument document, LoadOptions options){using (XmlNodeReader reader = new XmlNodeReader(document)){return XDocument.Load(reader, options);}}
}

客户端加个按钮,按钮代码

private void button5_Click(object sender, RoutedEventArgs e)
{PostHelp ph = new PostHelp();//请求,拿到数据string value = ph.GetWebContent("http://192.168.52.24:802/SendPost.aspx");//保存数据XMLHelp xh = new XMLHelp();xh.Document = XDocument.Parse(value);xh.FPath = Environment.CurrentDirectory + "\\xml\\a.xml";xh.Commit();//重新把数据拿出来,发送string a = xh.Document.ToString();string text = ph.PostXml("http://192.168.52.24:802/Accept.aspx", a);//根据得到数据显示this.textBlock1.Text = text;//把数据转换成DataTable,输出要的结果集DataTable dt = xh.GetEntityTable();MessageBox.Show(dt.Rows[0][0].ToString());}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部