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

首頁 > 編程 > C# > 正文

C#動態webservice調用接口

2020-01-24 01:48:53
字體:
來源:轉載
供稿:網友

C#動態webservice調用接口

using System;using System.Collections;using System.IO;using System.Net;using System.Text;using System.Xml;using System.Xml.Serialization;namespace Hishop.Plugins{  /// <summary>  /// 利用WebRequest/WebResponse進行WebService調用的類  /// </summary>  public class WebServiceCaller  {    #region Tip:使用說明    //webServices 應該支持Get和Post調用,在web.config應該增加以下代碼    //<webServices>    // <protocols>    //  <add name="HttpGet"/>    //  <add name="HttpPost"/>    // </protocols>    //</webServices>     //調用示例:    //Hashtable ht = new Hashtable(); //Hashtable 為webservice所需要的參數集    //ht.Add("str", "test");    //ht.Add("b", "true");    //XmlDocument xx = WebSvcCaller.QuerySoapWebService("http://localhost:81/service.asmx", "HelloWorld", ht);    //MessageBox.Show(xx.OuterXml);    #endregion     /// <summary>    /// 需要WebService支持Post調用    /// </summary>    public static XmlDocument QueryPostWebService(String URL, String MethodName, Hashtable Pars)    {      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName);      request.Method = "POST";      request.ContentType = "application/x-www-form-urlencoded";      SetWebRequest(request);      byte[] data = EncodePars(Pars);      WriteRequestData(request, data);      return ReadXmlResponse(request.GetResponse());    }     /// <summary>    /// 需要WebService支持Get調用    /// </summary>    public static XmlDocument QueryGetWebService(String URL, String MethodName, Hashtable Pars)    {      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName + "?" + ParsToString(Pars));      request.Method = "GET";      request.ContentType = "application/x-www-form-urlencoded";      SetWebRequest(request);      return ReadXmlResponse(request.GetResponse());    }     /// <summary>    /// 通用WebService調用(Soap),參數Pars為String類型的參數名、參數值    /// </summary>    public static XmlDocument QuerySoapWebService(String URL, String MethodName, Hashtable Pars)    {      if (_xmlNamespaces.ContainsKey(URL))      {        return QuerySoapWebService(URL, MethodName, Pars, _xmlNamespaces[URL].ToString());      }      else      {        return QuerySoapWebService(URL, MethodName, Pars, GetNamespace(URL));      }    }     private static XmlDocument QuerySoapWebService(String URL, String MethodName, Hashtable Pars, string XmlNs)    {      _xmlNamespaces[URL] = XmlNs;//加入緩存,提高效率      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);      request.Method = "POST";      request.ContentType = "text/xml; charset=utf-8";      request.Headers.Add("SOAPAction", "/"" + XmlNs + (XmlNs.EndsWith("/") ? "" : "/") + MethodName + "/"");      SetWebRequest(request);      byte[] data = EncodeParsToSoap(Pars, XmlNs, MethodName);      WriteRequestData(request, data);      XmlDocument doc = new XmlDocument(), doc2 = new XmlDocument();      doc = ReadXmlResponse(request.GetResponse());       XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);      mgr.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");      String RetXml = doc.SelectSingleNode("http://soap:Body/*/*", mgr).InnerXml;      doc2.LoadXml("<root>" + RetXml + "</root>");      AddDelaration(doc2);      return doc2;    }    private static string GetNamespace(String URL)    {      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL + "?WSDL");      SetWebRequest(request);      WebResponse response = request.GetResponse();      StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);      XmlDocument doc = new XmlDocument();      doc.LoadXml(sr.ReadToEnd());      sr.Close();      return doc.SelectSingleNode("http://@targetNamespace").Value;    }     private static byte[] EncodeParsToSoap(Hashtable Pars, String XmlNs, String MethodName)    {      XmlDocument doc = new XmlDocument();      doc.LoadXml("<soap:Envelope xmlns:xsi=/"http://www.w3.org/2001/XMLSchema-instance/" xmlns:xsd=/"http://www.w3.org/2001/XMLSchema/" xmlns:soap=/"http://schemas.xmlsoap.org/soap/envelope//"></soap:Envelope>");      AddDelaration(doc);      //XmlElement soapBody = doc.createElement_x_x("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/");      XmlElement soapBody = doc.CreateElement("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/");      //XmlElement soapMethod = doc.createElement_x_x(MethodName);      XmlElement soapMethod = doc.CreateElement(MethodName);      soapMethod.SetAttribute("xmlns", XmlNs);      foreach (string k in Pars.Keys)      {        //XmlElement soapPar = doc.createElement_x_x(k);        XmlElement soapPar = doc.CreateElement(k);        soapPar.InnerXml = ObjectToSoapXml(Pars[k]);        soapMethod.AppendChild(soapPar);      }      soapBody.AppendChild(soapMethod);      doc.DocumentElement.AppendChild(soapBody);      return Encoding.UTF8.GetBytes(doc.OuterXml);    }    private static string ObjectToSoapXml(object o)    {      XmlSerializer mySerializer = new XmlSerializer(o.GetType());      MemoryStream ms = new MemoryStream();      mySerializer.Serialize(ms, o);      XmlDocument doc = new XmlDocument();      doc.LoadXml(Encoding.UTF8.GetString(ms.ToArray()));      if (doc.DocumentElement != null)      {        return doc.DocumentElement.InnerXml;      }      else      {        return o.ToString();      }    }     /// <summary>    /// 設置憑證與超時時間    /// </summary>    /// <param name="request"></param>    private static void SetWebRequest(HttpWebRequest request)    {      request.Credentials = CredentialCache.DefaultCredentials;      request.Timeout = 10000;    }     private static void WriteRequestData(HttpWebRequest request, byte[] data)    {      request.ContentLength = data.Length;      Stream writer = request.GetRequestStream();      writer.Write(data, 0, data.Length);      writer.Close();    }     private static byte[] EncodePars(Hashtable Pars)    {      return Encoding.UTF8.GetBytes(ParsToString(Pars));    }     private static String ParsToString(Hashtable Pars)    {      StringBuilder sb = new StringBuilder();      foreach (string k in Pars.Keys)      {        if (sb.Length > 0)        {          sb.Append("&");        }        //sb.Append(HttpUtility.UrlEncode(k) + "=" + HttpUtility.UrlEncode(Pars[k].ToString()));      }      return sb.ToString();    }     private static XmlDocument ReadXmlResponse(WebResponse response)    {      StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);      String retXml = sr.ReadToEnd();      sr.Close();      XmlDocument doc = new XmlDocument();      doc.LoadXml(retXml);      return doc;    }     private static void AddDelaration(XmlDocument doc)    {      XmlDeclaration decl = doc.CreateXmlDeclaration("1.0", "utf-8", null);      doc.InsertBefore(decl, doc.DocumentElement);    }     private static Hashtable _xmlNamespaces = new Hashtable();//緩存xmlNamespace,避免重復調用GetNamespace  }}
//調用并讀取解析返回結果  DataSet ds = new DataSet();     XmlNode xmlNode1;    XmlDataDocument xd = new XmlDataDocument();    StringBuilder sb;     Hashtable ht = new Hashtable();    ht.Add("xmlIn", "<Request><MemCode>001</MemCode></Request>");    xmlNode1 = Hishop.Plugins.WebServiceCaller.QuerySoapWebService("http://xxx.xxxx.com/Service.asmx", "SinPointQuery", ht);    if (xmlNode1 == null)    {      return;    }    string xmlstr= HttpUtility.HtmlDecode(xmlNode1.OuterXml);    sb = new StringBuilder(xmlstr);    if (sb.ToString().Equals(""))    {      return;    }    xd.LoadXml(sb.ToString());    ds.ReadXml(new XmlNodeReader(xd));     //ds可以返回出結果集

示例二:

1.動態調用的方法:

/// <summary>     /// 動態webservice調用     /// </summary>     /// <returns>string</returns>      public string wsTest()     {       string url = "http://localhost:8080/myWebserviceTest/services/myServices?wsdl";//wsdl地址       string name = "wsTest";//javaWebService開放的接口       WebServiceProxy wsd = new WebServiceProxy(url, name);        string[] str = { "測試c#調用java的webService" , "Hello WebService"};        string suc = (string)wsd.ExecuteQuery(name, str);        return suc;     } 

2.動態調用具體類:

using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq;   using System.IO; using System.Net; using System.CodeDom; using System.CodeDom.Compiler; using System.Web.Services.Description; using System.Xml.Serialization; using System.Web.Services.Discovery; using System.Xml.Schema; using System.Text; using System.Security.Cryptography; using System.Reflection; using System.Collections.Generic; using System.Xml;  namespace TPSVService {   /// <summary>   /// WebServiceProxy 的摘要說明   /// </summary>   [WebService(Namespace = "http://tempuri.org/")]   [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]   [ToolboxItem(false)]   // 若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消對下行的注釋。   // [System.Web.Script.Services.ScriptService]   public class WebServiceProxy : System.Web.Services.WebService   {      #region 私有變量和屬性定義     /// <summary>              /// web服務地址                  /// </summary>                   private string _wsdlUrl = string.Empty;     /// <summary>              /// web服務名稱                  /// </summary>                   private string _wsdlName = string.Empty;     /// <summary>              /// 代理類命名空間                  /// </summary>                   private string _wsdlNamespace = "FrameWork.WebService.DynamicWebServiceCalling.{0}";     /// <summary>              /// 代理類類型名稱                  /// </summary>                   private Type _typeName = null;     /// <summary>              /// 程序集名稱                   /// </summary>                   private string _assName = string.Empty;     /// <summary>              /// 代理類所在程序集路徑                  /// </summary>                   private string _assPath = string.Empty;     /// <summary>              /// 代理類的實例                  /// </summary>                   private object _instance = null;     /// <summary>              /// 代理類的實例                  /// </summary>                   private object Instance     {       get       {         if (_instance == null)         {           _instance = Activator.CreateInstance(_typeName);           return _instance;         }         else           return _instance;       }     }     #endregion      #region 構造函數     public WebServiceProxy(string wsdlUrl)     {        this._wsdlUrl = wsdlUrl;       string wsdlName = WebServiceProxy.getWsclassName(wsdlUrl);       this._wsdlName = wsdlName;       this._assName = string.Format(_wsdlNamespace, wsdlName);       this._assPath = Path.GetTempPath() + this._assName + getMd5Sum(this._wsdlUrl) + ".dll";       this.CreateServiceAssembly();     }      public WebServiceProxy(string wsdlUrl, string wsdlName)     {       this._wsdlUrl = wsdlUrl;       this._wsdlName = wsdlName;       this._assName = string.Format(_wsdlNamespace, wsdlName);       this._assPath = Path.GetTempPath() + this._assName + getMd5Sum(this._wsdlUrl) + ".dll";       this.CreateServiceAssembly();     }     #endregion      #region 得到WSDL信息,生成本地代理類并編譯為DLL,構造函數調用,類生成時加載     /// <summary>                  /// 得到WSDL信息,生成本地代理類并編譯為DLL                  /// </summary>                   private void CreateServiceAssembly()     {       if (this.checkCache())       {         this.initTypeName();         return;       }       if (string.IsNullOrEmpty(this._wsdlUrl))       {         return;       }       try       {         //使用WebClient下載WSDL信息                     WebClient web = new WebClient();         Stream stream = web.OpenRead(this._wsdlUrl);         ServiceDescription description = ServiceDescription.Read(stream);//創建和格式化WSDL文檔         ServiceDescriptionImporter importer = new ServiceDescriptionImporter();//創建客戶端代理代理類         importer.ProtocolName = "Soap";         importer.Style = ServiceDescriptionImportStyle.Client; //生成客戶端代理                     importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;         importer.AddServiceDescription(description, null, null);//添加WSDL文檔         //使用CodeDom編譯客戶端代理類                  CodeNamespace nmspace = new CodeNamespace(_assName);  //為代理類添加命名空間                 CodeCompileUnit unit = new CodeCompileUnit();         unit.Namespaces.Add(nmspace);         this.checkForImports(this._wsdlUrl, importer);         ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);         CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");         CompilerParameters parameter = new CompilerParameters();         parameter.ReferencedAssemblies.Add("System.dll");         parameter.ReferencedAssemblies.Add("System.XML.dll");         parameter.ReferencedAssemblies.Add("System.Web.Services.dll");         parameter.ReferencedAssemblies.Add("System.Data.dll");         parameter.GenerateExecutable = false;         parameter.GenerateInMemory = false;         parameter.IncludeDebugInformation = false;         CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);         provider.Dispose();         if (result.Errors.HasErrors)         {           string errors = string.Format(@"編譯錯誤:{0}錯誤!", result.Errors.Count);           foreach (CompilerError error in result.Errors)           {             errors += error.ErrorText;           }           throw new Exception(errors);         }         this.copyTempAssembly(result.PathToAssembly);         this.initTypeName();       }       catch (Exception e)       {         throw new Exception(e.Message);       }     }     #endregion      #region 執行Web服務方法     /// <summary>                  /// 執行代理類指定方法,有返回值                    /// </summary>                     /// <param  name="methodName">方法名稱</param>                  /// <param  name="param">參數</param>                   /// <returns>object</returns>                     public object ExecuteQuery(string methodName, object[] param)     {       object rtnObj = null;        string[] args = new string[2];       List<string> list = new List<string>();       List<string> list1 = new List<string>();       List<string> list2 = new List<string>();       object[] obj = new object[3];        try       {         if (this._typeName == null)         {           //記錄Web服務訪問類名錯誤日志代碼位置           throw new TypeLoadException("Web服務訪問類名【" + this._wsdlName + "】不正確,請檢查!");         }         //調用方法         MethodInfo mi = this._typeName.GetMethod(methodName);         if (mi == null)         {           //記錄Web服務方法名錯誤日志代碼位置           throw new TypeLoadException("Web服務訪問方法名【" + methodName + "】不正確,請檢查!");         }         try         {           if (param == null)             rtnObj = mi.Invoke(Instance, null);           else {             list.Add("Hello ");             list.Add("WebService ");             list.Add(" ! ");              list1.Add("I ");             list1.Add("am ");             list1.Add("test ");              list2.Add("do ");             list2.Add("it ");             list2.Add("now ");              obj[0] = list;             obj[1] = list1;             obj[2] = list2;              rtnObj = mi.Invoke(Instance, new object[] { obj });             //rtnObj = mi.Invoke(Instance, new object[] { param });           }         }         catch (TypeLoadException tle)         {           //記錄Web服務方法參數個數錯誤日志代碼位置           throw new TypeLoadException("Web服務訪問方法【" + methodName + "】參數個數不正確,請檢查!", new TypeLoadException(tle.StackTrace));         }       }       catch (Exception ex)       {         throw new Exception(ex.Message, new Exception(ex.StackTrace));       }       return rtnObj;     }      /// <summary>                  /// 執行代理類指定方法,無返回值                    /// </summary>                     /// <param  name="methodName">方法名稱</param>                  /// <param  name="param">參數</param>                   public void ExecuteNoQuery(string methodName, object[] param)     {       try       {         if (this._typeName == null)         {           //記錄Web服務訪問類名錯誤日志代碼位置           throw new TypeLoadException("Web服務訪問類名【" + this._wsdlName + "】不正確,請檢查!");         }         //調用方法         MethodInfo mi = this._typeName.GetMethod(methodName);         if (mi == null)         {           //記錄Web服務方法名錯誤日志代碼位置           throw new TypeLoadException("Web服務訪問方法名【" + methodName + "】不正確,請檢查!");         }         try         {           if (param == null)             mi.Invoke(Instance, null);           else             mi.Invoke(Instance, param);         }         catch (TypeLoadException tle)         {           //記錄Web服務方法參數個數錯誤日志代碼位置           throw new TypeLoadException("Web服務訪問方法【" + methodName + "】參數個數不正確,請檢查!", new TypeLoadException(tle.StackTrace));         }       }       catch (Exception ex)       {         throw new Exception(ex.Message, new Exception(ex.StackTrace));       }     }     #endregion      #region 私有方法     /// <summary>                    /// 得到代理類類型名稱                     /// </summary>                     private void initTypeName()     {       Assembly serviceAsm = Assembly.LoadFrom(this._assPath);       Type[] types = serviceAsm.GetTypes();       string objTypeName = "";       foreach (Type t in types)       {         if (t.BaseType == typeof(SoapHttpClientProtocol))         {           objTypeName = t.Name;           break;         }       }       _typeName = serviceAsm.GetType(this._assName + "." + objTypeName);     }      /// <summary>                /// 根據web  service文檔架構向代理類添加ServiceDescription和XmlSchema                   /// </summary>                     /// <param  name="baseWSDLUrl">web服務地址</param>                  /// <param  name="importer">代理類</param>                   private void checkForImports(string baseWsdlUrl, ServiceDescriptionImporter importer)     {       DiscoveryClientProtocol dcp = new DiscoveryClientProtocol();       dcp.DiscoverAny(baseWsdlUrl);       dcp.ResolveAll();       foreach (object osd in dcp.Documents.Values)       {         if (osd is ServiceDescription) importer.AddServiceDescription((ServiceDescription)osd, null, null); ;         if (osd is XmlSchema) importer.Schemas.Add((XmlSchema)osd);       }     }      /// <summary>                  /// 復制程序集到指定路徑                    /// </summary>                     /// <param  name="pathToAssembly">程序集路徑</param>                   private void copyTempAssembly(string pathToAssembly)     {       File.Copy(pathToAssembly, this._assPath);     }      private string getMd5Sum(string str)     {       Encoder enc = System.Text.Encoding.Unicode.GetEncoder();       byte[] unicodeText = new byte[str.Length * 2];       enc.GetBytes(str.ToCharArray(), 0, str.Length, unicodeText, 0, true);       MD5 md5 = new MD5CryptoServiceProvider();       byte[] result = md5.ComputeHash(unicodeText);       StringBuilder sb = new StringBuilder();       for (int i = 0; i < result.Length; i++)       {         sb.Append(result[i].ToString("X2"));       }       return sb.ToString();     }      /// <summary>                  /// 是否已經存在該程序集                    /// </summary>                     /// <returns>false:不存在該程序集,true:已經存在該程序集</returns>                    private bool checkCache()     {       if (File.Exists(this._assPath))       {         return true;       }       return false;     }      //私有方法,默認取url入口的文件名為類名     private static string getWsclassName(string wsdlUrl)     {       string[] parts = wsdlUrl.Split('/');       string[] pps = parts[parts.Length - 1].Split('.');       return pps[0];     }     #endregion   } } 

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产mv久久久| 日韩av一卡二卡| 久久精品久久久久| 91经典在线视频| 欧美黄色片在线观看| 日韩美女中文字幕| 久久久久久国产精品| 亚洲国产精品人久久电影| 国产婷婷97碰碰久久人人蜜臀| 亚洲最大的成人网| 成人黄色免费看| 日韩欧美aaa| 亚洲free嫩bbb| 亚洲一区二区免费在线| 国产精品久久一区主播| 国产精品成人一区二区| 2023亚洲男人天堂| 日韩在线不卡视频| 91精品免费视频| 北条麻妃99精品青青久久| 久久综合免费视频影院| 国产99视频在线观看| 日韩美女在线观看| 亚洲春色另类小说| 欧美专区福利在线| 国产69精品99久久久久久宅男| 国产精品第七十二页| 久久久欧美一区二区| www.美女亚洲精品| 国产亚洲成av人片在线观看桃| 97国产精品人人爽人人做| 欧美激情视频播放| 欧美最猛性xxxx| 久久亚洲春色中文字幕| 亚洲自拍高清视频网站| 成人福利在线视频| 国产精品爽爽ⅴa在线观看| 国产精品国产三级国产aⅴ浪潮| 久久久久成人网| 国产精品久久久久久av福利软件| 日韩视频在线一区| 国产精品成久久久久三级| 亚洲日韩中文字幕| 青草青草久热精品视频在线观看| 成人黄色在线免费| 久久久久久久影院| 成人春色激情网| 高清视频欧美一级| 91亚洲一区精品| 亚洲女人天堂视频| 欧美午夜久久久| 久久99亚洲热视| 久久久久久久一区二区三区| 精品视频在线播放免| 久久久久久免费精品| 成人av.网址在线网站| 国产一区二区三区在线| 日韩中文字幕在线视频播放| 综合欧美国产视频二区| 秋霞成人午夜鲁丝一区二区三区| 中文日韩在线视频| 日韩一区在线视频| 中文字幕亚洲无线码在线一区| 91亚洲精品久久久久久久久久久久| 91国内揄拍国内精品对白| 日韩电影免费观看在线| 国产精品在线看| 亚洲二区中文字幕| 久久久亚洲影院| 欧美专区中文字幕| 亚洲三级免费看| 国产婷婷97碰碰久久人人蜜臀| 国产美女精品视频免费观看| 亚洲国产精品嫩草影院久久| 精品久久久久久中文字幕| 国产精品女人久久久久久| 欧美人与性动交| 亚洲国产成人av在线| 亚洲国产精品系列| 成人淫片在线看| 欧美激情第一页xxx| 久久久久久久香蕉网| 中文字幕精品久久久久| 欧美极品少妇xxxxⅹ免费视频| 91精品国产免费久久久久久| 亚洲人成网站999久久久综合| 97国产精品人人爽人人做| 日韩欧美亚洲范冰冰与中字| 国模视频一区二区| 久久久免费观看视频| 国产suv精品一区二区三区88区| 亚洲少妇中文在线| 中文字幕不卡av| 国产在线不卡精品| 亚洲午夜av电影| 国产欧美精品在线播放| 亚洲第一精品久久忘忧草社区| 精品自拍视频在线观看| 成人免费在线视频网址| 亚洲第一天堂无码专区| 97久久精品国产| 亚洲国产精品中文| 91精品国产亚洲| 日韩中文综合网| xvideos国产精品| 国产成人综合一区二区三区| 欧美成人亚洲成人| 91中文在线视频| 视频在线观看一区二区| 中文字幕亚洲综合久久| 日本中文字幕不卡免费| 国产精品网址在线| 欧美日韩成人在线播放| 成人免费视频xnxx.com| 亚洲精品国产拍免费91在线| 91精品国产综合久久久久久蜜臀| 国产精品久久久久久婷婷天堂| 九九久久国产精品| 国产精品视频久久久| 少妇高潮久久久久久潘金莲| 国产99视频精品免视看7| 91在线精品视频| 国内精品视频一区| 国产在线视频一区| 欧洲精品久久久| 亚洲国产日韩欧美在线动漫| 91福利视频在线观看| 久久精品在线播放| 日韩欧美极品在线观看| 久久6精品影院| 亚洲激情 国产| 在线观看不卡av| 国产欧美精品一区二区三区介绍| 青草热久免费精品视频| 成人av在线网址| 九色精品美女在线| 亚洲第一在线视频| 亚洲一区二区久久久久久久| 亚洲天堂免费在线| 欧美亚洲第一页| 欧美另类极品videosbest最新版本| 97视频免费观看| 亚洲精品wwww| 亚洲一区二区三区在线免费观看| 亚洲国产一区二区三区四区| 久久天天躁夜夜躁狠狠躁2022| 亚洲奶大毛多的老太婆| 色综合久久88色综合天天看泰| 欧美日产国产成人免费图片| 国产成人一区二区三区电影| 亚洲第一精品自拍| 国产成人福利夜色影视| 日韩欧美成人区| www.日韩系列| 久久免费观看视频| 欧美日韩国产色视频| 亚洲一区第一页| 日韩成人在线视频网站| 国产精品91在线观看| 亚洲国产精品va在线看黑人动漫| 国产在线精品播放| 国产精品91在线| 亚洲偷欧美偷国内偷| 久久99青青精品免费观看|