国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

服務主機的路由器與負載均衡和實現思路

網絡 路由交換
WCF中間件的路由功能是在客戶端與服務端之間加入中介服務,用來轉發它們之間的消息。實現消息的轉發可以修改WCF服務消息頭的內容,重新指定服務地址即可。

路由器介紹及演示

WCF中間件的路由功能是在客戶端與服務端之間加入中介服務,用來轉發它們之間的消息。實現消息的轉發可以修改WCF服務消息頭的內容,重新指定服務地址即可,那給消息頭指定的服務地址從哪來,需要給路由器配置服務端地址目錄,路由器與服務端肯定不是一對一的,路由器可以指定多個服務端,而路由器把客戶端連接指定給哪個服務端這里就有一個算法,算法的優劣就決定了中間件負載均衡的能力。

下面演示了中間件的路由功能,把Out目錄中的程序復制6份,分別改名如下,3個客戶端,1個路有中間件,2個服務中間件,還要修改每個程序的相關配置;這樣先啟動路由中間件Router和服務中間件WCFservser1、WCFServer2,然后分別啟動2個客戶端程序,路由中間件和服務中間件就會顯示客戶端的連接信息。3個客戶端會有2個分配到一個服務中間件,一個客戶端分配到另外一個服務中間件,不會說3個客戶端都分配到1個服務中間件,這是由路由中間件的負載均衡算法決定的;

 

 

 

 

路由功能的實現

框架增加了一個路由服務對象Router,用它來攔截客戶端發送的消息,攔截方法ProcessMessage(Message requestMessage);

首先根據路由目錄結合負載均衡的算法取得服務地址endpointAddress,然后創建WCF通道并綁定新的服務地址,調用服務端的方法;

 

  1. /// <summary> 
  2.         /// 截獲從Client端發送的消息轉發到目標終結點并獲得返回值給Client端 
  3.         /// </summary> 
  4.         /// <param name="requestMessage"></param> 
  5.         /// <returns></returns> 
  6.         public Message ProcessMessage(Message requestMessage) 
  7.         { 
  8.             //Binding binding = null
  9.             EndpointAddress endpointAddress = null
  10.             GetServiceEndpoint(requestMessage, out endpointAddress); 
  11.             IDuplexRouterCallback callback = OperationContext.Current.GetCallbackChannel<IDuplexRouterCallback>(); 
  12.             NetTcpBinding tbinding = new NetTcpBinding("netTcpExpenseService_ForSupplier"); 
  13.             using (DuplexChannelFactory<IRouterService> factory = new DuplexChannelFactory<IRouterService>(new InstanceContext(null, new DuplexRouterCallback(callback)), tbinding, endpointAddress)) 
  14.             { 
  15.  
  16.                 factory.Endpoint.Behaviors.Add(new MustUnderstandBehavior(false)); 
  17.                 IRouterService proxy = factory.CreateChannel(); 
  18.  
  19.                 using (proxy as IDisposable) 
  20.                 { 
  21.                     // 請求消息記錄 
  22.                     IClientChannel clientChannel = proxy as IClientChannel; 
  23.                     //Console.WriteLine(String.Format("Request received at {0}, to {1}\r\n\tAction: {2}", DateTime.Now, clientChannel.RemoteAddress.Uri.AbsoluteUri, requestMessage.Headers.Action)); 
  24.                     if (Convert.ToInt32(HostSettingConfig.GetValue("debug")) == 1) 
  25.                         hostwcfMsg(DateTime.Now, String.Format("路由請求消息發送:  {0}", clientChannel.RemoteAddress.Uri.AbsoluteUri)); 
  26.                     // 調用綁定的終結點的服務方法 
  27.                     Message responseMessage = proxy.ProcessMessage(requestMessage); 
  28.  
  29.                     // 應答消息記錄 
  30.                     //Console.WriteLine(String.Format("Reply received at {0}\r\n\tAction: {1}", DateTime.Now, responseMessage.Headers.Action)); 
  31.                     //Console.WriteLine(); 
  32.                     //hostwcfMsg(DateTime.Now, String.Format("應答消息: {0}", responseMessage.Headers.Action)); 
  33.                     return responseMessage; 
  34.                 } 
  35.             } 
  36.         } 

#p#負載均衡的實現

負載均衡實現代碼在Router對象中的GetServiceEndpoint方法中,定義了RegistrationList對象用來存儲客戶端列表,在消息頭中增加了兩個標識routerID和CMD,routerID用來識別客戶端,值是客戶端創建發送到路由中間件,每個客戶端只有一個routerID;CMD用來客戶端發送給路由中間件的命令標識,這里只用到了一個就是”Quit”就是卸載路由中間件中的RegistrationList客戶端列表;

解決了識別客戶端的問題,那平均算法每個客戶端分配到哪個服務中間件就很簡單了,RoundRobinCount就記錄每個服務中間件對應的客戶端個數,哪個服務中間件數量少新的客戶端就分配給它;

 

  1. private void GetServiceEndpoint(Message requestMessage,out EndpointAddress endpointAddress) 
  2.         { 
  3.  
  4.             string ns = "http://www.3yxx.com/"
  5.             string routerID = GetHeaderValue("routerID", ns); 
  6.             string cmd = GetHeaderValue("CMD", ns); 
  7.             string contractNamespace = requestMessage.Headers.Action.Substring(0, requestMessage.Headers.Action.LastIndexOf("/")); 
  8.  
  9.             
  10.  
  11.             RegistrationInfo regInfo = null
  12.  
  13.             if (Router.RoundRobinCount.ContainsKey(routerID)) 
  14.             { 
  15.                 int key = Router.RoundRobinCount[routerID]; 
  16.                 regInfo = Router.RegistrationList[key]; 
  17.                 if (cmd == "Quit") 
  18.                 { 
  19.                     regInfo.ClientNum -1
  20.                 } 
  21.             } 
  22.             else 
  23.             { 
  24.                 //根據指定的協議名稱空間從注冊表容器中得到注冊項列表 
  25.                 var results = from item in Router.RegistrationList 
  26.                               where item.Value.ContractNamespace.Contains(contractNamespace) 
  27.                               orderby item.Value.ClientNum ascending 
  28.                               select item; 
  29.                 if (results.Count<KeyValuePair<int, RegistrationInfo>>() > 0) 
  30.                 { 
  31.                     var val = results.First<KeyValuePair<int, RegistrationInfo>>(); 
  32.                     Router.RoundRobinCount.Add(routerID, val.Key); 
  33.                     val.Value.ClientNum += 1; 
  34.                     regInfo = val.Value; 
  35.                 } 
  36.             } 
  37.  
  38.             Uri addressUri = new Uri(regInfo.Address); 
  39.  
  40.             //binding = CustomBindConfig.GetRouterBinding(addressUri.Scheme); 
  41.             endpointAddress = new EndpointAddress(regInfo.Address); 
  42.             //重設Message的目標終結點 
  43.             requestMessage.Headers.To = new Uri(regInfo.Address); 
  44.  
  45.             hostwcfRouter(RegistrationList.Values.ToList()); 
  46.         } 

WCF客戶端配置和中間件配置還有路由地址配置

如果部署的時候不使用中間件的路由功能,那客戶端配置服務地址直接指定服務端WCF地址就行了,而如果啟用路由功能,那客戶端就配置路由中間件的WCF地址,路由中間件再配置路由目錄,對應服務端;

客戶端WCF配置和服務端WCF配置還有一個地方值得注意,就是netTcpBinding節點的配置;***配置為取消服務器憑據認證,因為如果不配置為None,當客戶端斷開連接后再連接的時候就會一些安全性驗證,導致連接報錯,所以對WCF安全性方面的配置沒有吃透的話還是先這樣配置好;

1)客戶端App.Config配置

 

 

 

 

2)路由中間件App.Config配置和路由目錄RouterBill.xml配置

 

 

 

 

3)服務中間件App.Config配置

 

 

5.總結

本章我們詳細講解了EFW框架中的WCF中間件的路由功能和負載均衡的實現,代碼很簡單,但深入理解卻沒那么容易,我也只是略懂點皮毛,參考了網上資料把功能實現而已,而想要做成專業級別的中間件是有一個過程的,所以不只是我,也需要有興趣的人一起完善它;

路由實例程序下載 :http://pan.baidu.com/s/1eQ8FscE

注意:實例中的配置文件中的IP地址192.168.1.3修改為你本機的IP地址;

 

責任編輯:林琳 來源: 博客園精華區
相關推薦

2009-12-18 16:05:03

智能型負載均衡

2013-01-16 15:47:33

路由器IP地址負載均衡

2013-03-12 09:36:49

路由器負載均衡路由技術

2010-05-10 15:12:21

路由器負載均衡

2010-04-25 18:23:24

負載均衡路由器

2019-02-21 09:18:27

服務路由負載均衡微服務

2009-12-08 17:49:17

2010-05-04 18:10:07

路由器負載均衡

2009-04-09 09:35:00

多WAN口寬帶路由器負載均衡

2018-11-27 12:56:09

負載均衡應用路由

2024-05-13 18:35:06

負載均衡主機端口

2009-01-10 18:53:01

服務器ServerDNS

2009-07-22 10:25:37

2009-12-09 14:47:54

WAN口寬帶路由器

2013-10-24 09:43:39

路由器

2010-05-05 22:40:21

apache服務器負載均衡

2010-04-22 16:31:09

配置網絡負載均衡

2010-11-19 12:53:53

梭子魚負載均衡

2011-11-22 21:26:59

pfSense配置Web服務器負載均衡

2010-04-22 23:33:48

負載均衡設置
點贊
收藏

51CTO技術棧公眾號

日本一区二区三区高清不卡| 午夜精品一区二区三区在线观看| 99久久综合| 亚洲人成人77777线观看| 中文字幕的久久| 免费黄色网页在线观看| 久久精品久久久久电影| 在线成人h网| 欧美激情精品久久久久久小说| 在线观看一区日韩| 激情亚洲另类图片区小说区| 亚洲精品日韩在线观看| 亚洲亚洲人成综合网络| 成人av色网站| 日本不卡一二三区| 亚洲国产三级在线| 国产一区精品福利| 女同一区二区| 亚洲国产一区二区视频| 91丨精品丨国产| 亚洲欧美日韩不卡一区二区三区| 色哟哟一区二区在线观看| japanese色系久久精品| 一区二区三区国| 色欧美88888久久久久久影院| 欧州一区二区三区| 亚洲欧美成人一区| 日本韩国精品在线| 亚洲日本三级| 日本韩国欧美在线观看| 欧美r级在线观看| 欧美一区网站| 日本在线三级| 97香蕉超级碰碰久久免费软件 | 亚洲男人天堂色| 日韩精品中文字| 亚洲欧美成人| 国产精品ⅴa有声小说| 国产精品扒开腿做爽爽爽视频| 久久久久久久久久久99999| 涩涩在线视频| 亚洲成人精品电影在线观看| 91福利资源站| 亚洲成人精选| 黄页网站视频在线观看| 日韩免费av在线| 亚洲精品国产第一综合99久久| 日本免费精品| 狠狠操精品视频| 久久精品亚洲一区| 成人白浆超碰人人人人| 国模套图日韩精品一区二区| 水蜜桃亚洲一二三四在线| 欧美日本韩国一区| 国产在线欧美| 欧美美女色图| 国产欧美日韩综合一区在线观看 | 色多多国产成人永久免费网站| 日韩在线中文| 四虎精品成人影院观看地址| 免费高清在线观看免费| 欧美视频第二页| 亚洲成人精品一区| 亚洲精品极品少妇16p| 亚洲国产精华液| 午夜精品亚洲一区二区三区嫩草| 国产精品一二| 99精品老司机免费视频| 国产精品久久一区二区三区| 欧美性感美女h网站在线观看免费| 国产区精品区| 亚洲国产精华液| 91在线免费看片| 欧美日韩在线三级| av成人天堂| 麻豆视频在线| 无遮挡亚洲一区| 亚洲毛片一区二区| 91免费视频网| 亚洲v天堂v手机在线| 另类图片激情| 成人看片视频| 日韩欧美一区二区三区在线| 国产综合色视频| 欧美亚洲福利| 精品亚洲一区二区三区四区| 国产精品国语对白| 欧美在线色视频| 日韩av在线发布| 日韩中字在线观看| 在线观看国产一级片| 亚洲va男人天堂| 日本韩国欧美一区二区三区| 大伊人狠狠躁夜夜躁av一区| 亚洲欧美在线aaa| 在线亚洲免费| 欧美日韩不卡| 亚洲精品一区二区三区在线| 成人在线免费观看| 亚洲精品一区二| 91国在线精品国内播放| 欧美日韩午夜在线| 亚洲国产美女搞黄色| 99热久久这里只有精品| 久久精品人人爽| 亚洲欧美区自拍先锋| 久久视频在线| 国产91足控脚交在线观看| 女人被男人躁得好爽免费视频| 欧美不卡视频一区发布| 亚洲.国产.中文慕字在线| 久久成人一区| jizz久久精品永久免费| 免费黄色在线看| 欧美aⅴ在线观看| 91入口在线观看| 中文字幕欧美专区| 精品女同一区二区三区在线播放| 狠狠色狠狠色合久久伊人| 国产最新精品| 在线精品亚洲欧美日韩国产| а√最新版地址在线天堂| 青草全福视在线| 国产自摸综合网| 中文字幕一精品亚洲无线一区| 欧美日韩亚洲高清| 91亚洲大成网污www| 国产亚洲精品bv在线观看| 日本超碰一区二区| www久久日com| 国产性一级片| 免费的一级黄色片| 国产精品一区二区三区在线| 欧美成人午夜激情在线| 91精品在线观看入口| 国产精品毛片a∨一区二区三区| 久久亚洲风情| 日韩成人综合| 日韩精品一区国产| 青草视频在线免费直播 | 国产欧美在线| 在线精品视频免费播放| 日韩精品一区二区三区蜜臀| 亚洲精品视频在线看| 欧美性感美女h网站在线观看免费| 欧美成人精品一区二区三区| 欧美极品少妇xxxxⅹ裸体艺术| 最近更新的2019中文字幕| 欧美日韩一区二区视频在线| 成人黄色一区二区| 激情亚洲小说| 日韩激情中文字幕| 91精品免费在线观看| 欧美黄色片免费观看| 午夜精品久久久久久久男人的天堂 | 国产欧美一区二区视频| 日韩精品福利片午夜免费观看| 日本aa大片在线播放免费看| 你懂的在线观看一区二区| 日韩电影在线观看一区| 欧美日韩一级视频| 日韩专区在线播放| 一本色道久久综合亚洲精品婷婷| 欧美人与牲禽动交com| 欧美国产一级| heyzo一本久久综合| 国外视频精品毛片| 欧美大陆一区二区| 97视频在线观看网址| av不卡在线免费观看| 污污的网站在线观看| 婷婷综合视频| 椎名由奈av一区二区三区| 欧美一区二三区| 91原创国产| 在线看国产视频| 亚洲综合色站| 欧美日韩国产精品专区 | 国产成人免费视频网站视频社区| 国产一区二区三区视频在线播放| 97在线视频免费观看| 成人xxx免费视频播放| 激情欧美一区二区| 宅男av一区二区三区| 国产suv精品一区二区6| 国产精品激情av电影在线观看 | 欧美激情在线一区二区| 奇米4444一区二区三区| 日本福利视频| 日韩欧美网站| 日韩成人免费电影| 亚洲国内精品在线| 成人au免费视频影院| 97国产在线| 久久精品国产99国产| 亚洲精品suv精品一区二区| 伊人久久婷婷色综合98网| 日韩一区二区三区免费视频| 99久久99久久久精品齐齐| 久久五月天综合|