Asp.net HTTP提交xml数据,带身份验证
一、背景介绍
公司最近上了一套PLM系统,是美国PTC的,大名鼎鼎的。由于内部业务等方面要实现PLM系统和其他原有系统的数据交互。目前PLM官方提供的解决方案是通过excel导入导出进行数据交互,但考虑到实时性,效率,便捷性等方面,否决掉了这个方案。最初打算采用Webservice的方式,在FlexPLM里面搭建webservice,但官方又给了回应,他们所有的二次开发还从未用到过Webservice,所以实现有难度。最后没办法,终于提出了第三套解决方案,通过HTTP协议提交数据,调用API交互数据。
可能有人问问什么不直接操作数据库?额。。。。。。对于一个操作会涉及18张表的数据库系统,解析相当困难,还是乖乖用API吧,虽然实现起来看似绕了很多弯子,但没办法,老美的软件设计思想和我们就是有差距的。
二、ASP.Net端(发送请求端实现)
①准备XML格式,发送端,接收端协定好xml格式就行,这里省略....
②代码实现
protected string SendRequestwhy(string strXML)
{
string str = "";
//双方协定的XML格式
Encoding encoding = Encoding.UTF8;
//接收页面string strUrl = "http://192.168.0.46:8008/Windchill/rfa/jsp/material/gateway.jsp";
byte[] data = encoding.GetBytes(strXML);
//准备请求...
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(strUrl);
myRequest.Method = "POST";
myRequest.ContentType = "text/xml;charset=utf-8";
myRequest.ContentLength = data.Length;
//身份认证,特别注意,参数用户名,密码
NetworkCredential cred = new NetworkCredential("wcadmin", "wcadmin");
myRequest.Credentials = cred;
//在信息请求头部加入验证信息,不然验证不通过
myRequest.PreAuthenticate = true;
Stream newStream = myRequest.GetRequestStream();
//发送数据
newStream.Write(data, 0, data.Length);
newStream.Close();
WebResponse response = myRequest.GetResponse();
Stream resStream = response.GetResponseStream();
StreamReader sr = new StreamReader(resStream, System.Text.Encoding.UTF8);
str = sr.ReadToEnd();//接收返回值,返回值可以是xml
resStream.Close();
sr.Close();
return str;
}