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

.Net下的MSMQ的同步異步調(diào)用_.Net教程

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

推薦:用.net動(dòng)態(tài)創(chuàng)建類(lèi)的實(shí)例
用.net動(dòng)態(tài)創(chuàng)建類(lèi)的實(shí)例 看了網(wǎng)上很多關(guān)于DotNet動(dòng)態(tài)創(chuàng)建類(lèi)的實(shí)例的文章,我這里想總結(jié)一下,其實(shí)方法很簡(jiǎn)單,就是用“Activator.CreateInstance”。但是這個(gè)方法需要待創(chuàng)建的類(lèi)的

一、MSMQ簡(jiǎn)介

MSMQ(微軟消息隊(duì)列)是Windows操作系統(tǒng)中消息應(yīng)用程序的基礎(chǔ),是用于創(chuàng)建分布式、松散連接的消息通訊應(yīng)用程序的開(kāi)發(fā)工具。消息隊(duì)列

和電子郵件有著很多相似處,他們都包含多個(gè)屬性,用于保存消息,消息類(lèi)型中都指出發(fā)送者和接收者的地址;然而他們的用處卻有著很大的

區(qū)別:消息隊(duì)列的發(fā)送者和接收者是應(yīng)用程序,而電子郵件的發(fā)送者和接收者通常是人。如同電子郵件一樣,消息隊(duì)列的發(fā)送和接收也不需要

發(fā)送者和接收者同時(shí)在場(chǎng),可以存儲(chǔ)在消息隊(duì)列或是郵件服務(wù)器中。

二、消息隊(duì)列的安裝

默認(rèn)情況下安裝操作系統(tǒng)是不安裝消息隊(duì)列的,你可以在控制面板中找到添加/刪除程序,然后選擇添加/刪除Windows組件一項(xiàng),然后選擇應(yīng)

用程序服務(wù)器,雙擊它進(jìn)入詳細(xì)資料中選擇消息隊(duì)列一項(xiàng)進(jìn)行安裝,如圖:

三、消息隊(duì)列類(lèi)型

消息對(duì)列分為3類(lèi):

公共隊(duì)列

MachineName\QueueName

能被別的機(jī)器所訪(fǎng)問(wèn),如果你的多個(gè)項(xiàng)目中用到消息隊(duì)列,那么你可以把隊(duì)列定義為公共隊(duì)列

專(zhuān)用隊(duì)列

MachineName\Private$\QueueName

只針對(duì)于本機(jī)的程序才可以調(diào)用的隊(duì)列,有些情況下為了安全起見(jiàn)定義為私有隊(duì)列。

日志隊(duì)列

MachineName\QueueName\Journal$

四、消息隊(duì)列的創(chuàng)建

MessageQueue Mq=new MessageQueue(“.\\private$\\Mymq”);

通過(guò)Path屬性引用消息隊(duì)列的代碼也十分簡(jiǎn)單:

MessageQueue Mq=new MessageQueue();

Mq.Path=”.\\private$\\Mymq”;

使用 Create 方法可以在計(jì)算機(jī)上創(chuàng)建隊(duì)列:

System.Messaging.MessageQueue.Create(@".\private$\Mymq");

這里注意由于在C#中要記住用反斜杠將“\”轉(zhuǎn)義。

由于消息對(duì)列所放置的地方經(jīng)常改變,所以建議消息隊(duì)列路徑不要寫(xiě)死,建議放在配置文件中。

五、消息的發(fā)送

消息的發(fā)送可以分為簡(jiǎn)單消息和復(fù)雜消息,簡(jiǎn)單消息類(lèi)型就是常用的數(shù)據(jù)類(lèi)型,例如整型、字符串等數(shù)據(jù);復(fù)雜消息的數(shù)據(jù)類(lèi)型通常對(duì)應(yīng)于系統(tǒng)中的復(fù)雜數(shù)據(jù)類(lèi)型,例如結(jié)構(gòu),對(duì)象等等。

Mq.Send("Hello!");

在這里建議你可以事先定義一個(gè)對(duì)象類(lèi),然后發(fā)送這個(gè)對(duì)象類(lèi)的實(shí)例對(duì)象,這樣以后無(wú)論在增加什么發(fā)送信息,只需在對(duì)象類(lèi)中增加相應(yīng)的屬性即可。

六、消息的接收和閱讀

(1)同步接收消息

接收消息的代碼很簡(jiǎn)單:

Mq.Receive();
Mq.Receive(TimeSpan timeout); //設(shè)定超時(shí)時(shí)間
Mq.ReceiveById(ID);
Mq.Peek();

通過(guò)Receive方法接收消息同時(shí)永久性地從隊(duì)列中刪除消息;

通過(guò)Peek方法從隊(duì)列中取出消息而不從隊(duì)列中移除該消息。

如果知道消息的標(biāo)識(shí)符(ID),還可以通過(guò)ReceiveById方法和PeekById方法完成相應(yīng)的操作。

(2)異步接受消息

利用委托機(jī)制:MessQueue.ReceiveCompleted =new ReceiveCompletedEventHandler(mq_ReceiveCompleted);

(3)消息閱讀

在應(yīng)用程序能夠閱讀的消息和消息隊(duì)列中的消息格式不同,應(yīng)用程序發(fā)送出去的消息經(jīng)過(guò)序列化以后才發(fā)送給了消息隊(duì)列
而在接受端必須反序列化,利用下面的代碼可以實(shí)現(xiàn):

public void mq_ReceiveCompleted(object sender, System.Messaging.ReceiveCompletedEventArgs e)
{
System.Messaging.Message m = MessQueue.EndReceive(e.AsyncResult);
m.Formatter = new System.Messaging.XmlMessageFormatter(new string[]{"System.String,mscorlib"});
Console.WriteLine("Message: " (string)m.Body);
MessQueue.BeginReceive() ;

}

反序列化還有另一種寫(xiě)法:m.Formatter = new XmlMessageFormatter ( new Type [] { typeof (string) } );

七、由于消息隊(duì)列的代碼有些是固定不便的,所以把這些代碼封裝成一個(gè)類(lèi)方便以后使用:

以下為引用的內(nèi)容:
1using System;
2using System.Messaging;
3using System.Threading;

5
6namespace LoveStatusService
7{
8 /**//// <summary>
9 /// Summary description for Msmq.
10 /// </summary>
11 public class Msmq
12 {
13 public Msmq()
14 {
15 //
16 // TODO: Add constructor logic here
17 //
18 }
19
20
21 private MessageQueue _messageQueue=null;
22 //最大并發(fā)線(xiàn)程數(shù)
23 private static int MAX_WORKER_THREADS=Convert.ToInt32( System.Configuration.ConfigurationSettings.AppSettings["MAX_WORKER_THREADS"].ToString());
24 //Msmq路徑
25 private static string MsmqPath=System.Configuration.ConfigurationSettings.AppSettings["LoveStatusMQPath"];
26 //等待句柄
27 private WaitHandle[] waitHandleArray = new WaitHandle[MAX_WORKER_THREADS];
28 //任務(wù)類(lèi)型
29 //1. Send Email 2. Send Message 3. Send Email and Message
30 private string TaskType=System.Configuration.ConfigurationSettings.AppSettings["TaskType"];
31 public MessageQueue MessQueue
32 {
33 get
34 {
35
36 if (_messageQueue==null)
37 {
38 if(MessageQueue.Exists(MsmqPath))
39 {
40 _messageQueue = new MessageQueue(MsmqPath);
41 }
42 else
43 {
44 _messageQueue = MessageQueue.Create(MsmqPath);
45 }
46 }
47
48
49 return _messageQueue;
50 }
51 }
52
53
54 Private Method#region Private Method
55
56 private void mq_ReceiveCompleted(object sender, System.Messaging.ReceiveCompletedEventArgs e)
57 {
58 MessageQueue mqq = (MessageQueue)sender;
59 System.Messaging.Message m = mqq.EndReceive(e.AsyncResult);
60 //m.Formatter = new System.Messaging.XmlMessageFormatter(new string[]{"System.String,mscorlib"});
61 m.Formatter =new System.Messaging.XmlMessageFormatter(new Type[] {typeof(UserObject)}) ;
62 //log.Info("Receive UserID: " (string)m.Body) ;
63 UserObject obj=(UserObject)m.Body ;
64 long curUserId=obj.curUserID ;
65 long oppUserId=obj.oppUserID;
66 string curUserName=obj.curUserName;
67 string oppUserName=obj.oppUserName;
68 string curEmail=obj.curEmail ;
69 string oppEmail=obj.oppEmail;
70 string subject =obj.subject ;
71 string body=obj.body ;
72 //AppLog.log.Info("curUserId:" curUserId) ;
73 //AppLog.log.Info("oppUserId:" oppUserId) ;
74 AppLog.log.Info("==type=" TaskType) ;
75 switch(TaskType)
76 {
77 //Email
78 case "1":
79 EmailForMQ.SendEmailForLoveStatus(curEmail,oppEmail,curUserName,oppUserName,subject) ;
80 AppLog.log.Info("==Send to==" oppEmail) ;
81 break;
82 //Message
83 case "2":
84 MessageForMQ.SendMessage(curUserId,oppUserId,subject,body) ;
85 AppLog.log.Info("==Send Msg to==" oppUserId) ;
86 break;
87 //Email and Message
88 case "3":
89 EmailForMQ.SendEmailForLoveStatus(curEmail,oppEmail,curUserName,oppUserName,subject) ;
90 AppLog.log.Info("==Send to==" oppEmail) ;
91 MessageForMQ.SendMessage(curUserId,oppUserId,subject,body) ;
92 AppLog.log.Info("==Send Msg to==" oppUserId) ;
93 break;
94 default:
95 break;
96
97 }
98 mqq.BeginReceive() ;
99
100 }
101
102 #endregion
103
104 Public Method#region Public Method
105
106 //一個(gè)將對(duì)象發(fā)送到隊(duì)列的方法,這里發(fā)送的是對(duì)象
107 public void SendUserIDToMQ(object arr)
108 {
109 MessQueue.Send(arr) ;
110 Console.WriteLine("Ok") ;
111 Console.Read() ;
112 }
113
114 //同步接受隊(duì)列內(nèi)容的方法
115 public void ReceiveFromMQ()
116 {
117 Message ms=new Message() ;
118
119 //ms=MessQueue.Peek();
120 try
121 {
122 ms=MessQueue.Receive(new TimeSpan(0,0,5));
123 if(ms!=null)
124 {
125 ms.Formatter = new XmlMessageFormatter ( new Type [] { typeof (string) } );
126 AppLog.log.Info((string)ms.Body) ;
127 }
128 }
129 catch(Exception ex)
130 {
131
132 }
133
134
135 }
136
137 //開(kāi)始監(jiān)聽(tīng)工作線(xiàn)程
138 public void startListen()
139 {
140 AppLog.log.Info("--Thread--" MAX_WORKER_THREADS) ;
141 MessQueue.ReceiveCompleted =new ReceiveCompletedEventHandler(mq_ReceiveCompleted);
142
143 //異步方式,并發(fā)
144
145 for(int i=0; i<MAX_WORKER_THREADS; i )
146 {
147 // Begin asynchronous operations.
148 waitHandleArray[i] = MessQueue.BeginReceive().AsyncWaitHandle;
149 }
150
151 AppLog.log.Info("------Start Listen--------") ;
152
153 return;
154
155 }
156
157
158 //停止監(jiān)聽(tīng)工作線(xiàn)程
159 public void stopListen()
160 {
161
162 for(int i=0;i<waitHandleArray.Length;i )
163 {
164
165 try
166 {
167 waitHandleArray[i].Close();
168 }
169 catch
170 {
171 AppLog.log.Info("---waitHandleArray[i].Close() Error!-----") ;
172 }
173
174 }
175
176 try
177 {
178 // Specify to wait for all operations to return.
179 WaitHandle.WaitAll(waitHandleArray,1000,false);
180 }
181 catch
182 {
183 AppLog.log.Info("---WaitHandle.WaitAll Error!-----") ;
184 }
185 AppLog.log.Info("------Stop Listen--------") ;
186
187 }
188
189 #endregion
190
191
192
193
194 }
195}
196

UserObject的代碼

以下為引用的內(nèi)容:
1using System;
2
3namespace Goody9807
4{
5 /**//// <summary>
6 /// 用與在MQ上傳輸數(shù)據(jù)的對(duì)象
7 /// </summary>
8 public class UserObject
9 {
10 public UserObject()
11 {
12 //
13 // TODO: Add constructor logic here
14 //
15 }
16
17 private long _curUserID;
18 public long curUserID
19 {
20 get
21 {
22 return _curUserID;
23 }
24 set
25 {
26 _curUserID=value;
27 }
28 }
29
30 private string _curUserName="";
31 public string curUserName
32 {
33 get
34 {
35 return _curUserName;
36 }
37 set
38 {
39 _curUserName=value;
40 }
41 }
42
43 private string _curEmail="";
44 public string curEmail
45 {
46 get
47 {
48 return _curEmail;
49 }
50 set
51 {
52 _curEmail=value;
53 }
54 }
55
56
57 private long _oppUserID;
58 public long oppUserID
59 {
60 get
61 {
62 return _oppUserID;
63 }
64 set
65 {
66 _oppUserID=value;
67 }
68 }
69
70 private string _oppUserName="";
71 public string oppUserName
72 {
73 get
74 {
75 return _oppUserName;
76 }
77 set
78 {
79 _oppUserName=value;
80 }
81 }
82
83 private string _oppEmail="";
84 public string oppEmail
85 {
86 get
87 {
88 return _oppEmail;
89 }
90 set
91 {
92 _oppEmail=value;
93 }
94 }
95
96 private string _subject ="";
97 public string subject
98 {
99 get
100 {
101 return _subject;
102 }
103 set
104 {
105 _subject=value;
106 }
107 }
108
109 private string _body="";
110 public string body
111 {
112 get
113 {
114 return _body;
115 }
116 set
117 {
118 _body=value;
119 }
120 }
121 }
122}
123

另一個(gè)同事寫(xiě)的封裝類(lèi)

以下為引用的內(nèi)容:
1using System;
2
3using System.Threading;
4
5using System.Messaging;
6
7
8
9namespace Wapdm.SmsApp
10
11{
12
13 /**//// <summary>
14
15 /// <para>
16
17 /// A Logger implementation that writes messages to a message queue.
18
19 /// The default event formatter used is an instance of XMLEventFormatter
20
21 /// </para>
22
23 /// </summary>
24
25 public sealed class MsgQueue
26
27 {
28
29
30
31 private const string BLANK_STRING = "";
32
33 private const string PERIOD = @".\private$"; //".";
34
35 private const string ELLIPSIS = "";
36
37
38
39 private string serverAddress;
40
41 private string queueName;
42
43 private string queuePath;
44
45
46
47 private bool IsContextEnabled;
48
49
50
51 private MessageQueue queue;
52
53
54
55 private object queueMonitor = new object();
56
57
58
59 private MsgQueue() {}
60
61
62
63 public static MsgQueue mq = null;
64
65 public static WaitHandle[] waitHandleArray = new WaitHandle[Util.MAX_WORKER_THREADS];
66
67
68
69 public MsgQueue(string _serverAddress, string _queueName, string _summaryPattern)
70
71 {
72
73 if ((_serverAddress == null) || (_queueName == null) || (_summaryPattern == null))
74
75 {
76
77 throw new ArgumentNullException();
78
79 }
80
81 ServerAddress = _serverAddress;
82
83 QueueName = _queueName;
84
85 IsContextEnabled = true;
86
87 }
88
89
90
91 public MsgQueue(string _serverAddress, string _queueName)
92
93 {
94
95 if ((_serverAddress == null) || (_queueName == null))
96
97 {
98
99 throw new ArgumentNullException();
100
101 }
102
103 ServerAddress = _serverAddress;
104
105 QueueName = _queueName;
106
107 IsContextEnabled = true;
108
109 }
110
111
112
113 public MsgQueue(string _queueName)
114
115 {
116
117 if (_queueName == null)
118
119 {
120
121 throw new ArgumentNullException();
122
123 }
124
125 serverAddress = PERIOD;
126
127 QueueName = _queueName;
128
129 IsContextEnabled = true;
130
131 if ( IsContextEnabled == false )
132
133 throw new ArgumentNullException();
134
135 }
136
137
138
139 public string ServerAddress
140
141 {
142
143 get
144
145 {
146
147 return serverAddress;
148
149 }
150
151 set
152
153 {
154
155 if (value == null)
156
157 {
158
159 value = PERIOD;
160
161 }
162
163 value = value.Trim();
164
165 if (value.Equals(BLANK_STRING))
166
167 {
168
169 throw new ArgumentException("Invalid value (must contain non-whitespace characters)");
170
171 }
172
173 lock (queueMonitor)
174
175 {
176
177 serverAddress = value;
178
179 queuePath = serverAddress '\\' queueName;
180
181 InitializeQueue();
182
183 }
184
185 }
186
187 }
188
189
190
191 public string QueueName
192
193 {
194
195 get
196
197 {
198
199 return queueName;
200
201 }
202
203 set
204
205 {
206
207 if (value == null)
208
209 {
210
211 throw new ArgumentNullException();
212
213 }
214
215 value = value.Trim();
216
217 if (value.Equals(BLANK_STRING))
218
219 {
220
221 throw new ArgumentException("Invalid value (must contain non-whitespace characters)");
222
223 }
224
225 lock (queueMonitor)
226
227 {
228
229 queueName = value;
230
231 queuePath = serverAddress '\\' queueName;
232
233 InitializeQueue();
234
235 }
236
237 }
238
239 }
240
241
242
243 private void InitializeQueue()
244
245 {
246
247 lock (queueMonitor)
248
249 {
250
251 if (queue != null)
252
253 {
254
255 try { queue.Close(); }
256
257 catch {}
258
259 queue = null;
260
261 }
262
263
264
265 try
266
267 {
268
269 if(!MessageQueue.Exists(queuePath))
270
271 MessageQueue.Create(queuePath);
272
273 }
274
275 catch {}
276
277 try
278
279 {
280
281 queue = new MessageQueue(queuePath);
282
283 queue.SetPermissions("EveryOne",MessageQueueAccessRights.FullControl);
284
285 queue.Formatter = new XmlMessageFormatter(new Type[] {typeof(MoMsg)});
286
287 }
288
289 catch (Exception e)
290
291 {
292
293 try { queue.Close(); }
294
295 catch {}
296
297 queue = null;
298
299 throw new ApplicationException("Couldn't open queue at '" queuePath "': " e.GetType().FullName ": " e.Message);
300
301 }
302
303
304
305 }
306
307 }
308
309
310
311 private void AcquireResources()
312
313 {
314
315 InitializeQueue();
316
317 }
318
319
320
321 public void ReleaseResources()
322
323 {
324
325 lock (queueMonitor)
326
327 {
328
329 if (queue != null)
330
331 {
332
333 try
334
335 {
336
337 queue.Close();
338
339 }
340
341 catch {}
342
343 queue = null;
344
345 }
346
347 }
348
349 }
350
351
352
353 //阻塞方式
354
355 public MoMsg Read( )
356
357 {
358
359 MoMsg _event = null;
360
361 lock (queueMonitor)
362
363 {
364
365 if (queue == null)
366
367 {
368
369 InitializeQueue();
370
371 }
372
373 try
374
375 {
376
377 Message message = queue.Receive( new TimeSpan(0,0,1) );//等待10秒
378
379 _event = (MoMsg) (message.Body);
380
381 return _event;
382
383 }
384
385 catch (Exception )
386
387 {
388
389 try { queue.Close(); }
390
391 catch {}
392
393 queue = null;
394
395 }
396
397 }
398
399 return null;
400
401 }
402
403
404
405 public void Write(MoMsg _event)
406
407 {
408
409 if (_event == null)
410
411 {
412
413 return;
414
415 }
416
417 lock (queueMonitor)
418
419 {
420
421 try
422
423 {
424
425 if (queue == null)
426
427 {
428
429 InitializeQueue();
430
431 }
432
433
434
435 Message message = new Message();
436
437 message.Priority = _event.Priority;
438
439 message.Recoverable = true;
440
441 message.Body = _event; //eventFormatter.Format(_event);
442
443
444
445 queue.Send(message);
446
447 }
448
449 catch (Exception e)
450
451 {
452
453 try { queue.Close(); }
454
455 catch {}
456
457 queue = null;
458
459 Util.Log.log("Couldn't write Message (" e.GetType().FullName ": " e.Message ")");
460
461 }
462
463 }
464
465 }
466
467
468
469 public static bool statusTest()
470
471 {
472
473 bool reValue = false;
474
475 try
476
477 {
478
479 MessageEnumerator re = mq.queue.GetMessageEnumerator();
480
481 bool rev = re.MoveNext();
482
483 reValue = true;
484
485 }
486
487 catch
488
489 {
490
491 reValue = false;
492
493 }
494
495
496
497 return reValue;
498
499 }
500
501
502
503 public static void startListen()
504
505 {
506
507 mq = new MsgQueue(Util.MqName);
508
509
510
511 mq.queue.ReceiveCompleted =new ReceiveCompletedEventHandler(queue_ReceiveCompleted);
512
513
514
515 //異步方式,并發(fā)
516
517 for(int i=0; i<Util.MAX_WORKER_THREADS; i )
518
519 {
520
521 // Begin asynchronous operations.
522
523 waitHandleArray[i] =
524
525 mq.queue.BeginReceive().AsyncWaitHandle;
526
527 }
528
529
530
531 return;
532
533 }
534
535
536
537 public static void stopListen()
538
539 {
540
541
542
543 for(int i=0;i<waitHandleArray.Length;i )
544
545 {
546
547 try
548
549 {
550
551 waitHandleArray[i].Close();
552
553 }
554
555 catch
556
557 {
558
559 //忽略錯(cuò)誤
560
561 }
562
563 }
564
565
566
567 try
568
569 {
570
571 // Specify to wait for all operations to return.
572
573 WaitHandle.WaitAll(waitHandleArray,1000,false);
574
575 }
576
577 catch
578
579 {
580
581 //忽略錯(cuò)誤
582
583 }
584
585 }
586
587
588
589 private static void queue_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
590
591 {
592
593 // Connect to the queue.
594
595 MessageQueue mqq = (MessageQueue)sender;
596
597
598
599 // End the asynchronous Receive operation.
600
601 Message m = mqq.EndReceive(e.AsyncResult);
602
603
604
605 Util.ProcessMo((MoMsg)(m.Body));
606
607
608
609 if(Util.isRunning)
610
611 {
612
613 // Restart the asynchronous Receive operation.
614
615 mqq.BeginReceive();
616
617 }
618
619
620
621 return;
622
623 }
624
625 }
626
627}

分享:ASP.NET 2.0 里輸出文本格式流
在用 ASP.NET 編程時(shí),打開(kāi)一個(gè)頁(yè)面一般是通過(guò)指定超鏈接地址,調(diào)用指定的頁(yè)面文件(.html、.aspx)等方法。 但是,如果即將打開(kāi)的頁(yè)面文件的內(nèi)容是在程序中動(dòng)態(tài)生成,或者是從數(shù)據(jù)庫(kù)的表里取出

來(lái)源:模板無(wú)憂(yōu)//所屬分類(lèi):.Net教程/更新時(shí)間:2008-08-22
相關(guān).Net教程
国产清纯白嫩初高中在线观看性色| av成人黄色| 欧美韩日高清| 国产成人精品一区二区三区四区| 天天综合网天天综合色| 欧美在线免费视屏| 性欧美亚洲xxxx乳在线观看| 亚洲一区二区三区四区中文| a视频免费观看| 精品国产亚洲一区二区麻豆| 欧美肉体xxxx裸体137大胆| 粉嫩绯色av一区二区在线观看| 欧美影片第一页| 欧美在线一级视频| 国产成人亚洲综合无码| 国产午夜精品久久久久久久久| 午夜激情在线视频| 韩日欧美一区| 一区二区三区四区在线播放| 在线看福利67194| 精品一区二区三区日本| 无码人妻丰满熟妇啪啪网站| 欧美大电影免费观看| 怡红院精品视频在线观看极品| 中文字幕日韩一区| 在线日韩欧美视频| 国产欧美123| 中文字幕 国产精品| 国产一区毛片| 国产免费观看久久| 在线看国产精品| 精品人妻少妇一区二区| 久久精品国产亚洲av高清色欲 | 手机在线精品视频| 亚洲午夜在线| 欧美精品一卡二卡| 91精品视频在线| 伊人国产精品视频| 国产深喉视频一区二区| 欧美精品一区二区三区久久久竹菊| 成人免费在线观看入口| 欧美中文字幕在线播放| 国偷自产av一区二区三区麻豆| 国产av一区二区三区精品| 国产一区日韩一区| 欧美日韩情趣电影| 97国产超碰| 欧美一级片黄色| 在线观看欧美日韩电影| 日韩制服丝袜av| 制服丝袜在线91| 成人午夜电影免费在线观看| 欧美做受高潮中文字幕| 电影中文字幕一区二区| 国产精品系列在线播放| 精品国产乱码久久久久久蜜臀 | 亚洲天堂2024| 亚洲av片一区二区三区| 成人午夜在线视频| 亚洲欧洲黄色网| 亚洲欧洲精品在线| 久草视频在线资源站| 婷婷亚洲成人| 亚洲国产精品99久久久久久久久| 最近中文字幕mv在线一区二区三区四区 | 国产精品久久久久一区二区三区 | 亚洲图片你懂的| 久久久久久亚洲精品| 日本一区二区黄色| 成人免费一区二区三区| 欧美精品二区| 日韩欧美国产综合在线一区二区三区| 国产亚洲精品久久飘花| 欧美丰满美乳xxⅹ高潮www| 国产精品成人3p一区二区三区 | 午夜精品久久久久久久久久| 国产精品精品一区二区三区午夜版| 57pao国产成永久免费视频| 欧美一区二区三区成人片在线| 日韩福利电影在线| 在线亚洲欧美视频| 国产96在线 | 亚洲| 天天干天天爱天天操| www激情久久| 欧美精品在线第一页| 青青在线免费观看视频| 丰满大乳国产精品| 极品销魂美女一区二区三区| 亚洲欧美日韩国产中文| 日韩精品一区二区在线视频 | 91av国产在线| 中文字幕avav| 国产香蕉久久| 久久久精品国产免费观看同学| 欧美乱大交xxxxx| 男人女人黄一级| 亚洲综合伊人| 国产欧美精品一区二区色综合 | 亚洲精品久久久久久动漫器材一区| 石原莉奈在线亚洲二区| 精品成a人在线观看| 日本毛片在线免费观看| 四虎视频在线精品免费网址| 国产日韩av一区| 久久久在线免费观看| 中文字幕日韩综合| 青青久久精品| 图片区小说区区亚洲影院| 日韩.欧美.亚洲| 一级黄色大片视频| 久久精品导航| 国产偷国产偷亚洲清高网站| 成人在线观看你懂的| 久久精品无码一区二区三区毛片| 极品国产人妖chinesets亚洲人妖| 亚洲欧洲日韩在线| 国产在线视频欧美一区二区三区| 免费视频网站在线观看入口| 成人av影院在线| 久久男人的天堂| 夫妇露脸对白88av| 欧美一区二区麻豆红桃视频| 日本乱码高清不卡字幕| 秋霞久久久久久一区二区| 久久一区二区三区视频| 在线视频精品| 日韩亚洲国产中文字幕| 日韩高清第一页| 香蕉久久精品日日躁夜夜躁| 91精品久久久久久久91蜜桃 | 自拍视频第一页| 日本一区影院| 亚洲线精品一区二区三区八戒| dy888夜精品国产专区| 久久精品国产亚洲av麻豆色欲 | 中文字幕 自拍| 成人羞羞网站| 日韩美女av在线| 国产综合内射日韩久| 亚洲91中文字幕无线码三区| 911国产精品| 乌克兰美女av| 欧美成年网站| 黄色成人av网| 无码人妻精品一区二区三区99v| 精品国产亚洲一区二区麻豆| 国产精品久久久久久久裸模| 欧美日韩高清在线一区| 国产九色91回来了| 久久新电视剧免费观看| 国产精品一区二区3区| 国产性生活大片| 亚洲第一区色| 久久久久久国产精品久久| 国语对白在线播放| 国产精品久久777777毛茸茸 | 国产精品午夜福利| 成人免费视频app| 国产v亚洲v天堂无码| av免费在线观看不卡| 亚洲欧美一区二区三区极速播放 | 国内性生活视频| 成人看片网站| 一区二区三区中文免费| 日本丰满大乳奶| 美女精品久久| 欧美videossexotv100| 99爱视频在线| 亚洲日产av中文字幕| 91精品国产免费久久综合| 国产精品无码av在线播放| 欧美一级三级| 91精品国产全国免费观看| 午夜av中文字幕| 欧美在线黄色| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 合欧美一区二区三区| 久久久久这里只有精品| 在线观看黄网站| 日本一区二区三区久久久久久久久不| 日韩精品欧美一区二区三区| 亚洲福利影视| 亚洲第一av在线| 久久九九国产视频| 水蜜桃精品av一区二区| 久久777国产线看观看精品| 国产精品16p| 国产清纯在线一区二区www| 一区二区免费在线视频| 51vv免费精品视频一区二区| 欧美色图第一页| 国产淫片免费看| 日产精品一区二区| 亚洲男人的天堂在线| 国精品人伦一区二区三区蜜桃| 亚洲欧美日韩专区| 国模私拍视频一区| 亚洲天堂五月天| 久久美女高清视频 | 一区精品久久| 国产精品91久久久久久| 五月天综合在线| 国产精品亚洲午夜一区二区三区| 国产乱子伦精品| 亚洲经典一区二区三区| 日本久久电影网| 国产精品19p| 蜜臀久久久久久久| 国产精品久久久久久久久久新婚 | 中文字幕在线不卡一区| 日韩hmxxxx| 成人影院中文字幕| 日韩女优电影在线观看| 亚洲午夜久久久久久久久红桃| 136国产福利精品导航网址| 欧美成人中文字幕| 日本视频免费观看| 亚洲电影激情视频网站| 4444亚洲人成无码网在线观看 | 91在线播放视频| 国产激情久久| 欧美日韩视频在线第一区 | 日韩精品一区二区三区在线观看| 超碰97人人干| 成人免费视频一区二区| 波多野结衣激情| 精品国产不卡一区二区| 亚洲人高潮女人毛茸茸| 91av在线免费视频| 91最新地址在线播放| 精品国产一区二区三区久久久久久| 91成人在线网站| 在线观看日韩av| 波多野结衣视频网站| 国产三级精品三级| 浮妇高潮喷白浆视频| 伊人精品成人久久综合软件| 91亚洲va在线va天堂va国| 日韩欧乱色一区二区三区在线| 亚洲精品色婷婷福利天堂| 日本在线免费观看| 午夜视频一区在线观看| 亚洲欧美激情一区二区三区| 国产精品一区专区| 中文字幕在线乱| 天天射成人网| 欧美激情18p| 国产一级在线视频| 亚洲综合在线观看视频| 久久久久狠狠高潮亚洲精品| 不卡日本视频| 国产精品久久久久久久av大片| 456亚洲精品成人影院| 亚洲欧美中文字幕在线一区| 日韩精品在线免费视频| 色综合天天性综合| 免费成年人高清视频| 美女网站视频久久| 亚洲砖区区免费| 亚洲午夜精品一区二区国产| 久久人91精品久久久久久不卡| 亚洲黄色在线观看视频| 亚洲第一中文字幕在线观看| 狠狠躁夜夜躁人人爽天天高潮| 午夜不卡在线视频| 大地资源二中文在线影视观看| 26uuu精品一区二区在线观看| 日韩视频第二页| 蜜臀av性久久久久蜜臀av麻豆| 亚洲欧美日韩精品在线| 欧美成人一区二免费视频软件| 成人午夜电影免费在线观看| 美女呻吟一区| 国产精品久久久久久超碰| 激情综合婷婷| 国产69精品久久久久9999| 香蕉视频黄色片| 国产亚洲一区二区精品| 日韩乱码在线观看| 精品久久久久久久大神国产| 日本理论中文字幕| 亚洲日本va午夜在线影院| 韩国三级在线看| 国产亚洲成av人在线观看导航| xxx国产在线观看| 久久精品一区| 最近看过的日韩成人| 少妇一区二区视频| 国内精品久久久久久久久| 天堂网在线播放| 一区二区三区精品99久久| av免费观看在线| 亚洲日本成人网| 精品国产999久久久免费| 亚洲美女av网站| 精品人妻无码一区二区| 亚洲美女在线视频| 99热这里只有精| 亚洲色图在线观看| www.天堂在线| 中文国产成人精品久久一| 亚洲精品国产一区二| 日韩在线视频中文字幕| 少妇无码一区二区三区| 久久精品中文字幕一区| 亚洲永久精品视频| 欧美三级三级三级爽爽爽| 欧美日韩精品在线观看视频| 亚洲欧美一区二区三区国产精品| 日本黄色免费观看| 99久久99久久久精品齐齐| 亚洲综合日韩欧美| 91丨porny丨中文| 深爱五月综合网| 国产欧美日韩久久| 在线中文字日产幕| 1000部国产精品成人观看| 国产麻豆天美果冻无码视频| 亚洲综合网站在线观看| 99热6这里只有精品| 欧美性生交大片免费| 性欧美13一14内谢| 国产欧美一区二区精品性色| 一级黄色电影片| 亚洲日本中文字幕区| 日本爱爱爱视频| 欧美日韩免费观看中文| 成人免费网站黄| 婷婷亚洲久悠悠色悠在线播放| 国产精品视频一区二区三| 欧美视频在线播放| 无码人妻av一区二区三区波多野| 亚洲国产精品99久久| 亚洲精品综合网| 九色91av视频| 久久九九精品视频| 亚洲综合在线中文字幕| 国内毛片久久| 日本欧美国产在线| 欧美一区=区三区| 国产精品高潮呻吟久久av野狼| 天天躁日日躁狠狠躁欧美| 国产一区二区三区奇米久涩| 午夜精品久久| 日本高清视频免费在线观看| 一本久道久久久| 和岳每晚弄的高潮嗷嗷叫视频| 国产成人高清视频| 中文写幕一区二区三区免费观成熟| 亚洲图片激情小说| 二区三区四区视频| 午夜精品123| 亚洲黄色一区二区| 亚洲精品二三区| 免费在线不卡av| 中文字幕一精品亚洲无线一区| 国产亚洲欧美日韩精品一区二区三区 | www.com黄色片| 国产精品激情偷乱一区二区∴| 青青青视频在线免费观看| 欧美精品日韩精品| 国产av一区二区三区精品| 欧美激情亚洲国产| 精品少妇3p| 日韩国产在线一区| 久久精品久久综合| 日本a视频在线观看| 91丨九色丨尤物| 青青草福利视频| 欧美丝袜丝nylons| 91久久久久国产一区二区| 亚洲精品乱码久久久久久金桔影视 | 在线日韩av片| 一级黄色片视频| 久久久噜噜噜久久久| 精品一区欧美| 这里只有精品66| 成人精品gif动图一区| 性欧美13一14内谢| 7777精品久久久大香线蕉| www国产一区| 日本欧美黄网站| 亚洲激情五月| 91成人在线观看喷潮教学| 国产亚洲一本大道中文在线| 午夜国产福利视频| 亚洲国产91色在线| 五月激情久久| 亚洲综合自拍一区| 免费看亚洲片| 日本一二三四区视频| 日韩欧美在线看| 99精品国产99久久久久久97| 欧美尤物巨大精品爽| 97se亚洲国产一区二区三区| 免费精品视频一区二区三区| 99在线精品视频在线观看| 在线观看高清免费视频| 亚洲二区在线视频| 中文字幕乱码视频|