1. 程式人生 > >c#呼叫java的Servlet/Controller/Action實現應用間無縫呼叫

c#呼叫java的Servlet/Controller/Action實現應用間無縫呼叫

               現代企業資訊化在有了一定的基礎之後,大部分企業都會意識到資料孤島,什麼是資料孤島呢?就是各個系統的資料庫相互獨立,各個系統各自建立各自的基礎資料等相關資訊,系統資訊量維護大,重複勞動較多,基礎資料維護困難,在出去相關報表的時候,資料對應困難,無法快速的實現各系統之間的資料互動。隨之而來的就是資料整合,往往在沒有長期規劃的情況下,對資料簡單的進行集中處理,往往結果就是對整體沒有多大幫助,反而會因為資料的錯誤無法快速定位,反而適得其反,其實在沒有合理的規劃的時候,通過應用間的介面呼叫,根據需求進行相應的介面開放才是最佳的解決方案。

               今天我們來說說應用間的互動,同語言開發的程式,在互動上不存在很大的疑問,我們主要是針對不同語言開發的應用進行互動,一般我們有兩種方式,

第一種: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);
        }
    }

}