欧美三区四区_av先锋影音资源站_亚洲第一论坛sis_影音先锋2020色资源网_亚洲精品社区_在线免费观看av网站_国产一区二区伦理_亚洲欧美视频一区二区_99视频精品全部免费在线_精精国产xxxx视频在线

技巧:服務器端異步 Web 方法_Web服務器教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

在九月份的第三篇專欄(英文)中,我談到了利用 Microsoftreg; .NET Framework 的客戶端功能通過 HTTP 異步調用 Web 服務的問題。這種調用 Web 服務的方法非常有用,使用時不必鎖定您的應用程序或產生過多后臺線程。現在我們了解一下在服務器端提供類似功能的異步 Web 方法。異步 Web 方法在編寫 ISAPI 擴展方面具有與 HSE_STATUS_PENDING 方法類似的高性能,但不需要為管理自己的線程池編寫代碼,同時又具有以托管代碼方式運行的所有優點。

首先我們考慮一下常規的同步 Microsoftreg; ASP.NET Web 方法。當您從同步 Web 方法返回時,將發送對該方法的響應。如果需要較長的時間來完成請求,則處理請求的線程會一直被占用,直到方法調用結束。不幸的是,多數較長的調用是由較長的數據庫查詢或對另一個 Web 服務的調用等事件引起的。例如,如果您調用數據庫,當前線程會一直等待調用完成。線程無事可做,只是等待,直至聽到查詢的返回。當線程等待完成對 TCP 套接字或后端 Web 服務的調用時,也會出現類似的問題。

讓線程處于等待狀態很不好,特別是在服務器的運行壓力很大的情況下。等待中的線程不會進行任何有效工作,例如為其他請求提供服務。我們需要找到一種方法,能夠在服務器上開始較長的后臺進程,同時又能將當前線程返回到 ASP.NET 進程池。然后,當較長的后臺進程完成時,我們調用一個回調函數,結束對請求的處理,并通過某種方式通知 ASP.NET 請求已完成。實際上,這種功能可由 ASP.NET 使用異步 Web 方法提供。

異步 Web 方法的工作原理

當您使用 Web 方法編寫典型的 ASP.NET Web 服務時,Microsoftreg; Visual Studioreg; .Net 只是編譯您的代碼以創建程序集;當收到對其 Web 方法的請求時,將調用該程序集。程序集本身并不知道關于 SOAP 的任何事情。因此,當您的應用程序首次啟動時,ASMX 處理程序必須反映您的程序集,以確定提供哪些 Web 方法。對于常規的同步請求,這些操作都很簡單:找出哪些方法具有關聯的 WebMethod 屬性、基于 SOAPAction HTTP 標頭來設置調用正確方法的邏輯。

對于異步請求,在反映過程中,ASMX 處理程序尋找具有某種簽名并將簽名識別為異步的 Web 方法。該處理程序將尋找符合以下規則的方法對:

BeginXXX 和 EndXXX Web 方法,其中 XXX 是任意字符串,表示要提供的方法的名稱。

BeginXXX 函數返回一個 IAsyncResult 接口,并分別接受 AsyncCallback 和一個對象,作為其最后兩個輸入參數。

EndXXX 函數接受一個 IAsyncResult 接口,作為其唯一的參數。

兩個方法都必須使用 WebMethod 屬性進行標識。

如果 ASMX 處理程序發現兩個方法符合上述所有條件,則將方法 XXX 作為常規的 Web 方法在其 WSDL 中提供。該方法將接受在 BeginXXX 的簽名中的 AsyncCallback 參數之前定義的參數作為輸入,并返回由 EndXXX 函數返回的內容。因此,如果某個 Web 方法具有如下同步聲明:

[WebMethod]

public string LengthyProcedure(int milliseconds) {...}

則異步聲明將為:

[WebMethod]

public IAsyncResult BeginLengthyProcedure(

int milliseconds,

AsyncCallback cb,

object s) {...}

[WebMethod]

public string EndLengthyProcedure(IAsyncResult call) {...}

每個方法的 WSDL 都是相同的。

在 ASMX 處理程序反映程序集并檢測到某個異步 Web 方法后,它必須以不同于處理同步請求的方式處理對該方法的請求。它將調用 BeginXXX 方法,而不是某個簡單方法。它將傳入的請求還原序列化到要傳遞到函數的參數中(與處理同步請求時一樣);但是它還將指針傳遞到一個內部回調函數(作為 BeginXXX 方法的額外 AsyncCallback 參數)。

這種方法類似于 .NET Framework 中 Web 服務客戶端應用程序的異步編程模式。如果客戶端支持異步 Web 服務調用,則可以為客戶端計算機釋放占用的線程;如果服務器端支持異步 Web 服務調用,則可以釋放服務器計算機上占用的線程。但這里有兩個關鍵的區別。首先,不是由服務器代碼調用 BeginXXX 和 EndXXX 函數,而是由 ASMX 處理程序調用。其次,您要為 BeginXXX 和 EndXXX 函數編寫代碼,而不能使用由 WSDL.EXE 或 Visual Studio .NET 中的 Add Web Reference(添加 Web 引用)向導生成的代碼。但結果是相同的,即釋放線程以使其能夠執行其他進程。

ASMX 處理程序調用服務器的 BeginXXX 函數后,會將線程返回到進程線程池,使之能夠處理接收到的任何其他請求。但是,還不能釋放請求的 HttpContext。ASMX 處理程序將等待,直到它傳遞給 BeginXXX 函數的回調函數被調用,它才結束處理請求。

一旦回調函數被調用,ASMX 處理程序將調用 EndXXX 函數,使您的 Web 方法可以完成任何所要執行的處理,并且可以得到被序列化到 SOAP 響應中的返回數據。EndXXX 函數返回后將發送響應,只有此時該請求的 HttpContext 才得到釋放。

簡單的異步 Web 方法

為舉例說明異步 Web 方法,我從一個名為 LengthyProcedure 的簡單同步 Web 方法開始,其代碼如下所示。然后我們再看一看如何異步完成相同的任務。LengthyProcedure 只占用給定的毫秒數。

[WebService]

public class SyncWebService : System.Web.Services.WebService

{

[WebMethod]

public string LengthyProcedure(int milliseconds)

{

System.Threading.Thread.Sleep(milliseconds);

return "成功";

}

}

現在我們將 LengthyProcedure 轉換為異步 Web 方法。我們必須創建如前所述的 BeginLengthyProcedure 函數和 EndLengthyProcedure 函數。請記住,我們的 BeginLengthyProcedure 調用需要返回一個 IAsyncResult 接口。這里,我打算使用一個委托以及該委托上的 BeginInvoke 方法,讓我們的 BeginLengthyProcedure 調用進行異步方法調用。傳遞到 BeginLengthyProcedure 的回調函數將被傳遞到委托上的 BeginInvoke 方法,從 BeginInvoke 返回的 IAsyncResult 將被 BeginLengthyProcedure 方法返回。

當委托完成時,將調用 EndLengthyProcedure 方法。我們將調用委托上的 EndInvoke 方法,以傳入 IAsyncResult,并將其作為 EndLengthyProcedure 調用的輸入。返回的字符串將是從該 Web 方法返回的字符串。下面是其代碼:

[WebService]

public class AsyncWebService : System.Web.Services.WebService

{

public delegate string LengthyProcedureAsyncStub(

int milliseconds);

public string LengthyProcedure(int milliseconds)

{

System.Threading.Thread.Sleep(milliseconds);

return "成功";

}

public class MyState

{

public object previousState;

public LengthyProcedureAsyncStub asyncStub;

}

[ System.Web.Services.WebMethod ]

public IAsyncResult BeginLengthyProcedure(int milliseconds,

AsyncCallback cb, object s)

{

LengthyProcedureAsyncStub stub

= new LengthyProcedureAsyncStub(LengthyProcedure);

MyState ms = new MyState();

ms.previousState = s;

ms.asyncStub = stub;

return stub.BeginInvoke(milliseconds, cb, ms);

}

[ System.Web.Services.WebMethod ]

public string EndLengthyProcedure(IAsyncResult call)

{

MyState ms = (MyState)call.AsyncState;

return ms.asyncStub.EndInvoke(call);

}

}

何時采用異步 Web 方法

在確定是否適合在您的應用程序中采用異步 Web 方法時,有幾個問題需要考慮。首先,調用的 BeginXXX 函數必須返回一個 IAsyncResult 接口。IAsyncResult 是從多個異步 I/O 操作返回的,這些操作包括訪問數據流、進行 Microsoftreg; Windowsreg; 套接字調用、執行文件 I/O、與其他硬件設備交互、調用異步方法,當然也包括調用其他 Web 服務。您可以從這些異步操作中得到 IAsyncResult,以便從 BeginXXX 函數返回它。您也可以創建自己的類以實現 IAsyncResult 接口,但隨后可能需要以某種方式包裝前面提到的某個 I/O 操作。

對于前面提到的大多數異步操作,使用異步 Web 方法包裝后端異步調用很有意義,可以使 Web 服務代碼更有效。但使用委托進行異步方法調用時除外。委托會導致異步方法調用占用進程線程池中的某個線程。不幸的是,ASMX 處理程序為進入的請求提供服務時同樣要使用這些線程。所以與對硬件或網絡資源執行真正 I/O 操作的調用不同,使用委托的異步方法調用在執行時仍將占用其中一個進程線程。您也可以占用原來的線程,同步運行您的 Web 方法。

下面的示例顯示了一個調用后端 Web 服務的異步 Web 方法。它已經使用 WebMethod 屬性標識了 BeginGetAge 和 EndGetAge 方法,以便異步運行。此異步 Web 方法的代碼調用名為 UserInfoQuery 的后端 Web 方法,以獲得它需要返回的信息。對 UserInfoQuery 的調用被異步執行,并被傳遞到 AsyncCallback 函數,后者被傳遞到 BeginGetAge 方法。這將導致當后端請求完成時,調用內部回調函數。然后,回調函數將調用 EndGetAge 方法以完成請求。此示例中的代碼比前面示例中的代碼簡單得多,并且還具有另外一個優點,即沒有在與為中間層 Web 方法請求提供服務的相同線程池中啟動后端處理。

[WebService]

public class GetMyInfo : System.Web.Services.WebService

{

[WebMethod]

public IAsyncResult BeginGetAge(AsyncCallback cb, Object state)

{

// 調用異步 Web 服務調用。

localhost.UserInfoQuery proxy

= new localhost.UserInfoQuery();

return proxy.BeginGetUserInfo("用戶名",

cb,

proxy);

}

[WebMethod]

public int EndGetAge(IAsyncResult res)

{

localhost.UserInfoQuery proxy

= (localhost.UserInfoQuery)res.AsyncState;

int age = proxy.EndGetUserInfo(res).age;

// 在此對 Web 服務的結果進行其他

// 處理。

return age;

}

}

發生在 Web 方法中的最常見的 I/O 操作類型之一是對 SQL 數據庫的調用。不幸的是,目前 Microsoftreg; ADO.NET 尚未定義一個完好的異步調用機制;而只是將 SQL 調用包裝到異步委托調用中對提高效率沒有什么幫助。雖然有時可以選擇緩存結果,但是也應當考慮使用 Microsoft SQL Server 2000 Web Services Toolkit(英文)將您的數據庫發布為 Web 服務。這樣您就可以利用 .NET Framework 中的支持,異步調用 Web 服務以查詢或更新數據庫。

通過 Web 服務調用訪問 SQL 時,需要注意眾多的后端資源。如果您使用了 TCP 套接字與 Unix 計算機通信,或者通過專用的數據庫驅動程序訪問其他一些可用的 SQL 平臺,甚至具有使用 DCOM 訪問的資源,您都可以考慮使用眾多的 Web 服務工具包將這些資源發布為 Web 服務。

使用這種方法的優點之一是您可以利用客戶端 Web 服務結構的優勢,例如使用 .NET Framework 的異步 Web 服務調用。這樣您將免費獲得異步調用能力,而您的客戶端訪問機制會與異步 Web 方法高效率地配合工作。

使用異步 Web 方法聚合數據

現在,許多 Web 服務都訪問后端的多個資源并為前端的 Web 服務聚合信息。盡管調用多個后端資源會增加異步 Web 方法模型的復雜性,但最終還是能夠顯著提高效率。

假設您的 Web 方法調用兩個后端 Web 服務:服務 A 和服務 B。從您的 BeginXXX 函數,您可以異步調用服務 A 和服務 B。您應該向每個異步調用傳遞自己的回調函數。在從服務 A 和服務 B 接收到結果后,為觸發 Web 方法的完成,您提供的回調函數將驗證所有的請求都已完成,在返回的數據上進行所有的處理,然后調用傳遞到 BeginXXX 函數的回調函數。這將觸發對 EndXXX 函數的調用,此函數的返回將導致異步 Web 方法的完成。

小結

異步 Web 方法在 ASP.NET Web 服務中提供了一個有效的機制,可以調用后端服務,而不會導致占用卻不利用進程線程池中的寶貴線程。通過結合對后端資源的異步請求,服務器可以使用自己的 Web 方法使同時處理的請求數目達到最大。您應該考慮使用此方法開發高性能的 Web 服務應用程序。

來源:網絡搜集//所屬分類:Web服務器教程/更新時間:2012-08-06
相關Web服務器教程
国产精品99免视看9| 成人午夜看片网址| 在线观看国产日韩| 国产欧美最新羞羞视频在线观看| 九九精品久久久| 免费黄色小视频在线观看| 日本一区二区免费高清| 亚洲视频一区在线观看| 久久久久国产精品www| 日韩av片在线看| 中文字幕一区二区人妻痴汉电车| 91精品国产乱码久久久久久| 亚洲成人精品一区二区| 国产精品pans私拍| japan高清日本乱xxxxx| 午夜无码国产理论在线| 精品一区二区三区免费毛片爱| 欧美成人高清电影在线| 日本一区视频在线观看免费| 久久国产精品国语对白| 免费看日本一区二区| 综合自拍亚洲综合图不卡区| 97久久精品人人澡人人爽缅北| 久久这里只精品| 四虎永久在线精品免费网址| 青青草成人在线观看| 精品蜜桃在线看| 不卡中文字幕在线| 无码人妻久久一区二区三区不卡| 韩国av一区| 欧美另类变人与禽xxxxx| 麻豆精品视频| 久草视频手机在线观看| 成人免费av| 日韩欧美国产骚| 成人h视频在线观看| 国产农村妇女精品一区| 特黄特色欧美大片| 亚洲成人动漫一区| 91九色极品视频| 老司机精品免费视频| 亚洲桃色综合影院| 五月婷婷久久综合| 高清国产一区| 欧美日韩在线国产| 亚洲国产精品综合久久久| 色哟哟一区二区三区| 国产精品一区二区在线观看| 乱h高h女3p含苞待放| 日韩在线观看| 欧美日韩中文国产| 日韩性感在线| 神马久久久久久久| 久久精品官网| 亚洲色图综合久久| 日日摸天天爽天天爽视频| 欧美一级大黄| 久久女同精品一区二区| 8x海外华人永久免费日韩内陆视频| 九色91porny| 久久gogo国模啪啪裸体| 中文字幕一区二区不卡| 国产精品丝袜久久久久久不卡| 中文人妻一区二区三区| 日韩电影在线观看完整免费观看| 香蕉乱码成人久久天堂爱免费| 97伦理在线四区| 永久看片925tv| 一区二区三区四区日韩| 日韩亚洲欧美在线观看| 免费看日b视频| 精品人妻一区二区三区蜜桃| 国产高清不卡二三区| 欧美巨乳美女视频| 亚洲在线观看网站| 日韩精品三级| 五月激情综合网| 久久精品国产一区二区三区日韩 | 午夜激情福利网| 欧美 日韩 国产一区二区在线视频 | 欧美日韩一区二区三区不卡| 亚洲一区二区精品在线| 亚洲图片视频小说| 国产激情偷乱视频一区二区三区| 欧美第一黄色网| 亚洲精品乱码久久| 亚洲伊人春色| 欧美三区在线观看| 懂色av一区二区三区四区五区| 国产欧美一级片| 成人av免费网站| 欧美资源在线观看| 男女男精品视频网站| 国产电影一区二区在线观看| 欧美一区二区三区在| 国产资源在线免费观看| 色尼玛亚洲综合影院| 国产日产欧产精品推荐色| 国产在线精品成人一区二区三区| 欧美精品久久久久性色| 国产精品久久久久久久久久妞妞 | 精品99久久久久成人网站免费| 黄色日韩在线| 国产亚洲精品日韩| 乳色吐息在线观看| 色棕色天天综合网| 日韩欧美国产一区二区三区| 免费在线a视频| 久久久久伊人| 黑人精品xxx一区| 最新不卡av| 午夜国产在线观看| 日韩美女视频一区二区| 精品九九九九| 一级片免费观看视频| 99视频在线观看一区三区| 国产精品视频永久免费播放 | 91九色综合久久| 欧美连裤袜在线视频| 中文字幕欧美色图| 成人精品高清在线| 国产美女在线观看一区| 欧美成人精品不卡视频在线观看| 久久久水蜜桃| 亚洲自偷自拍熟女另类| 天堂在线资源8| 亚洲色图视频免费播放| 免费中文日韩| www.四虎在线观看| 中文字幕巨乱亚洲| 韩国一区二区三区美女美女秀 | 无码av中文一区二区三区桃花岛| 亚洲欧美99| 亚洲欧洲国产综合| 亚洲黄色在线视频| 亚洲精品国产精品久久| 亚洲人在线观看视频| 亚洲综合色噜噜狠狠| 一区二区三区我不卡| 成人直播视频| 婷婷国产在线综合| 色哟哟免费网站| 成人福利一区二区| 一本色道久久加勒比精品 | 成人免费在线播放视频| 欧美亚洲精品日韩| 亚洲色图狠狠干| 亚洲成人自拍偷拍| www.亚洲视频.com| 天堂久久av| 精品国产1区| 久久精品国产精品亚洲红杏| 91精品国产91久久久久久吃药| 永久免费看片视频教学| 喷水一区二区三区| 国产精品成人在线| 亚洲熟妇无码乱子av电影| 91香蕉视频在线| 国产伦精品一区二区三区在线| 九九久久99| 中文字幕二区三区| 国产欧美精品一区二区色综合 | 奇米影音第四色| 国产精品美女久久久久久不卡 | 久久成人免费日本黄色| 国产精品美女无圣光视频| 中文字幕一区二区三区四区欧美| 久久综合色之久久综合| 久久99国产精品99久久| 午夜黄色小视频| 日韩欧美亚洲一二三区| 欧美 国产 小说 另类| 国产精品亚洲二区| 一区二区亚洲精品国产| 亚洲精品国产精品国自| 青青青伊人色综合久久| 国产欧美精品xxxx另类| 国产特黄一级片| 亚洲午夜三级在线| 香港三级韩国三级日本三级| 美女精品一区最新中文字幕一区二区三区| 亚洲精品久久久一区二区三区 | 亚洲综合免费观看高清完整版在线| 日韩视频一二三| 超碰成人在线观看| 亚洲精品之草原avav久久| www..com.cn蕾丝视频在线观看免费版 | 婷婷激情四射五月天| 久久中文字幕av| 欧美成年人视频| 日韩毛片在线视频| 国产欧美日产一区| 在线观看免费黄色片| 红杏一区二区三区| 在线观看日韩欧美| 少妇aaaaa| 91碰在线视频| 夜夜春亚洲嫩草影视日日摸夜夜添夜 | 国产精品免费无码| 国产一区二区福利视频| 久久99国产精品99久久| 欧美伊人亚洲伊人色综合动图| 日韩欧美国产综合| 国精产品一区二区三区| 国产一区不卡视频| 久久超碰亚洲| 日韩一区二区三免费高清在线观看| 精品少妇一区二区三区日产乱码| 日韩乱码人妻无码中文字幕久久| 国内成人免费视频| 久久亚洲国产精品日日av夜夜| 久久精品资源| 日韩精品免费在线视频观看| 特级西西人体高清大胆| 97久久久精品综合88久久| 亚洲精品欧美精品| 欧美a大片欧美片| 日韩在线视频观看| 91av在线免费视频| 亚洲欧洲中文日韩久久av乱码| 日本中文字幕网址| 中文不卡在线| 国产精品日韩在线观看| 少妇人妻一区二区| 日韩欧美国产小视频| 9.1片黄在线观看| 91天堂素人约啪| 欧美乱做爰xxxⅹ久久久| 97国产精品| 国产精品电影久久久久电影网| 韩国中文字幕hd久久精品| 在线成人午夜影院| 亚洲色图 激情小说| 91免费看视频| 美女扒开大腿让男人桶| 91精品国产自产在线观看永久∴| 人人爽久久涩噜噜噜网站| 成人午夜福利视频| 日韩一区二区三区四区| 男人天堂资源网| 国产人成亚洲第一网站在线播放| 国产原创中文在线观看 | 另类欧美小说| 国产亚洲精品美女久久| 欧美福利在线观看| 国产精品一区二区av白丝下载| 欧美日韩成人一区| 欧美精品日韩在线| 国产精品美女久久久久高潮| 色欲av无码一区二区人妻| 99日韩精品| 国产伦精品一区二区三区免| 免费一级欧美在线大片| 大胆欧美人体视频| 999精品国产| 日韩欧美一卡二卡| 青青草在线观看视频| 亚洲一区二区三区中文字幕在线| 欧美日韩理论片| 国产美女久久久久| 老司机午夜免费福利视频| 国产精品大片免费观看| 高清视频在线观看一区| 狠狠久久伊人| 午夜精品在线视频| 亚洲 精品 综合 精品 自拍| 亚洲精品久久久久久久久久久 | 性感少妇一区| 蜜桃av色综合| 欧美精品一区二区三区精品| 国产精品国产三级国产aⅴ浪潮 | 精品国产xxx| 亚洲一区二区三区四区五区午夜| 日韩欧中文字幕| 杨幂毛片午夜性生毛片| 日韩高清欧美激情| 亚洲精品在线免费看| 国产精品videosex性欧美| 成人午夜一级二级三级| 日本亚州欧洲精品不卡| 久久久久久亚洲精品| 亚洲aaaaaaa| 国产一区二区三区四区福利| 一区二区三区黄| 日韩一级精品视频在线观看| 日本免费一二三区| 色综合久久88色综合天天免费| 亚洲一二三四视频| 亚洲一区二区三区四区五区中文| 亚洲av成人无码一二三在线观看| 久久精品男人天堂av| 极品粉嫩美女露脸啪啪| 成人激情小说网站| 老头吃奶性行交视频| 国产一区日韩二区欧美三区| 天堂…中文在线最新版在线| 日韩av中文字幕一区二区三区| 欧美性受黑人性爽| 国产一区二区三区久久| 亚洲精品一区二区三区av| 好吊视频一区二区三区四区| 蜜桃999成人看片在线观看| 久久在线播放| 国产在线观看一区| 波多野结衣在线观看一区二区| 亚洲精品欧美极品| 国产成人影院| www.成人av.com| 不卡在线一区| 国产一区二区精品免费| 日韩在线视频精品| 国产一区二区高清不卡| 天堂美国久久| 久久伊人资源站| 欧美黄色一级视频| 日本一区二区三区在线视频| 狠狠爱www人成狠狠爱综合网| 牛人盗摄一区二区三区视频| 欧美婷婷在线| 最新国产精品久久| 视频在线观看91| 2019日韩中文字幕mv| 激情小说亚洲一区| 波多野结衣作品集| av亚洲精华国产精华精华| 青青草原国产在线视频| 久久久久国产一区二区三区四区 | 亚洲综合av影视| 欧美影院三区| 欧美成熟毛茸茸复古| 韩国亚洲精品| av磁力番号网| 精品一区在线看| 午夜dv内射一区二区| 26uuu国产在线精品一区二区| 老女人性生活视频| 亚洲欧美国产毛片在线| 一级二级黄色片| 在线亚洲人成电影网站色www| 日韩乱码一区二区| 精品国产乱码久久久久久1区2区| 国产又粗又猛又爽又黄91| 怡红院精品视频| free欧美| 国产精品成人观看视频国产奇米| 四虎884aa成人精品最新| 精品国产免费一区二区三区| 激情久久五月| 日韩a级黄色片| 国产成人午夜电影网| 欧美性猛交xxxx乱大交91| 综合电影一区二区三区| 国产麻豆视频在线观看| 精品1区2区3区| 中文字字幕在线中文乱码| 国产一区二区三区中文| 91看片一区| 国产精品一区二区三区成人| 成人高清av| 中文字幕一区二区三区乱码| 国产资源在线一区| 涩多多在线观看| 亚洲精品国产a久久久久久| 亚洲二区在线播放| 欧美成人国产一区二区| 欧美77777| 日本一区二区不卡| 精品视频网站| 夜夜爽99久久国产综合精品女不卡 | 精品黑人一区二区三区在线观看| 欧美大片大片在线播放| 精品国产乱子伦一区二区| 好吊色欧美一区二区三区| 久久综合网络一区二区| 久久婷婷国产91天堂综合精品| 国产精品日韩成人| 色欲人妻综合网| 亚洲国产精品女人久久久| gay欧美网站| 国产一区深夜福利| 国产精品v日韩精品v欧美精品网站 | 欧美片一区二区三区| 麻豆精品少妇| 欧美一区二区视频17c| 黄色小说综合网站| 性活交片大全免费看| 精品久久久久久中文字幕大豆网| 狠狠狠狠狠狠狠| 久久亚洲精品一区二区| 欧美精品国产白浆久久久久| 欧美一区国产一区| 国产一区二区电影| 免费黄色三级网站| 欧美日韩免费一区二区三区视频 | 国产福利精品一区二区| 国产中文字幕一区二区| 欧美羞羞免费网站| 亚洲高清在线观看视频| 国产精品久久色| 亚洲另类视频|