c#呼叫java的Servlet/Controller/Action實現應用間無縫呼叫
阿新 • • 發佈:2019-01-09
現代企業資訊化在有了一定的基礎之後,大部分企業都會意識到資料孤島,什麼是資料孤島呢?就是各個系統的資料庫相互獨立,各個系統各自建立各自的基礎資料等相關資訊,系統資訊量維護大,重複勞動較多,基礎資料維護困難,在出去相關報表的時候,資料對應困難,無法快速的實現各系統之間的資料互動。隨之而來的就是資料整合,往往在沒有長期規劃的情況下,對資料簡單的進行集中處理,往往結果就是對整體沒有多大幫助,反而會因為資料的錯誤無法快速定位,反而適得其反,其實在沒有合理的規劃的時候,通過應用間的介面呼叫,根據需求進行相應的介面開放才是最佳的解決方案。
今天我們來說說應用間的互動,同語言開發的程式,在互動上不存在很大的疑問,我們主要是針對不同語言開發的應用進行互動,一般我們有兩種方式,
第一種:webservice,這種方式不用說了,非常簡單,但是XML互動,資料量大了問題會很多
第二種:http,使用http可以解決很多問題,而且http所有網路通訊都支援,所以我們就使用http來進行應用間的通訊,JAVA中我們使用HttpClient來進行互動,c#中我們使用HttpWebRequest來進行互動,其實原理非常簡單,就是模仿提交表單的操作。
返回的JSON如下:
{"obj":{
object
}
}
呼叫程式碼如下:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Web.Script.Serialization; namespace ConsoleApplication5 { public class Program { public static void Main(string[] args) { string url = "http://IP:port/servlet"; string param = "key=value&key1=value1"; postHttpRequest(url, param); } /* * url:請求的servlet地址,不帶引數 * parm:請求的引數,key=value&key1=value1 * **/ public static void postHttpRequest(string url, string param) { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0"; string requestForm = param; byte[] postdatabyte = Encoding.UTF8.GetBytes(requestForm); request.ContentLength = postdatabyte.Length; request.AllowAutoRedirect = false; request.KeepAlive = true; Stream stream; stream = request.GetRequestStream(); stream.Write(postdatabyte, 0, postdatabyte.Length); stream.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream responseStream = response.GetResponseStream(); StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8); string str_serializer = streamReader.ReadToEnd(); JavaScriptSerializer _jsonobj = new JavaScriptSerializer(); PermanentBean _obj = _jsonobj.Deserialize<JsonObject>(str_serializer).obj; Console.WriteLine(_obj.permanent_num); } } }