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

首頁 > 開發(fā) > XML > 正文

XML WebService完全實(shí)例詳細(xì)解析

2024-09-05 20:55:59
字體:
供稿:網(wǎng)友

  首先,我們必須了解什么是webservice.就概念上來說,可能比較復(fù)雜,不過我們可以有個(gè)宏觀的了解:webservice就是個(gè)對(duì)外的接口,里面有 函數(shù)可供外部客戶調(diào)用(注意:里面同樣有客戶不可調(diào)用的函數(shù)).假若我們是服務(wù)端,我們寫好了個(gè)webservice,然后把它給了客戶(同時(shí)我們給了他 們調(diào)用規(guī)則),客戶就可以在從服務(wù)端獲取信息時(shí)處于一個(gè)相對(duì)透明的狀態(tài).即是客戶不了解(也不需要)其過程,他們只獲取數(shù)據(jù).

  webservice傳遞的數(shù)據(jù)只能是序列化的數(shù)據(jù),典型的就是xml數(shù)據(jù),這里我們也只討論xml數(shù)據(jù)的傳輸.

  有了一些對(duì)xml webservice的初步了解后,我們將切入正題,即是用一個(gè)具體的webservice事例的形式來講解具體的webservice用法,用具體的事例來講解一個(gè)概念我想怎么也要比單純的說理能讓人容易理解吧.

  這里,我們將以一個(gè)簡(jiǎn)單的分布式課件搜索系統(tǒng)為例來講解.使用vs2003為編譯環(huán)境,c#為語言,sqlservcer2000為數(shù)據(jù)庫.(這個(gè)例子來 源于一位網(wǎng)上朋友的文章的啟發(fā),覺得很能代表webservice的特點(diǎn),就按那個(gè)想法做了這么個(gè)系統(tǒng)來示例了)

  首先,明確我們要做什么.我們需要一個(gè)對(duì)客戶的接口,也就是個(gè)站點(diǎn),我們把它稱做servicegathersite,它是何種形式都無所謂,甚至它本身 并不需要數(shù)據(jù)庫,它只是提供給用戶一個(gè)查詢的接口,真正的服務(wù),普通用戶是不接觸到的.然后,這里我們還需要若干個(gè)提供服務(wù)的站點(diǎn),我們可以稱它們?yōu)橘Y源 站,這里為簡(jiǎn)單起見,假設(shè)有兩個(gè)資源站,分別叫websitea,websiteb,它們可以是不對(duì)外公布的,只是為了豐富查詢數(shù)據(jù)而存在.最后,是我們 最需要關(guān)注的東西---資源站提供給servicegathersite的服務(wù).兩個(gè)資源站,就有兩個(gè)服務(wù),我們稱為siteaservice和 sitebservice.兩個(gè)服務(wù)間沒有任何關(guān)系,內(nèi)部提供的方法也完全沒關(guān)聯(lián),只是需要把方法如何使用告訴servicegathersite,意思 是,服務(wù)只提供查詢接口,返回的數(shù)據(jù)如何處理,服務(wù)本身并不管,全由使用服務(wù)的站點(diǎn)分配.

  寫了這么多,算是簡(jiǎn)要的介紹了下有關(guān)xml webservice的概念和我們這個(gè)例子的結(jié)構(gòu),下篇文章,我們將開始真正進(jìn)入代碼的設(shè)計(jì)階段.

  上篇文章介紹了些webservice的基本特性和我們例子的結(jié)構(gòu),這篇文章我們將開始具體的代碼編寫工作.

  這個(gè)專題主要講述的是webservice,因此這里我們的代碼以webservice相關(guān)為主,而其他工程,例如:servicegathersite,websitea等,只將簡(jiǎn)略介紹.

  在vs2003中,開發(fā)一個(gè)webservice并不是件困難的事,首先,我們新建一個(gè)webservice項(xiàng)目(文件->新建->項(xiàng)目->c#->web服務(wù)應(yīng)用程序)

  建完這個(gè)工程,我們將看到一個(gè)叫service1.asmx的文件,這就是webservice的標(biāo)準(zhǔn)文件,它也有ui的概念,不過我們一般不關(guān)注,因 此,我們查看其cs代碼文件.如果你什么都還沒做的話,將看見一個(gè)被注釋掉的helloworld的webmethod,把注釋去掉,在運(yùn)行,你就可以得 到最簡(jiǎn)單的webservice運(yùn)行實(shí)例了.點(diǎn)擊"helloworld"將執(zhí)行其方法.顯然,這個(gè)函數(shù)對(duì)我們的意義只在于宏觀的了解了下web服務(wù)的寫 法.

  下面,我們將開始具體介紹webservice的寫法.在代碼文件里,如果我們寫了一個(gè)函數(shù)后,希望此函數(shù)成為外部可調(diào)用的接口函數(shù),我們必須在函數(shù)上面 添上一行代碼[webmethod(description="函數(shù)的描述信息")],如果你的函數(shù)沒有這個(gè)申明,它將不能被用戶引用.如:

  [webmethod(description="最簡(jiǎn)單的方法")]
  public string helloworld()
  {
  return "hello world";
  }
  這個(gè)函數(shù)就是外部可調(diào)用的接口函數(shù),對(duì)用戶來說相當(dāng)于一個(gè)api.如果某用戶在引用了這個(gè)服務(wù)后,他調(diào)用helloworld()方法,他就將獲得"helloworld"這個(gè)返回值.
  看到這里,我們是不是發(fā)現(xiàn),其實(shí)webservice并不是那么的神秘,它也不過只是個(gè)接口,對(duì)我們而言,側(cè)重點(diǎn)依然是接口函數(shù)的編寫.下面,我將給出我們的例子所需要的接口函數(shù).
  [webmethod(description="查詢以獲取需要的課件信息")]
  public xmldatadocument getsiteadata(string assignname)
  {
  xmldatadocument xd=new xmldatadocument(); //
  dataset ds=new dataset();
  cstoreproc cp=new cstoreproc("searchassign");
  cp.addparin("@keywords",sqldbtype.varchar,30,assignname);
  cp.addparout("@res",sqldbtype.int);
  if(cp.selectproc()) //如果執(zhí)行成功,存儲(chǔ)過程
  {
  cp.mydata.enforceconstraints=false; //不進(jìn)行格式嚴(yán)格檢查
  if((int)cp.getreturnvalue("@res")==-1)
  {
  string xml="";
  xd.loadxml(xml);
  return xd;
  }
  xd=new xmldatadocument(cp.mydata);
  xmlnode root1=xd.documentelement;
  xmlnodelist roots=root1.selectnodes("list");
  foreach(xmlnode roota in roots) //為所有元素加上站點(diǎn)名稱標(biāo)記
  {
  xmlelement link=xd.createelement("sitename");
  link.innertext=configurationsettings.appsettings["sitename"].tostring();
  roota.appendchild(link);
  }
  return xd;
  }
  else return null;
  }

  這是獲取資源站點(diǎn)信息的一個(gè)接口函數(shù).里面大部分的代碼,我想對(duì)于有一定asp.net基礎(chǔ)的朋友來說,都應(yīng)該是一看就明白,這里只說明下cstoreproc,這是我封裝的一個(gè)存儲(chǔ)過程類,主要功能是執(zhí)行各種類型的存儲(chǔ)過程.

  細(xì)心的朋友可能會(huì)發(fā)現(xiàn)這個(gè)函數(shù)的返回類型似乎比較特殊,是個(gè)xml的文檔.我們?cè)谇懊嬉呀?jīng)說過,webservice只能傳輸序列化數(shù)據(jù),xml顯然滿足 條件,但比如hash表之類的非序列化數(shù)據(jù),是不能傳輸?shù)?xml使用最為廣泛,而且考慮到跨平臺(tái)應(yīng)用,所以這里我們只以xml數(shù)據(jù)的傳輸來示例.

  接上篇文章,我們先簡(jiǎn)單解釋下getsiteadata(string assignname)函數(shù).

  函數(shù)功能很簡(jiǎn)單,只是要返回查詢結(jié)果,其數(shù)據(jù)格式是xmldatadocument.當(dāng)查詢失敗時(shí)(無匹配查詢結(jié)果),我們構(gòu)造一個(gè)xml,返回一個(gè)空記 錄.否則,我們把查詢后的dataset生成一個(gè)xmldatadocument,接下來,由于該項(xiàng)目的需要,我加入了一個(gè)循環(huán),添加dataset里所 沒有的節(jié)點(diǎn),站點(diǎn)名稱.在這之后,算是完成了一個(gè)符合我們期望格式的xml數(shù)據(jù)文檔,我們把它返回.

  好了,webservice的方法函數(shù)介紹完了(這里還有個(gè)web服務(wù)方法,稍后介紹),接下來我們的任務(wù)是怎么調(diào)用它了.首先把webservice的 項(xiàng)目編譯完成,假定我們這個(gè)服務(wù)是針對(duì)資源站點(diǎn)a的,我們不妨稱其為servicea.先單獨(dú)運(yùn)行asmx文件,執(zhí)行g(shù)etsiteadata (string assignname)方法,將提示你輸入?yún)?shù),你輸入要搜索的內(nèi)容,點(diǎn)確認(rèn),將返回給你一個(gè)xml數(shù)據(jù),并在ie上顯示出來,這就是你搜索到的內(nèi)容拉.

  這里對(duì)servicea的工作再做點(diǎn)介紹,在我們這個(gè)項(xiàng)目里,它是資源站點(diǎn)a提供的服務(wù),意思是,它查詢的數(shù)據(jù)將全來源于站點(diǎn)a,而站點(diǎn)a資源添加在本項(xiàng)目也有專門的工程實(shí)現(xiàn).

  好了,回到正題.這里我介紹vs調(diào)用webservice的方法,其實(shí)其他平臺(tái)的調(diào)用方法也是大同小異.首先我們介紹web引用方式,這種方式我強(qiáng)烈建議 調(diào)試時(shí)使用,非常方便.右擊引用,點(diǎn)添加web引用,輸入你的webservice地址,如:http: //localhost/aspxproject/webservicesolution/sitebservice/service1.asmx,你必 須保證你輸入的webservice存在.然后引用即可,注意:web引用名將作為你加入的webservice的名字空間.比如你輸入了:sitea, 那服務(wù)的實(shí)例化將是這樣:sitea.service1 servicea=new sitea.service1();(service1是服務(wù)的類名).

  完成了這一步,service的調(diào)用似乎變的那么簡(jiǎn)單,我們已經(jīng)實(shí)現(xiàn)了遠(yuǎn)程實(shí)例化,接下來的遠(yuǎn)程調(diào)用也是一樣的容易.下面給出資源采集站servicegathersite的綁定代碼(只采集a站點(diǎn)的信息)

  //綁定數(shù)據(jù)
  public void binddata()
  {
  servicea=new sitea.service1();
  dataset ds=new dataset();
  xmlnode xmlnode1;
  xmldatadocument xd=new xmldatadocument();
  stringbuilder xmlstring1;
  xmlnode1=servicea.getsiteadata(strsearch);
  if(xmlnode1==null) //--存儲(chǔ)過程執(zhí)行失敗
  return;
  xmlstring1=new stringbuilder(xmlnode1.outerxml);
  if(xmlstring1.tostring().equals(""))
  return ;
  xd.loadxml(xmlstring1.tostring());
  ds.readxml(new xmlnodereader(xd));
  datagrid1.datasource=ds.tables["list"].defaultview;
  datagrid1.databind();
  }

  此段代碼給出了xml轉(zhuǎn)化成dataset的解決方案,雖然這不是必須的,但畢竟在asp.net里,dataset占的作用之重,誰都知道的.其他的請(qǐng) 朋友們先看(呵呵,個(gè)中高手就免了),在下篇文章中將會(huì)有對(duì)它的一些解釋與及多服務(wù)分布調(diào)用的解決方案,寫了三篇了,發(fā)現(xiàn)似乎還是有些朋友看的,那我就獻(xiàn) 丑繼續(xù)寫下去好了,大家有什么意見也希望提出,在下的理解存在偏駁也再所難免,希望諒解:)

  接上篇文章,我們先簡(jiǎn)單說明下綁定函數(shù).首先實(shí)例化servicea,這個(gè)和一般類的實(shí)例化并沒有不同..接下來用xmlnode1來接受函數(shù)的返回值,接下來是構(gòu)造xml,并將其轉(zhuǎn)化為dataset,這是通用的方法,如果是剛接觸不久的朋友,最好能記下這種方法.

  接下來給出異步調(diào)用兩個(gè)服務(wù)的代碼

  //綁定數(shù)據(jù)
  public void binddata()
  {
  iasyncresult ar1;
  iasyncresult ar2;
  servicea=new sitea.service1();
  serviceb=new siteb.service1();
  dataset ds=new dataset();
  xmlnode xmlnode1,xmlnode2;
  xmldatadocument xd=new xmldatadocument();
  stringbuilder xmlstring1,xmlstring2;
  //--簡(jiǎn)單的異步調(diào)用
  ar1=servicea.begingetsiteadata(strsearch,null,null);
  ar2=serviceb.begingetsiteadata(strsearch,null,null);
  xmlnode1=servicea.endgetsiteadata(ar1);
  xmlnode2=serviceb.endgetsiteadata(ar2);
  //----------
  if(xmlnode1==null&&xmlnode2==null) //--存儲(chǔ)過程執(zhí)行失敗
  return;
  xmlstring1=new stringbuilder(xmlnode1.outerxml);
  xmlstring2=new stringbuilder(xmlnode2.outerxml);
  xmlstring1=makenewxmlstring(xmlstring1,xmlstring2); //生成新的xml
  if(xmlstring1.tostring().equals(""))
  return ;
  xd.loadxml(xmlstring1.tostring());
  ds.readxml(new xmlnodereader(xd));
  datagrid1.datasource=ds.tables["list"].defaultview;
  datagrid1.databind();
  }
  //生成新xml
  public stringbuilder makenewxmlstring(stringbuilder str1,stringbuilder str2)
  {
  str1=str1.replace("","");
  str2=str2.replace("","");
  str1.append(str2.tostring());
  return str1;
  }

  這有兩個(gè)需要注意的地方,一個(gè)是xml構(gòu)造,還有就是異步調(diào)用的實(shí)現(xiàn),請(qǐng)讀者,自己理解

  下面講下通過dll來引用webservice的方法,我只把流程介紹下.

  首先,在ie輸入服務(wù)的地址,如:http://www.xxx.com/service.asmx

  然后寫輸入http://www.xxx.com/service.asmx?wsdl

  打開后,另存為xxx.wsdl

  然后用vs的命令提示符來編譯:wsdl /namespace:sitea servicea.wsdl

  生成名字空間為sitea的代理類

  最后csc /out:servicea.dll /t:library service1.cs ,其中service1.cs為代理類文件

  最后引用dll就可以了.

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
一本色道久久88亚洲精品综合| 最近中文字幕在线中文高清版| 亚洲成年人av| 免费一级淫片aaa片毛片a级| 午夜精品久久久久久久久| 图片专区亚洲欧美另类| 高清成人在线| 性欧美xxxx视频在线观看| 95精品视频在线| 欧美在线播放一区二区| 亚洲午夜无码av毛片久久| 天堂资源av| 国产剧情在线观看一区二区| 四虎永久在线精品免费网址| 国产精品日韩在线一区| 在线高清av| 黄色av免费观看| 无套内谢丰满少妇中文字幕| 四虎影视精品| 免费91麻豆精品国产自产在线观看| 蜜桃传媒麻豆第一区在线观看| 亚洲美女免费视频| 97se亚洲国产综合自在线不卡| 激情综合色播五月| 成人黄色综合网站| 国产精品久久国产精品| 成人激情视频在线| 日韩欧美国产一区二区三区| 99精品视频免费看| 牛夜精品久久久久久久| 成人做爰视频网站| 成人高清在线| 成人av网站在线观看免费| 成人av影音| 一本久久综合亚洲鲁鲁| 精品无码国产污污污免费网站| 久久福利网址导航| 国产一区二区三区四区大秀| 无码aⅴ精品一区二区三区浪潮| 欧美熟妇精品一区二区| 性色av香蕉一区二区| 老熟妇仑乱一区二区av| 日韩激情视频网站| a级片免费观看| 永久免费黄色软件| 国产成人高清在线| 伊人免费视频2| 97在线视频免费看| 中文字幕视频一区二区| 亚洲激情中文在线| 98视频在线噜噜噜国产| 国产一区免费观看| 欧美性猛交xxxxx免费看| 亚洲一区二区福利| 国产黄色片视频| 国产综合色在线视频区| 色狠狠色噜噜噜综合网| 一本大道av一区二区在线播放| 亚洲蜜桃视频| 日韩av123| 婷婷久久综合九色国产成人| 欧美日韩免费一区| 美女扒开腿让男人桶爽久久动漫| 要久久电视剧全集免费| 97福利网站在线观看视频| 古装做爰无遮挡三级聊斋艳谭| 91精品国产自产91精品| 你懂的视频在线观看资源| 国产成人精彩在线视频九色| 国产又粗又长又黄| 天堂在线观看免费视频| 亚洲人成在线播放| 国产午夜无码视频在线观看| 99久久婷婷国产综合精品电影√| 中文一区一区三区免费在线观看| 国精产品一区一区三区有限在线| 欧洲美女精品免费观看视频| 亚洲人精品午夜在线观看| 亚洲丝袜精品| www在线观看播放免费视频日本| 欧美三级韩国三级日本三斤在线观看| 久久性生活视频| 97精品一区二区视频在线观看| 欧美一级片网址| 精品国产a一区二区三区v免费| 国产午夜精品一区二区三区嫩草| 亚洲国产欧美一区二区三区丁香婷| 亚洲人成网站999久久久综合| 国产伦精品一区二区三区照片| 国产乱淫a∨片免费视频| 欧美日韩视频不卡| 蜜臀a∨国产成人精品| 国产精品自拍在线| 亚洲视频axxx| 综合一区中文字幕| 日韩高清a**址| 国产素人在线观看| 日本一区二区三区在线播放| 日韩成人动漫| 我不卡伦不卡影院| 9.1片黄在线观看| 国产精品外国| 中文字幕欧美日韩在线| 国产精品第一视频| 欧美亚洲日本国产| 亚洲成人精品影院| 51妺嘿嘿午夜福利| 欧美日韩精品在线观看| 99久re热视频这里只有精品6| 亚洲欧美在线免费观看| 久久亚洲一区二区三区四区| 色妞一区二区三区| 欧美成人女星排行榜| 午夜dj在线观看高清视频完整版| 717影院理论午夜伦不卡久久| 三年中文高清在线观看第6集| 亚洲欧洲午夜| 国产美女做爰免费视频软件| 久久亚洲捆绑美女| 欧美中文在线视频| 亚洲性猛交富婆| 丰满白嫩尤物一区二区| 欧美一区二区激情视频| 五月婷婷综合激情| 三级网站免费观看| 在线观看国产视频一二三| 黄色视屏免费在线观看| 黄色春季福利在线看| 精品久久久国产| 精品在线免费视频| 免费黄网大全| 国产精品一区二区资源| αv一区二区三区| 五月天久久久久久| 亚洲深夜福利在线观看| 韩剧1988免费观看全集| 欧美日韩激情视频8区| 欧美午夜xxx| 久久黄色免费网站| 午夜精品一区二区在线观看| 天天综合天天做| 欧美日韩国产精品综合| 亚洲激情五月婷婷| 日韩精品亚洲一区二区三区免费| 性生活免费在线观看| 秋霞毛片大全| 国产日韩精品一区二区| 日本一区二区网站| 国产精品亚洲а∨天堂免在线| 欧美三级欧美一级| 好看的日韩精品视频在线| 成人3d动漫一区二区三区91| www.成人网.com| 亚洲精选视频免费看| 日本三级电影免费观看| 丰满湿润大白屁股bbw按摩| 欧美精品免费视频| 亚洲 日韩 国产第一| 色在线免费观看| 97视频精彩视频在线观看| 日韩精品久久久久久| 中文在线最新版天堂| а√最新版地址在线天堂| 午夜三级在线观看| 亚洲热在线视频| 久久久久久欧美精品色一二三四| 97影院秋霞午夜在线观看| 成人a免费视频| 99视频在线精品| 国产欧美一区二区三区在线观看视频| 欧美三级视频| 熟女人妻一区二区三区免费看| 久久国产精品免费视频| 免费看ww视频网站入口| 一区二区三区免费在线| 亚洲人成电影网站色| 欧美性受xxxx黒人xyx性爽| 丝袜脚交一区二区| 激情另类综合| 欧美日韩精品久久久| 欧美精品xxxxbbbb| 国产黄色精品视频| 制服丝袜影音| 亚洲大片av| 亚洲免费伊人电影| 日韩精品视频在线看| 色噜噜狠狠一区二区三区| 26uuu精品一区二区三区四区在线| 公侵犯人妻一区二区三区| 成人区精品一区二区| 日韩av影视综合网| 国产91对白刺激露脸在线观看| 久久久久久成人| 欧美在线视频导航| 欧美一区欧美二区| 国产视频精品自拍| 欧美激情aⅴ一区二区三区| 九九热精品在线播放| 亚洲精品国产精品国自产观看| 我的公把我弄高潮了视频| 久久久久久久久久久99| 国产精品入口麻豆| 夫妇交换中文字幕| 无码人妻久久一区二区三区| 午夜在线观看一区| 成人黄色午夜影院| 亚洲精品写真福利| 一级黄色av片| 制服丝袜激情欧洲亚洲| 三级视频在线看| 国产高清视频一区二区| 黑人无套内谢中国美女| 欧美xxxxxbbbbb| 日本黄色一区二区| 久久这里只精品| 在线电影av不卡网址| 国产精品88久久久久久妇女| 精品国产三级| 日韩在线观看免费网站| 亚洲人成绝费网站色ww| 成人影院在线看| 国模无码一区二区三区| 亚洲熟妇av一区二区三区漫画| 一本到在线视频| 污视频网址在线观看| 国产97在线观看| 女生裸体免费视频| 成人在线免费电影| 国产精品一区久久| 五月婷婷在线观看视频| 波多野结衣av一区二区全免费观看| www.久久色.com| 亚洲v国产v欧美v久久久久久| 精品久久五月天| 亚洲护士老师的毛茸茸最新章节| 亚洲欧美校园春色| jizzjizz免费大全| 在线一区亚洲| 大吊一区二区三区| jizzjizz国产精品喷水| 精品无码三级在线观看视频| 日韩成人av网站| 午夜精品一区二区在线观看| 国产超碰在线一区| 亚洲涩涩在线| 欧美18一14sex性处hd| 欧美精品一二区| 2017亚洲男人天堂| 久久久久这里只有精品| 欧美精品一区二区三区久久| 99精品欧美一区二区三区综合在线| 国产精品美女www爽爽爽视频| 国产成人精品一区二区三区在线| www毛片com| 狠狠色狠狠色综合日日91app| 欧美日韩国产黄色| 91视频www| 久久久欧美精品sm网站| 2020国内自拍视频| 1卡2卡3卡精品视频| 亚洲精品一区二区三区在线观看| 国产精品蜜芽在线观看| 亚洲av无码成人精品区| 99久久99久久精品免费观看| 日韩国产精品久久久| 中文字幕人妻熟女人妻a片| 好看不卡的中文字幕| 欧美激情在线精品一区二区三区| 欧美日韩一区二区免费视频| 欧美大片网站在线观看| 日本在线视频一区| 亚洲大胆精品| 91精品国产色综合久久久蜜香臀| 精品一区二区国语对白| 日本xxx免费| 国产资源精品在线观看| 日韩欧美2区| 中文字幕日韩有码| 中文字幕av在线免费观看| 国产美女精彩久久| 91女神在线观看| 欧美高清视频不卡网| 无码人妻熟妇av又粗又大| 国产欧美日韩精品一区二区三区| 国产伦精品一区二区三区| 免费黄网站在线播放| 18岁视频在线观看| 国产九色精品| 特级黄色片视频| 91成人免费视频| 久久精品无码一区| 欧美日韩一区二区三区四区不卡| 91玉足脚交嫩脚丫在线播放| 亚洲精品美女在线观看播放| 国产精品-区区久久久狼| 亚洲精品免费一二三区| 深夜福利国产精品| 欧美另类videos死尸| 97超级碰碰人国产在线观看| 免费看久久久| 日韩精品亚洲专区| 性xxxxxxxxx18欧美| 国产成人精品免高潮在线观看| 国产欧美日韩不卡免费| 国产成人一区二区精品非洲| 黄a大片av永久免费| 91国产免费观看| 国产精品嫩草视频| 日本免费不卡| 亚洲一卡久久| 一区国产精品视频| 日韩一区亚洲二区| 亚洲最新视频在线播放| 日韩中文字幕区一区有砖一区| 亚洲免费国产视频| 国产成人涩涩涩视频在线观看| 日韩一级电影| 男人与禽猛交狂配| 亚洲免费一级电影| 色婷婷综合激情| 免费一区二区三区| 精品国产免费av| 粉嫩久久久久久久极品| 国产成人极品视频| 奇米四色中文综合久久| 久久一区中文字幕| 亚洲视频一区二区三区| 拔插拔插海外华人免费|