最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用thrift實(shí)現(xiàn)js與C#通訊的實(shí)例代碼

 更新時(shí)間:2013年04月16日 11:02:17   作者:  
利用thrift實(shí)現(xiàn)js與C#通訊的實(shí)例代碼,需要的朋友可以參考一下

1.為什么要用thrift js C#?

    1.1 首先,js 通過(guò) thrift 訪問(wèn)C#,實(shí)際上是一種c/s模式。thrift是通信工具,js是客戶端,C#是服務(wù)端。

    1.2 使用js直接與thrift server通信。讓web開(kāi)發(fā)變得更簡(jiǎn)單。如果使用Web Service,你需要自己去實(shí)現(xiàn)C/S兩端的序列化與反序列化操作,還需要自行處理異常,降低了開(kāi)發(fā)效率。而thrift則會(huì)自動(dòng)生成兩端的操作類,你只需要處理方法內(nèi)部的邏輯即可。

    1.3 js直接與thrift server通信,可以提高性能,并且用C#開(kāi)發(fā)server,開(kāi)發(fā)效率也非常高。(那些web service弱爆了)

    1.4 當(dāng)然,我們不能只看到優(yōu)點(diǎn)。用這種方法也有比較明顯的缺點(diǎn):如果使用web service,則網(wǎng)頁(yè)與web service可以封裝在一個(gè)工程里,部署到IIS上后,可以存在于一個(gè)網(wǎng)站內(nèi)。而使用了thrift后,你還需要手動(dòng)管理thrift程序。包括:

        1.4.1 你需要擁有服務(wù)端的絕對(duì)控制權(quán),比如,你可以直接登錄服務(wù)器的操作系統(tǒng)上進(jìn)行操作。因此,如果你只有一個(gè)網(wǎng)頁(yè)空間,則不適合這種方法。當(dāng)然,你也可以用web service里綁定thrift,但這樣你又需要自己手動(dòng)進(jìn)行序列化與反序列操作,而且兩次轉(zhuǎn)換讓性能更低,有違初衷

        1.4.2 給thrift server程序增加自動(dòng)啟動(dòng),與監(jiān)視程序,來(lái)完成thrift的崩潰后自動(dòng)重啟。

 

2.環(huán)境

    Win7 - VS2012 - .net 4.0 C# 控制臺(tái)工程(用來(lái)承載thrift)

    Win7 - VS2012 - .net 4.0 C# Web工程(用來(lái)調(diào)試js,超方便)

 

3.步驟(以下步驟,對(duì)于小白來(lái)說(shuō),有些困難。QQ討論群:23152359 )

    3.1 去thrift官方下載thrift庫(kù),目前是0.9.0。

    3.2 去thrift官方下載編譯好的win下的thrift編譯器,是一個(gè)exe文件。

    3.3 寫一個(gè)數(shù)據(jù)結(jié)構(gòu)定義文件。我在這里只是用了服務(wù),沒(méi)有定義自定義數(shù)據(jù)結(jié)構(gòu)。

        data.txt:

復(fù)制代碼 代碼如下:

 service UserStorage
 {
     i32 Sum( 1: i32 arg_number1, 2: i32 arg_number2),
     string GetString()
 }

3.4 命令行下,用thrift編譯器,對(duì)它進(jìn)行編譯:
   run.bat:
復(fù)制代碼 代碼如下:

 thrift-0.9.0.exe --gen csharp data.txt
 thrift-0.9.0.exe --gen js data.txt
 pause

    3.5 建立一個(gè)名字為CSharpServer的C#控制臺(tái)工程,.net 4.0的。

    3.6 為這個(gè)工程,添加現(xiàn)有項(xiàng)目:thrift庫(kù)目錄\thrift-0.9.0\lib\csharp\src\Thrift.csproj,然后引用這個(gè)項(xiàng)目。

    3.7 把thrift編譯出來(lái)的UserStorage.cs(在gen-csharp目錄里),拖動(dòng)到解決方案管理器里的CSharpServer項(xiàng)目的根目錄下,UserStorage.cs與Program.cs應(yīng)該在同一級(jí)。

    3.8 在CSharpServer項(xiàng)目里創(chuàng)建一個(gè)UserStorage的處理類UserStorageHandle.cs:(它應(yīng)該與UserStorage.cs與Program.cs在同一級(jí))

復(fù)制代碼 代碼如下:

using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;

 namespace CSharpServer
 {
     public class UserStorageHandle : UserStorage.Iface
     {

         public UserStorageHandle()
         {

         }

         public int Sum(int arg_number1, int arg_number2)
         {
             int result = arg_number1 + arg_number2;
             Console.WriteLine(DateTime.Now.ToString() + " 收到請(qǐng)求:Sum,參數(shù):arg_number1 = " + arg_number1.ToString() + ",arg_number2 = " + arg_number2.ToString() + ",返回:result = " + result.ToString());
             return result;
         }

         private static int Counter = 0;

         public string GetString()
         {
             int currentCounter = System.Threading.Interlocked.Increment(ref UserStorageHandle.Counter);
             Console.WriteLine(DateTime.Now.ToString() + " 收到請(qǐng)求:GetString,參數(shù):沒(méi)有,返回:result = \"thrift is OK : " + currentCounter.ToString() + "\"");
             return "thrift is OK : " + currentCounter.ToString();
         }

     }
 }

    3.9 主程序Program.cs:

復(fù)制代碼 代碼如下:

using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using Thrift.Transport;
 using Thrift.Protocol;
 using Thrift.Server;
 using System.Net;

 namespace CSharpServer
 {
     class Program
     {
         private static HttpListener httpListener = null;
         private static THttpHandler httpServer = null;

         static void Main(string[] args)
         {
             string serviceUrl = "http://localhost:99/";
             try
             {
                 UserStorageHandle handle = new UserStorageHandle();
                 UserStorage.Processor processor = new UserStorage.Processor(handle);
                 TProtocolFactory protocolFactory = new TJSONProtocol.Factory();

                 Program.httpServer = new THttpHandler(processor, protocolFactory);

                 Program.httpListener = new HttpListener();
                 Program.httpListener.Prefixes.Add(serviceUrl);
                 Program.httpListener.Start();
                 IAsyncResult result = Program.httpListener.BeginGetContext(new AsyncCallback(WebRequestCallback), null);
                 Console.WriteLine("Thrift 服務(wù)成功啟動(dòng),網(wǎng)址是 " + serviceUrl);
             }
             catch (System.Exception ex)
             {
                 Console.WriteLine("發(fā)生錯(cuò)誤:" + ex.Message);
                 Console.WriteLine("按回車鍵退出");
                 Console.ReadLine();
                 return;
             }
             Console.WriteLine("若需結(jié)束程序,請(qǐng)直接關(guān)閉窗口,或按回車。");
             Console.ReadLine();
         }

         public static void WebRequestCallback(IAsyncResult result)
         {
             if (Program.httpListener == null)
             {
                 Console.WriteLine("發(fā)生錯(cuò)誤:HttpListener已經(jīng)被關(guān)閉");
                 Console.WriteLine("按回車鍵退出");
                 Console.ReadLine();
                 return;
             }

             HttpListenerContext httpListenerContext = Program.httpListener.EndGetContext(result);

             Program.httpListener.BeginGetContext(new AsyncCallback(WebRequestCallback), null);

             Program.httpServer.ProcessRequest(httpListenerContext);
         }

     }
 }

    3.10 按F5,啟動(dòng)CSharpServer項(xiàng)目。

    3.11 新開(kāi)一個(gè)VS2012(內(nèi)存不夠的趕快去買),建立一個(gè)叫JsProject的C# .net 4.0 Web空工程。

    3.12 去jquery官網(wǎng)下載jquery-1.9.1.js(mini版也行,隨便)

    3.13 把thrift編譯的js文件data_types.js與UserStorage.js,thrift庫(kù)的js庫(kù)文件(thrift庫(kù)目錄\thrift-0.9.0\lib\js\thrift.js),以及剛下載的jq文件jquery-1.9.1.js,全部拖動(dòng)到解決方案資源管理器的JsProject項(xiàng)目的根目錄下:

        data_types.js \ jquery-1.9.1.js \ thrift.js \ UserStorage.js 應(yīng)該與Web.config在同一級(jí)。

    3.14 在根目錄下創(chuàng)建一個(gè)Test.html文件,Test.html 應(yīng)該與Web.config在同一級(jí):

            Test.html:

復(fù)制代碼 代碼如下:

<!DOCTYPE html>
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     <title></title>
     <script type="text/javascript" src="jquery-1.9.1.js"></script>
     <script type="text/javascript" src="data_types.js"></script>
     <script type="text/javascript" src="thrift.js"></script>
     <script type="text/javascript" src="UserStorage.js"></script>

     <script>
         $(document).ready(function ()
         {
             var debugPosation = 0;
             try
             {
                 var transport = new Thrift.Transport("http://www.fzitv.net/");
                 var protocol = new Thrift.Protocol(transport);
                 var client = new UserStorageClient(protocol);

                 var result_GetString = client.GetString();
                 var result_Sum = client.Sum(255, 322);
             }
             catch (e)
             {
                 alert("出錯(cuò)鳥(niǎo):" + e.message);
             }
         });
     </script>
 </head>
 <body>
 </body>
 </html>

    3.15 給Test.html的 “ var debugPosation = 0; ” 這一行,下斷點(diǎn),然后F5,就可以看到效果了。

相關(guān)文章

  • C#打印繪圖的實(shí)現(xiàn)方法

    C#打印繪圖的實(shí)現(xiàn)方法

    這篇文章主要介紹了C#打印繪圖的實(shí)現(xiàn)方法,涉及C#針對(duì)圖片的繪制與打印相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • asp.net core項(xiàng)目mvc權(quán)限控制:分配權(quán)限

    asp.net core項(xiàng)目mvc權(quán)限控制:分配權(quán)限

    學(xué)習(xí)的最好方法就是動(dòng)手去做,這里以開(kāi)發(fā)一個(gè)普通的權(quán)限管理系統(tǒng)的方式來(lái)從零體驗(yàn)和學(xué)習(xí)Asp.net Core。項(xiàng)目的整體規(guī)劃大致如下
    2017-02-02
  • C#?WinForm?RichTextBox文本動(dòng)態(tài)滾動(dòng)顯示文本方式

    C#?WinForm?RichTextBox文本動(dòng)態(tài)滾動(dòng)顯示文本方式

    這篇文章主要介紹了C#?WinForm?RichTextBox文本動(dòng)態(tài)滾動(dòng)顯示文本方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • C#多線程實(shí)現(xiàn)異步接口

    C#多線程實(shí)現(xiàn)異步接口

    這篇文章介紹了C#多線程實(shí)現(xiàn)異步接口的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • C# 正則表達(dá)式進(jìn)階

    C# 正則表達(dá)式進(jìn)階

    這篇文章主要介紹了C# 正則表達(dá)式進(jìn)階,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • winform 實(shí)現(xiàn)選擇文件和選擇文件夾對(duì)話框的簡(jiǎn)單實(shí)例

    winform 實(shí)現(xiàn)選擇文件和選擇文件夾對(duì)話框的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇winform 實(shí)現(xiàn)選擇文件和選擇文件夾對(duì)話框的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • 比較2個(gè)datatable內(nèi)容是否相同的方法

    比較2個(gè)datatable內(nèi)容是否相同的方法

    這篇文章主要介紹了比較2個(gè)datatable內(nèi)容是否相同的方法,大家參考使用吧
    2014-01-01
  • C#實(shí)現(xiàn)簡(jiǎn)單加減乘除計(jì)算器

    C#實(shí)現(xiàn)簡(jiǎn)單加減乘除計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)單加減乘除計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Unity實(shí)現(xiàn)OCR文字識(shí)別功能

    Unity實(shí)現(xiàn)OCR文字識(shí)別功能

    這篇文章主要介紹了通過(guò)Unity接入百度AI接口,實(shí)現(xiàn)OCR文字識(shí)別功能,文中的實(shí)現(xiàn)步驟講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定的參考價(jià)值,需要的可以了解一下
    2022-01-01
  • C#中fixed關(guān)鍵字的作用總結(jié)

    C#中fixed關(guān)鍵字的作用總結(jié)

    以下是對(duì)C#中fixed關(guān)鍵字的作用進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-09-09

最新評(píng)論

逊克县| 富源县| 轮台县| 崇义县| 广安市| 北海市| 全椒县| 敦煌市| 安阳市| 吐鲁番市| 德令哈市| 临武县| 江城| 九龙坡区| 克山县| 新田县| 扶风县| 密云县| 思南县| 焉耆| 河北区| 扬州市| 肇庆市| 伽师县| 德惠市| 海门市| 随州市| 吉安市| 清远市| 鹤庆县| 韩城市| 攀枝花市| 天津市| 高安市| 新乡市| 虹口区| 凉城县| 台中县| 永福县| 洞头县| 玉树县|