一、背景介紹
公司最近上了一套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;
}