精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

總結WebService的一些封裝技巧

開發 后端
討論一下WebService的一些封裝技巧,也就是會碰到的常見問題的解決,希望能給大家以后在用WebService時一點幫助和啟發吧。

今天早上起來,想談談.NET中的WebService,當然我不想講什么是WebService,或者怎么用WebService,因為那個大家隨便Google一下前100頁都能找到答案。今天我想來分享一下我在用WebService中的一些技巧(至少我認為是技巧,還有點成就感),希望能給大家以后在用WebService時一點幫助和啟發吧。

一、問題誕生 -- 大部分解決方案的背后總是一些頭痛的問題

很早以前就用過傳說中的WebService,但一直是用常規的思路在用:創建WebService項目-->寫Web服務方法--> 在項目中添加Web引用-->調用Web方法。這樣貌似很好,非常符合規范,在一段時間內效果也還可以,但漸漸的隨著項目的擴大和同時參與項目的人員增多,就越來越覺得這種常規的方法很是不爽,為什么呢?我每次修改WebService端(添加、刪除Web方法,以及修改方法名稱),在引用端我都要更新WebService引用,其實是就是更新WSDL文件,很是煩人。

二、化分為合 -- 傳說分久必合,合久必分

好吧,既然增加、刪除、修改web方法名都會引起WSDL的更新,那么我們索性用一個統一的方法來作為webservice的訪問入口吧,然后內部用switch case來區分調用哪個方法,先貼代碼吧,再來簡單講講:

統一訪問接口IRemoteCall:

  1. public interface IRemoteCall{      
  2. byte[] GeneralCall(string methodName, params byte[] param);} 

然后定義一個WebService并實現以上接口(以前還沒真在webservice上實現過接口,哈哈):

  1. [WebService(Namespace = http://tempuri.org/)]
  2. [WebServiceBinding(ConformsTo =   WsiProfiles.BasicProfile1_1)]
  3. [ToolboxItem(false)]public class BlogService : 
  4. System.Web.Services.WebService, IRemoteCall{      
  5. [WebMethod(EnableSession = true)]     
  6.  public byte[] GeneralCall(string methodName, params byte[] param) 
  7.    {          
  8. switch (methodName)         
  9.  {            
  10.   case "LoadBlog":            
  11.      {                 
  12.     long blogId = Serializer.DeserializeToObject<long>(param);                   
  13.   BLLBlogArtical ba = new AppBlog().LoadBlog(blogId);                 
  14.     return Serializer.SerializeToBinary(ba);            
  15.      }           
  16.    case "DeleteBlog":          
  17.        {                
  18.      //To Do Your Code        
  19.              return null;          
  20.        }    
  21.        }     }} 

這里為什么要定義接口IRemoteCall呢,主要是為接下來統一調用webservice服務的,所有實現這個接口的webservice類都可以通過GeneralCall來完成調用,待會將webservice訪問器的時候會具體講到,這里主要講講這個switch case。

這里我們定義了一個統一的訪問入口
 

  1. byte[] GeneralCall(string methodName,params byte[] param) 

意思是:傳入要調用的方法名稱以及序列化后的參數,返回序列化后的結果。這里為了統一數據,我們均對參數和返回值都序列化成byte數組,即用Serializer.SerializeToBinary(object)來實現,這樣所有調用就都統一了格式。

有人可能會提出質疑,這樣方法名稱都已字符串形式是不是會顯得難看,而且字符串容易出錯,還沒有智能提示?那也好解決,我們可以把方法名稱定義成const常量就可以了。這里我對webservice的一個態度是:webservice層就是完成轉接和調度工作的,它僅僅起到承接的作用,用了他可以將服務任意分布,所以里面是沒有任何邏輯的(邏輯都是被封裝在其他dll中的),最多是一些數據轉換,所以我采用了這種模糊接口的方式。

三、自定義webservice訪問器

上面我們完成了webservice端的工作,接下來就來實現客戶端對webservice的靈活調用,這里上面定義的那個IRemoteCall就起到作用了,首先我們定義一個webservice訪問器類RemoteCaller,代碼如下:

  1. using System;using   
  2. System.Collections.Generic;using   
  3. System.Text;using   
  4. System.Collections;using System.Web.Services.Protocols;  
  5. using SharedLib_403;   
  6. namespace ITIvy.Shared.RemoteCaller{      
  7.      /// <summary>     
  8.  /// 遠程接口訪問器     
  9.  /// </summary>     
  10.  public class RemoteCaller    
  11.   {      
  12.     private string _MethodName;     
  13.      private byte[] _ParamByte;      
  14.     private IRemoteCall _Caller;       
  15.    private ArrayList _Params;       
  16.     /// <summary>         
  17.  /// 參數列表     
  18.      /// </summary>        
  19.   public ArrayList Params      
  20.     {           
  21.    get { return _Params; }            
  22.   set { _Params = value; }      
  23.     }  
  24.          /// <summary>       
  25.    /// 序列化后的參數        
  26.   /// </summary>       
  27.    public byte[] ParamByte       
  28.    {        
  29.       get { return _ParamByte; }      
  30.         set { _ParamByte = value; }       
  31.    }         /// <summary>      
  32.     /// 遠程服務方法名稱        
  33.   /// </summary>        
  34.   public string MethodName    
  35.       {        
  36.       get { return _MethodName; }        
  37.       set { _MethodName = value; }       
  38.    }         /// <summary>      
  39.     /// 遠程服務調用接口       
  40.    /// </summary>       
  41.    public IRemoteCall Caller    
  42.       {          
  43.     get { return _Caller; }      
  44.         set { _Caller = value; }    
  45.       }          
  46.  /// <summary>       
  47.    /// 構造       
  48.    /// </summary>      
  49.     /// <param name="caller">Webservice遠程接口</param>        
  50.   public RemoteCaller(IRemoteCall caller)        {             
  51.  _Caller = caller;            
  52.   _Params = new ArrayList();      
  53.     }       
  54.     /// <summary>      
  55.     /// 調用遠程接口        /// </summary>      
  56.     /// <param name="methodName">方法名稱</param>        
  57.   /// <param name="param">參數對象</param>     
  58.      /// <returns></returns>      
  59.     public byte[] Call(string methodName, object param)   
  60.      {           
  61.    try            {         
  62.          _MethodName = methodName;            
  63.     _ParamByte = Serializer.SerializeToBinary(param);         
  64.          return _Caller.GeneralCall(_MethodName, _ParamByte);          
  65.     }     
  66.          catch (Exception ex)       
  67.      {                
  68.   if (ex is SoapException)                
  69. throw new Exception(((SoapException)ex).Detail["Message"].InnerText); 
  70.                else                   
  71.    throw ex;          
  72.     }        }        
  73.    /// <summary>      
  74.     /// 調用遠程接口       
  75.    /// </summary>        
  76.   /// <param name="methodName">方法名稱</param>        
  77.   /// <param name="param">參數列表</param>       
  78.    /// <returns></returns>         
  79.  public byte[] Call(string methodName, ArrayList param)       
  80.    {            
  81.   try            
  82.   {        
  83.           _MethodName = methodName;                
  84. _Params = param;       
  85.            _ParamByte = Serializer.SerializeToBinary(_Params);           
  86.        return _Caller.GeneralCall(_MethodName, _ParamByte);         
  87.      }          
  88.     catch (Exception ex)        
  89.       {                
  90.   if (ex is SoapException)                 
  91.  throw new Exception(((SoapException)ex).Detail["Message"].InnerText);           
  92.        else               
  93.        throw ex;            }   
  94.        }         
  95.   /// <summary>      
  96.     /// 調用遠程接口      
  97.     /// </summary>        
  98.   /// <param name="methodName">方法名稱</param>       
  99.    /// <param name="param">參數對象數組</param>        
  100.   /// <returns></returns>      
  101.     public byte[] Call(string methodName, params object[] param)   
  102.        {         
  103.      try          
  104.     {        
  105.           foreach (object obj in param)         
  106.              _Params.Add(obj);              
  107.   _MethodName = methodName;       
  108.            _ParamByte = Serializer.SerializeToBinary(_Params);               
  109.    return _Caller.GeneralCall(_MethodName, _ParamByte);           
  110.    }       
  111.        catch (Exception ex)           
  112.    {                
  113.   if (ex is SoapException)                 
  114.      throw new Exception(((SoapException)ex).Detail["Message"].InnerText);    
  115.             else                   
  116.    throw ex;            }    
  117.       }           
  118. /// <summary>      
  119.     /// 調用遠程接口     
  120.      /// </summary>     
  121.      /// <returns></returns>     
  122.      public byte[] Call()       
  123.    {            try          
  124.     {             
  125.      if (string.IsNullOrEmpty(_MethodName))                 
  126.      throw new Exception("遠程方法不能為空!");                
  127.   return _Caller.GeneralCall(_MethodName, _ParamByte);            }    
  128.           catch (Exception ex)      
  129.         {                
  130.   if (ex is SoapException)          
  131.             throw new Exception(((SoapException)ex).Detail["Message"].InnerText);  
  132.               else                 
  133.      throw ex;         
  134.      }        }         
  135.   /// <summary>         
  136.  /// 調用遠程接口        /// </summary>   
  137.        /// <typeparam name="T">返回值類型</typeparam>       
  138.  /// <returns></returns>        
  139. public T Call<T>()     
  140.      {            byte[] resultByte = Call();          
  141.   return Serializer.DeserializeToObject<T>(resultByte);        }     
  142.       /// <summary>       
  143.    /// 調用遠程接口        
  144.   /// </summary>       
  145.    /// <typeparam name="T">返回值類型</typeparam>      
  146.     /// <param name="methodName">方法名稱</param>       
  147.    /// <param name="param">參數列表</param>      
  148.     /// <returns></returns>      
  149.     public T Call<T>(string methodName, ArrayList param)   
  150.        {            
  151.   byte[] resultByte = Call(methodName, param);            
  152.   return Serializer.DeserializeToObject<T>(resultByte);        
  153.   }     
  154.       public T Call<T>(string methodName, object param)        {          
  155.     try            {            
  156.       _MethodName = methodName;              
  157.     _ParamByte = Serializer.SerializeToBinary(param);                
  158.   byte[] resultByte = _Caller.GeneralCall(_MethodName, _ParamByte);          
  159.    
  160.        return Serializer.DeserializeToObject<T>(resultByte);          
  161.     }            catch (Exception ex)           
  162.    {        
  163.           if (ex is SoapException)             
  164.        throw new Exception(((SoapException)ex).Detail["Message"].InnerText);    
  165.             else                  
  166.     throw ex;          
  167.     }        }         
  168.   /// <summary>     
  169.      /// 調用遠程接口      
  170.     /// </summary>   
  171.        /// <typeparam name="T">返回值類型</typeparam>     
  172.      /// <param name="methodName">方法名稱</param>        
  173.   /// <param name="param">參數對象數組</param>     
  174.      /// <returns></returns>        
  175.   public T Call<T>(string methodName, params object[] param)        
  176.   {          
  177.     byte[] resultByte = Call(methodName, param);           
  178.    return Serializer.DeserializeToObject<T>(resultByte);       
  179.    }    }}  
  180.  

這個訪問器主要是定義了一系列訪問接口的重載,利用了c#的泛型更加使接口簡單了。哈哈,這個類就能讓我們實現一句話調用webservice,相當簡潔。注意里面的IRemoteCall屬性,就是只要傳入實現了該接口的類,就都可以通過該訪問器來訪問webservice。如何使用該類呢,下面給一個例子吧:


IRemoteCall Caller = new BlogService.BlogService();BLLBlogArtical bllArtical = new RemoteCaller(Caller).Call<BLLBlogArtical>("LoadBlog", id);

抱歉,說錯了,要兩句話來調用,但是這里少去了很多數據轉換的工作,因為有了泛型,呵呵,而且我可以在RemoteCaller這個訪問器類中做很多工作,比如異常處理,權限驗證等等。

四、總結 -- 寫了這么多不總結可不行

這個實現方法的核心在于用IRemoteCall接口來規范webservice類的實現方式均為統一GenerateCall,然后 webservice類中通過switch case來將所有方法整合在一起,避免頻繁更新WSDL的麻煩,***客戶端利用IRemoteCall定義一個webservice訪問器類 RemoteCaller來提供統一的webservice訪問。

原文鏈接:http://www.cnblogs.com/sxwgf/archive/2011/07/10/something-about-webservice.html

【編輯推薦】

  1. Java與.NET的WebServices相互調用
  2. 如何使用Netbeans生成的Webservice
  3. 淺談關于Webservices對接的一些問題
  4. MyEclipse配置WebService六步曲
  5. Flex跨域調用Webservice問題揭秘
責任編輯:彭凡 來源: 博客園
相關推薦

2009-11-26 10:32:57

PHP代碼優化

2020-10-19 19:25:32

Python爬蟲代碼

2018-01-09 18:06:41

Python爬蟲技巧

2024-01-30 10:11:00

SpringBoot項目開發

2011-06-01 16:50:21

JAVA

2013-03-29 13:17:53

XCode調試技巧iOS開發

2012-05-21 10:13:05

XCode調試技巧

2011-10-26 20:55:43

ssh 安全

2011-05-23 18:06:24

站內優化SEO

2021-10-12 23:10:58

UnsafeJavaJDK

2022-12-02 14:58:27

JavaScript技巧編程

2009-09-27 11:09:42

API設計

2015-12-08 09:05:41

Java內部類

2009-06-22 15:36:00

如何學好java

2011-11-28 15:57:26

MySQL數據庫主從配置

2020-04-14 09:22:47

bash腳本技巧

2020-04-08 10:21:58

bash腳本語言

2018-05-07 08:22:19

LinuxImageMagick查看圖片

2017-05-10 15:30:30

skynet崩潰程序

2017-09-20 15:07:32

數據庫SQL注入技巧分享
點贊
收藏

51CTO技術棧公眾號

少妇人妻互换不带套| 精品一区二区日本| 九九这里只有精品视频| 国产精品一区二区三区四区在线观看 | 国产精品网站在线看| 国产香蕉视频在线看| 欧美精品久久久久久| 欧美一区二区三区视频在线观看 | 三级网站在线免费观看| 91麻豆精品一二三区在线| 国产精品一区亚洲| 亚洲日韩中文字幕| aaaaaaaa毛片| 亚洲美女久久精品| 一区二区三区在线视频免费观看| 裸模一区二区三区免费| japanese国产| 日本女人一区二区三区| 久久久久久这里只有精品| 国产高清一区二区三区四区| 超碰成人在线免费| 欧美精品日韩综合在线| 亚洲国产精品久久久久爰色欲| 国产盗摄在线观看| 国产视频一区二区在线| 国产精品久久久久久久久久直播 | 韩国女主播一区二区| 亚洲综合999| 国产高清免费在线| 国产日产精品久久久久久婷婷| 国产91对白在线观看九色| 国产精品亚发布| 国产剧情在线视频| 黄色在线一区| 欧美不卡视频一区发布| 成人午夜免费影院| 欧美久久综合网| 亚洲欧美制服中文字幕| 小毛片在线观看| 91精品国产自产精品男人的天堂| 欧美一区二区三区性视频| www.色偷偷.com| 电影一区二区三区| 欧美日韩在线视频首页| 欧美一级片免费播放| 亚洲国产精品精华素| 亚洲欧美一区二区三区久本道91| 日韩国产欧美精品| 国产精品ⅴa有声小说| 久久一区二区视频| 精品国产一区二区三区日日嗨| 性做久久久久久久| 国产激情视频一区二区在线观看 | 草草视频在线一区二区| 欧美不卡123| 免费看91视频| 成人三级av在线| 精品国产乱码久久久久久夜甘婷婷| 捷克做爰xxxⅹ性视频| 95精品视频| 91精品一区二区三区在线观看| 91热视频在线观看| 亚洲1区在线| 精品国产免费人成电影在线观看四季 | 国产iv一区二区三区| 风间由美一区二区三区| 天天射,天天干| 久久影院午夜论| 亚州欧美一区三区三区在线 | 最新国产の精品合集bt伙计| 中文字幕综合在线观看| 国产传媒在线播放| 一区二区在线看| 中文字幕无码精品亚洲资源网久久| 99在线视频影院| 欧美午夜精品久久久久久久| 99久久国产宗和精品1上映 | 国产伦精品一区二区三| 内射无码专区久久亚洲| 99re免费视频精品全部| 欧美日本韩国在线| 91caoporn在线| 亚洲男人的天堂一区二区| 97超碰国产精品| 都市激情亚洲综合| 欧美日韩国产电影| 污网站免费观看| 欧美男gay| 久久久国产一区二区| 国产成人在线观看网站| 日本在线不卡一区| 97久久夜色精品国产九色| 日本黄色一区二区三区| 中文字幕不卡的av| 天天好比中文综合网| av片在线观看免费| 色综合久久天天综合网| 日韩av片免费观看| 天堂av一区二区三区在线播放| 综合网中文字幕| 精品处破女学生| 日本vs亚洲vs韩国一区三区 | 亚洲午夜久久久久久久久电影网| 日韩avxxx| 国产精品一区二区美女视频免费看| 亚洲黄色在线观看| 日本二区三区视频| 国产毛片久久| 99九九视频| 成年人视频网站在线| 亚洲一区二区三区自拍| 亚洲欧美国产中文| 日本久久成人网| 超在线视频97| 国产午夜无码视频在线观看| 丰满少妇久久久久久久| 伊人色综合久久天天五月婷| 日本不卡1234视频| 日韩亚洲欧美综合| 久久午夜福利电影| 亚洲精选在线| 亚洲综合中文字幕68页| а天堂8中文最新版在线官网| 亚洲国产成人精品视频| 欧美高清精品一区二区| 成人婷婷网色偷偷亚洲男人的天堂| 高清在线视频日韩欧美| 国产精品视频一二区| 国产网站一区二区| 欧美 日韩 激情| 成人18夜夜网深夜福利网| 日韩在线精品一区| 欧美性受xxx黑人xyx性爽| 久久综合九色欧美综合狠狠 | 国产福利视频网站| 人人爽香蕉精品| 欧美一区二区三区四区在线观看地址| а√天堂8资源在线| 日韩欧美一二三四区| 无码人妻精品中文字幕| 麻豆精品一区二区| 丝袜美腿玉足3d专区一区| av日韩亚洲| 国产丝袜一区二区| 黑人一级大毛片| 99久久婷婷国产综合精品电影| 中文字幕色呦呦| 日韩高清一区| 欧美激情在线狂野欧美精品| 精品国自产在线观看| 亚洲人妖av一区二区| 国产欧美一区二| 99tv成人| 亚洲最大av网| 青草在线视频| 亚洲第一天堂无码专区| 日韩精品一卡二卡| 91在线视频官网| 91黄色小网站| 日韩欧美网址| 91色精品视频在线| 亚洲wwwww| 日韩av有码在线| √资源天堂中文在线| 2021国产精品久久精品| 日本xxxxxxx免费视频| 欧美军人男男激情gay| 国产精品视频色| 国产色在线观看| 欧美不卡在线视频| 天堂中文在线网| 日本一区二区视频在线| 天天干天天玩天天操| 欧美日韩国产欧| 精品中文字幕一区| 亚洲不卡系列| 久青草国产97香蕉在线视频| 人妻精品一区一区三区蜜桃91| 欧美日韩国产专区| 国产7777777| 国产精品中文字幕日韩精品| 免费超爽大片黄| 国产亚洲一区二区三区不卡| 国产精品网站视频| 欧美78videosex性欧美| 亚洲人成在线观| 国产普通话bbwbbwbbw| 午夜欧美一区二区三区在线播放| 成人在线一级片| 国产在线精品一区二区夜色 | 亚洲精华液一区二区三区| 亚洲午夜精品久久久久久性色| 国产又黄又爽视频| 偷拍与自拍一区| 麻豆一区在线观看| 成人av免费在线观看| 久久久久久三级| 中文字幕一区二区三区久久网站| 裸模一区二区三区免费| 久久国产精品美女| 日本三级韩国三级久久| 在线观看小视频| 亚洲区中文字幕| 亚洲国产精品无码久久| 欧美唯美清纯偷拍| 日韩免费在线视频观看| 日韩一区在线看| 在线 丝袜 欧美 日韩 制服| 国产精品综合在线视频| 北条麻妃av高潮尖叫在线观看| 综合日韩在线| 日韩精品极品视频在线观看免费| 中文字幕一区日韩精品| 国产伦精品免费视频| 欧美sm一区| 欧美第一黄网免费网站| 137大胆人体在线观看| 日韩精品免费视频| 高清一区二区三区四区| 3atv一区二区三区| 日本丰满少妇做爰爽爽| 欧美日韩在线第一页| 动漫精品一区一码二码三码四码| 中文子幕无线码一区tr| 极品人妻一区二区三区| 成人一区二区三区在线观看| 欧美精品 - 色网| 青青草成人在线观看| 男人天堂网视频| 亚洲精品乱码久久久久久蜜桃麻豆| 99热都是精品| 欧美电影免费观看高清| 日韩国产精品一区二区| 小嫩嫩12欧美| 乱色588欧美| 日韩av系列| 精品中文字幕人| 香蕉久久精品日日躁夜夜躁| 韩日午夜在线资源一区二区 | 精品国产3级a| 亚洲欧美黄色片| 精品久久国产老人久久综合| 99热这里只有精品3| 欧美一区二区在线播放| 国产精品久久影视| 欧美肥妇毛茸茸| 国产精品亚洲lv粉色| 91精品国产综合久久精品麻豆 | 亚洲最新在线| 青草国产精品| 一区二区在线观看网站| 久久中文字幕av| 不卡中文字幕在线| 天天影视综合| 黄色录像特级片| 欧美视频不卡| 欧美成人高潮一二区在线看| 一本色道久久综合亚洲精品不| 日本阿v视频在线观看| 亚洲激情午夜| 丰满人妻中伦妇伦精品app| 日日骚欧美日韩| 一本岛在线视频| 国产一区二区不卡在线| 亚洲视频天天射| 91在线你懂得| 欧美成人久久久免费播放| 综合久久久久综合| 九九热视频精品| 欧美日韩亚洲视频一区| 国产主播第一页| 欧美肥胖老妇做爰| 亚洲欧美另类日韩| 亚洲欧美另类在线观看| 亚洲1卡2卡3卡4卡乱码精品| 欧美乱妇高清无乱码| av岛国在线| 国产精品扒开腿做爽爽爽视频| 亚洲福利影视| 国产精品国产三级欧美二区| 精品国产一区二区三区四区| 五月天av影院| 国产欧美一区二区色老头| 999精品视频在线| 国产精品一区二区三区99| 亚洲精品视频大全| 最好看的中文字幕久久| 日韩乱码人妻无码中文字幕| 欧美午夜精品理论片a级按摩| 99精品免费观看| 日韩电影免费观看中文字幕| 中文字幕在线视频区| 久久久久久久久国产| 国产成人精品一区二三区在线观看 | 久久精品视频在线| 国产99在线| 成人午夜两性视频| 亚洲精品亚洲人成在线| 樱花www成人免费视频| 亚洲欧美久久| 老女人性生活视频| 国产亚洲综合av| 国产中文字幕免费| 4hu四虎永久在线影院成人| 亚洲三区在线播放| 欧美成人午夜激情在线| 在线成人视屏| 国产伦精品一区二区三区视频免费| 精品国产91| www.av中文字幕| 国产一区二区三区在线观看免费| 波多野结衣 在线| 亚洲一区二区在线免费看| 亚洲特级黄色片| 日韩成人中文字幕| 男女免费观看在线爽爽爽视频| 国产精品久久久久久久久久东京 | 亚洲精品综合久久中文字幕| 宅男在线观看免费高清网站| 国产精品一区二区三区久久| 偷拍精品福利视频导航| bt天堂新版中文在线地址| 精品一区二区三区在线播放 | 一区二区在线免费| 97超碰国产在线| 国产性猛交xxxx免费看久久| 麻豆视频在线看| 国产精品日本一区二区| 亚洲最大av| 欧美激情国内自拍| 国产精品久久久久永久免费观看| 黄色在线视频网址| 精品亚洲一区二区三区| av白虎一区| 国产日韩精品推荐| 亚洲国产日韩在线| 在线观看一区二区三区四区| 亚洲精品成人天堂一二三| 国产又粗又猛又爽又黄91| 尤物九九久久国产精品的分类| 日韩精品99| 欧美日韩综合精品| 美女视频一区免费观看| 丝袜美腿中文字幕| 欧美性xxxx极品高清hd直播 | 久久久久青草大香线综合精品| 久草国产精品视频| 亚洲精品在线视频| 新片速递亚洲合集欧美合集| 欧洲一区二区日韩在线视频观看免费 | 久久久久国产一区二区三区四区| 久久久精品福利| 国产一区二区三区在线看| 成人免费毛片嘿嘿连载视频…| 日韩精彩视频| 狠狠色狠狠色综合日日91app| 影音先锋男人看片资源| 欧美久久久久中文字幕| 好吊日视频在线观看| 亚洲综合在线小说| 在线精品在线| 国产ts在线播放| 欧美日韩一区二区三区免费看| 香蕉视频国产在线观看| 亚洲va久久久噜噜噜| 亚洲高清资源| 亚洲av永久无码精品| 欧美天天综合色影久久精品| jzzjzzjzz亚洲成熟少妇| 成人激情视频免费在线| 国产精品va| 一级性生活大片| 欧美日本一道本在线视频| 超碰在线观看免费版| 国产日韩一区二区| 水野朝阳av一区二区三区| 色偷偷男人天堂| 精品久久一二三区| 超碰超碰人人人人精品| 亚洲欧洲精品一区| 国产91精品免费| 久久久久久亚洲av无码专区| xvideos亚洲人网站| 国产成人一二片| 91热这里只有精品| 一区二区三区中文字幕| 深夜影院在线观看| 国产日韩欧美在线播放| 亚洲日韩成人| 欧美美女性生活视频| 亚洲国产精品视频在线观看| 国产另类xxxxhd高清| 台湾无码一区二区| 国产日产亚洲精品系列| 性生活三级视频| 国产福利精品在线| 狠狠色丁香久久综合频道| 免费成人深夜天涯网站| 精品国产欧美一区二区| 欧美91在线|欧美|