亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

利用thrift實現js與C#通訊的實例代碼

2020-01-24 03:28:02
字體:
來源:轉載
供稿:網友

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

    1.1 首先,js 通過 thrift 訪問C#,實際上是一種c/s模式。thrift是通信工具,js是客戶端,C#是服務端。

    1.2 使用js直接與thrift server通信。讓web開發變得更簡單。如果使用Web Service,你需要自己去實現C/S兩端的序列化與反序列化操作,還需要自行處理異常,降低了開發效率。而thrift則會自動生成兩端的操作類,你只需要處理方法內部的邏輯即可。

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

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

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

        1.4.2 給thrift server程序增加自動啟動,與監視程序,來完成thrift的崩潰后自動重啟。

 

2.環境

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

    Win7 - VS2012 - .net 4.0 C# Web工程(用來調試js,超方便)

 

3.步驟(以下步驟,對于小白來說,有些困難。QQ討論群:23152359 )

    3.1 去thrift官方下載thrift庫,目前是0.9.0。

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

    3.3 寫一個數據結構定義文件。我在這里只是用了服務,沒有定義自定義數據結構。

        data.txt:

復制代碼 代碼如下:

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

3.4 命令行下,用thrift編譯器,對它進行編譯:
   run.bat:
復制代碼 代碼如下:

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

    3.5 建立一個名字為CSharpServer的C#控制臺工程,.net 4.0的。

    3.6 為這個工程,添加現有項目:thrift庫目錄/thrift-0.9.0/lib/csharp/src/Thrift.csproj,然后引用這個項目。

    3.7 把thrift編譯出來的UserStorage.cs(在gen-csharp目錄里),拖動到解決方案管理器里的CSharpServer項目的根目錄下,UserStorage.cs與Program.cs應該在同一級。

    3.8 在CSharpServer項目里創建一個UserStorage的處理類UserStorageHandle.cs:(它應該與UserStorage.cs與Program.cs在同一級)

復制代碼 代碼如下:

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() + " 收到請求:Sum,參數: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() + " 收到請求:GetString,參數:沒有,返回:result = /"thrift is OK : " + currentCounter.ToString() + "/"");
             return "thrift is OK : " + currentCounter.ToString();
         }

     }
 }

    3.9 主程序Program.cs:

復制代碼 代碼如下:

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 服務成功啟動,網址是 " + serviceUrl);
             }
             catch (System.Exception ex)
             {
                 Console.WriteLine("發生錯誤:" + ex.Message);
                 Console.WriteLine("按回車鍵退出");
                 Console.ReadLine();
                 return;
             }
             Console.WriteLine("若需結束程序,請直接關閉窗口,或按回車。");
             Console.ReadLine();
         }

         public static void WebRequestCallback(IAsyncResult result)
         {
             if (Program.httpListener == null)
             {
                 Console.WriteLine("發生錯誤:HttpListener已經被關閉");
                 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,啟動CSharpServer項目。

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

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

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

        data_types.js / jquery-1.9.1.js / thrift.js / UserStorage.js 應該與Web.config在同一級。

    3.14 在根目錄下創建一個Test.html文件,Test.html 應該與Web.config在同一級:

            Test.html:

復制代碼 代碼如下:

<!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.49028c.com/");
                 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("出錯鳥:" + e.message);
             }
         });
     </script>
 </head>
 <body>
 </body>
 </html>

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久97久久97精品免视看| 国产欧美日韩免费看aⅴ视频| 成人免费直播live| 欧美麻豆久久久久久中文| 欧美性xxxxx极品| 日韩久久免费视频| 国产精品日韩在线播放| 国产精品一区二区三| 亚洲www在线观看| 国产精品久久久久久一区二区| 国产欧美日韩免费看aⅴ视频| 欧美福利小视频| 国产精品美女免费视频| 欧洲精品久久久| 国产成人涩涩涩视频在线观看| 亚洲午夜激情免费视频| 久久久久久久97| 国产精品黄色影片导航在线观看| 亚洲免费福利视频| 一区二区中文字幕| 日韩高清人体午夜| 97视频在线观看网址| 亚洲女人天堂视频| 日韩专区中文字幕| 黑人巨大精品欧美一区二区| 日韩天堂在线视频| 欧美日韩一区二区免费视频| 亚洲加勒比久久88色综合| 欧美一级在线播放| 日本精品性网站在线观看| 欧美大胆a视频| 国产男女猛烈无遮挡91| www.亚洲人.com| 日本亚洲欧美成人| 亚洲图片在区色| 日韩人体视频一二区| 最好看的2019的中文字幕视频| 亚洲精品国精品久久99热| 欧美精品在线视频观看| 亚洲国产美女精品久久久久∴| 91在线免费看网站| 久久成人av网站| 日韩a**中文字幕| 成人免费福利在线| 亚洲精品久久久久中文字幕欢迎你| 亚洲天堂第一页| 国产精品一区二区三区在线播放| 97视频网站入口| 欧美放荡办公室videos4k| 欧美性色视频在线| 国产女人18毛片水18精品| 久久免费国产精品1| 日韩小视频在线| 另类少妇人与禽zozz0性伦| 色99之美女主播在线视频| 国a精品视频大全| 久久男人av资源网站| 欧美一区三区三区高中清蜜桃| 国产精品一区二区三| 综合国产在线观看| 最近2019免费中文字幕视频三| 欧美成人中文字幕| 久久精品亚洲一区| 国产91在线播放九色快色| 日韩成人小视频| 国产va免费精品高清在线观看| 欧美极品在线播放| 4444欧美成人kkkk| 国产在线一区二区三区| 日韩电影免费观看中文字幕| 青青草成人在线| 久久中文字幕在线视频| 日韩午夜在线视频| www国产精品视频| 国产精品第一区| 国产精品极品美女在线观看免费| 亚洲午夜av久久乱码| 国产婷婷色综合av蜜臀av| 姬川优奈aav一区二区| 亚洲免费小视频| 日韩av在线一区| 亚洲天堂男人天堂| 日韩中文在线视频| 欧美成人中文字幕在线| 久热精品在线视频| 日本欧美黄网站| 国产精品一久久香蕉国产线看观看| 亚洲精品按摩视频| 中文字幕精品在线视频| 国产一区二区三区久久精品| 欧美激情中文网| 日韩中文字在线| 亚洲欧美国产精品专区久久| 欧美尺度大的性做爰视频| 91a在线视频| 久久久久久久国产| 欧洲成人免费视频| 国产精品久久久久久久久男| 国产一区二区三区在线观看视频| 国产精品扒开腿爽爽爽视频| 91国偷自产一区二区三区的观看方式| 亚洲国产一区二区三区在线观看| 亚洲aa在线观看| 日韩视频在线免费| 精品福利在线观看| 欧美在线观看日本一区| 日韩精品视频在线免费观看| 欧美国产日韩免费| 久久久精品2019中文字幕神马| 国模叶桐国产精品一区| 欧美在线视频一二三| www.亚洲免费视频| 欧美性jizz18性欧美| 日韩精品中文字幕有码专区| 日韩av综合网站| 国产精品美女久久久免费| 成人免费午夜电影| 国产精品久久久久久超碰| 亚洲欧美精品suv| 在线电影中文日韩| 久久五月天色综合| 色系列之999| 国产成人av网址| 中文字幕亚洲精品| 欧美精品性视频| 日韩在线观看你懂的| 欧美日韩国产丝袜美女| 国产xxx69麻豆国语对白| 久久久久久久影院| 日韩大陆毛片av| 国产一区二区视频在线观看| 欧美日韩国产综合视频在线观看中文| 国产精品久久久久不卡| 国产精品一区二区3区| 国内外成人免费激情在线视频网站| 久久亚洲国产精品| 在线观看日韩av| 成人欧美一区二区三区黑人孕妇| 国内精品久久久久久久| 日韩欧美国产中文字幕| 美女啪啪无遮挡免费久久网站| 免费不卡在线观看av| 日韩美女写真福利在线观看| 日韩高清电影免费观看完整| 中文日韩在线视频| 狠狠色狠狠色综合日日五| 欧美激情网站在线观看| 国产精品第100页| 91色琪琪电影亚洲精品久久| 97香蕉超级碰碰久久免费的优势| 欧美亚洲日本黄色| 亚洲精品久久7777777| 欧美精品在线免费| 欧美黑人xxxx| 日韩欧美在线视频日韩欧美在线视频| 欧美视频在线视频| 色婷婷综合成人av| 亚洲影影院av| 亚洲一区二区三区在线免费观看| 欧美最猛性xxxxx(亚洲精品)| 中文字幕在线看视频国产欧美在线看完整| 国产精品久久999| 欧美精品videossex性护士| 丝袜美腿精品国产二区|