欧美三区四区_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中文一区二区三区天美| 97在线看福利| 成人精品小视频| 国产又黄又大又爽| 国产精品免费看| 欧美婷婷六月丁香综合色| 欧美美女15p| 国产精品无码一区二区在线| 99re热视频| 欧美日韩hd| 中文字幕av一区二区三区高 | 亚洲va欧美va人人爽成人影院| 成人免费高清视频| 一本色道久久88综合日韩精品| 天天综合五月天| 国产又黄又爽又色| 亚洲香蕉av| 色婷婷香蕉在线一区二区| 91九色综合久久| 日韩精品视频久久| 97人妻精品一区二区三区动漫| 亚洲精品社区| 91麻豆精品国产91久久久久| 欧美国产一区二区在线| 男人添女人下面免费视频| 日韩在线观看视频一区二区三区| 麻豆国产欧美日韩综合精品二区| 亚洲激情视频在线| 视频一区二区三| 日本中文字幕免费观看| 欧美韩日一区| 色乱码一区二区三区88| 国产美女精品久久久| 蜜桃av.com| 日韩一级毛片| 在线观看国产精品网站| 久久精品日产第一区二区三区 | 国产成人在线播放视频| 欧美精品网站| 8v天堂国产在线一区二区| 奇米精品在线| 中文字幕精品三级久久久| 欧美国产激情| 91精品黄色片免费大全| 亚洲人久久久| 在线观看色网站| 视频一区二区三区中文字幕| 日韩精品在线视频美女| 久久久久久久中文| 人妻少妇一区二区三区| 成人av免费在线| 久久久久久av| 91成人在线观看喷潮教学| 国产又大又粗又长| 韩国成人福利片在线播放| 综合国产在线观看| 一区二区在线播放视频| 粉嫩一区二区三区| 国产网站一区二区三区| 日韩美女免费观看| 日韩精品无码一区二区三区久久久| www.成人爱| 99久久夜色精品国产网站| 亚洲人成电影网站色xx| 99精品视频在线看| 中文字幕av一区二区三区佐山爱| 久久久久久久综合| 国产精品久久久久久久久久| 丁香激情五月少妇| 欧美高清视频在线观看mv| 欧美女孩性生活视频| 天天综合中文字幕| av官网在线观看| k8久久久一区二区三区| 91av在线国产| 在线观看av网页| 日韩亚洲国产免费| 亚洲欧美另类久久久精品2019| 亚洲精品免费一区二区三区| 久久r这里只有精品| 伊人春色精品| 欧美亚洲国产怡红院影院| 午夜欧美性电影| 一级做a爱片久久毛片| 国产一级精品在线| 亚洲性猛交xxxxwww| 中文字幕第80页| 国产精品日韩精品在线播放 | 色婷婷免费视频| 一区二区三区日本视频| 亚洲免费观看视频| 久久av一区二区| 中文字字幕在线中文乱码| 国产盗摄一区二区三区| 77777少妇光屁股久久一区| 亚洲av无码国产精品麻豆天美| 国产精品久久久久久久久久10秀| 欧美日韩精品二区| 色就是色欧美| 超碰人人人人人人| 欧美国产日韩a欧美在线观看| 成人午夜黄色影院| 国产成人一区二区三区影院在线| 美国十次了思思久久精品导航| 九色91av视频| 免费看污片网站| 中文在线播放一区二区| 亚洲色在线视频| 免费看91视频| 成人同人动漫免费观看| 亚洲国产欧美久久| 日韩一级免费片| 香蕉久久精品| 日韩一区二区影院| 国产精品无码av无码| 澳门成人av| 伊人婷婷欧美激情| 日韩av一级大片| 亚洲精品字幕在线| 中文字幕一区在线| 日本精品一区二区| 五月婷婷在线播放| 一二三四社区欧美黄| 亚洲春色综合另类校园电影| 欧美一级淫片aaaaaa| 亚洲欧美日韩人成在线播放| 五月天久久狠狠| 不卡一二三区| 亚洲成人一二三| 黄色一级大片免费| 国产精品亚洲欧美一级在线| 欧美在线小视频| 人妻有码中文字幕| 国产亚洲成av人片在线观黄桃| 在线不卡一区二区| 五月天激情视频在线观看| 神马久久av| 欧美精品一区二区三区高清aⅴ| 日本中文字幕在线视频观看| 成 人 免费 黄 色| 永久免费毛片在线观看| 日韩av二区| 国产亚洲美女精品久久久| 黄色a一级视频| 99热这里只有精品8| 欧美多人乱p欧美4p久久| 爱爱视频免费在线观看| 国产在线不卡一区| 成人黄色片网站| 国产精品毛片一区二区在线看舒淇 | 欧美三级网页| 欧美成人免费小视频| 天天鲁一鲁摸一摸爽一爽| 久久er99精品| 成人做爽爽免费视频| 国产又粗又猛又色又| 亚洲欧美视频一区| 超碰10000| 亚洲美女综合网| 久久麻豆一区二区| 欧美连裤袜在线视频| 欧美三级精品| 欧美在线视频全部完| 亚洲综合欧美在线| 亚洲无中文字幕| 欧美日韩不卡合集视频| 久久这里只有精品国产| 91一区二区三区在线观看| 欧美激情视频一区二区三区| 日产精品一区| 欧美日韩国产123区| 日本中文字幕在线不卡| 不卡av电影在线| 美女福利一区二区三区| 午夜av电影一区| 成年人视频观看| 国产欧美日韩免费观看| 精品国内产的精品视频在线观看| 印度午夜性春猛xxx交| 成人精品免费视频| 人禽交欧美网站免费| 日韩午夜视频在线| 亚洲成人久久网| 国产美女永久免费无遮挡| 国产麻豆9l精品三级站| 精品视频导航| 亚洲青青一区| 亚洲成人av片在线观看| 国产精品一二三区在线观看| 精品一区二区久久| 国产精品麻豆免费版| 欧美xnxx| 日韩一级片网址| 泷泽萝拉在线播放| 国产一区亚洲一区| 精品人伦一区二区三区| 日日夜夜亚洲| 亚洲国产欧美一区二区丝袜黑人 | 国产精品盗摄久久久| av片免费播放| 色拍拍在线精品视频8848| 伊人成人免费视频| 日韩av一二三| 黄色91av| 麻豆视频久久| 在线成人激情视频| 国产一级做a爱免费视频| 国产精品高清亚洲| 人妻精品无码一区二区三区| 午夜欧美精品| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 日本一区二区视频在线播放| 高清在线观看日韩| 亚洲成人av动漫| 伊人久久大香线蕉| 欧美激情日韩图片| 91成品人影院| 日本韩国一区二区| a视频免费观看| 成人免费视频视频| 亚洲欧美日韩不卡| 久久精品嫩草影院| 亚洲精品一区av在线播放| 亚洲熟女www一区二区三区| 国产日韩欧美高清在线| 日日摸日日碰夜夜爽无码| 欧美激情成人在线| 成人精品在线观看| 日韩综合av| 中文字幕国产精品久久| 国产性生活视频| 黄网站色欧美视频| 在线播放第一页| 国产成人av在线影院| 黄色a级在线观看| 99久久夜色精品国产亚洲96| 国产成一区二区| gay欧美网站| 亚洲欧美另类人妖| 手机看片久久久| 欧美性猛交xxxx黑人| 亚洲国产综合视频| 91首页免费视频| 国产99视频精品免视看7| 波多野结衣加勒比| 国产一区不卡视频| 亚洲色图都市激情| 综合久久综合| 99国产在线观看| 一区中文字幕电影| 欧美国产亚洲视频| 亚洲精品久久久久久无码色欲四季| 欧美一级黄色录像| 岛国毛片在线观看| 亚洲一区二区三区四区中文字幕| 男人操女人下面视频| 国产成人精品免费在线| 搞av.com| 久久av在线| 五月婷婷综合色| 911精品美国片911久久久| 91亚洲精品一区| 澳门成人av| 日韩**中文字幕毛片| 国产精品原创视频| 久久成人在线视频| 亚洲成人黄色片| 91精品国产一区二区三区| avove在线播放| 午夜伊人狠狠久久| 在线国产视频一区| 亚洲欧洲av一区二区三区久久| 永久av免费在线观看| 99久久精品一区| 欧美精品无码一区二区三区| 久久精品国产一区二区三| 天堂av免费看| 韩日欧美一区| 欧美在线视频二区| 亚洲成人tv| 国产视频在线观看一区| 日韩精品电影| 国产成人亚洲欧美| 菠萝蜜一区二区| 91黄在线观看| 国产亚洲第一伦理第一区| 91精品视频在线播放| 国产调教精品| 国产乱肥老妇国产一区二| 国产精品x8x8一区二区| 国产精品美女av| 老司机精品在线| 成人久久一区二区| 亚洲三级网页| 91九色露脸| jiujiure精品视频播放| 国产精品国产精品国产专区蜜臀ah | 91精品国产综合久久精品| 国产专区第一页| 欧美一区二区私人影院日本| www.色国产| 亚洲国产精品人人爽夜夜爽| 在线观看免费中文字幕| 日韩精品在线私人| 精品人妻伦一二三区久久| 一区二区三区高清国产| 特黄视频在线观看| 久久婷婷国产麻豆91天堂| 嫩草伊人久久精品少妇av杨幂| 久久久久久久久久久亚洲| 伊人久久精品| 国产精品第一区| 精品中文字幕一区二区三区av| 99久久伊人精品影院| 久久精品国产www456c0m| 久久久久久99| 亚洲欧洲日本一区二区三区| 中文字幕在线乱| 蜜桃久久久久久| 欧洲久久久久久| 亚洲高清毛片| 少妇久久久久久被弄到高潮| 国内成人精品2018免费看| 日韩精品免费播放| 久久久亚洲精品一区二区三区| 成人在线电影网站| 亚洲制服欧美中文字幕中文字幕| 韩国一级黄色录像| 欧美三级欧美一级| 久久精品五月天| 亚洲欧美精品一区二区| 天天干天天草天天射| 久久久久久免费精品| 白嫩白嫩国产精品| 99久久免费国| 亚洲午夜视频| 久艹在线免费观看| 国产成人av电影在线播放| 国产精品嫩草影视| 亚洲男人的天堂在线观看| 小早川怜子一区二区的演员表| 欧美人与性动xxxx| 中文字幕免费高清网站| 国产亚洲精品美女| 日韩中文视频| 国产精品永久免费| 99热在线成人| 日本黄色播放器| 国产在线不卡一区| 亚洲欧美激情一区二区三区| 一区二区免费看| 久久一区二区三| 日韩av在线不卡| 91久久久久国产一区二区| 中文一区二区视频| av日韩久久| 99久久精品无码一区二区毛片| 影音先锋久久久| 久久久一本二本三本| 久久精品一区八戒影视| 免费黄色片网站| 欧美军同video69gay| www.亚洲天堂.com| 欧美亚洲成人xxx| 欧州一区二区三区| www.一区二区三区| 亚洲精选一区| 中文字幕无码不卡免费视频| 国产精品久久久一区麻豆最新章节| 黑人狂躁日本娇小| 精品国产免费人成电影在线观看四季| 欧美视频一二区| 国产精品视频精品视频| 午夜性色一区二区三区免费视频| 国产片侵犯亲女视频播放| 91女神在线视频| 日本午夜精品视频| 精品福利在线导航| 国模一区二区| 99精品国产高清一区二区| 模特精品在线| 亚洲另类第一页| 午夜亚洲福利老司机| 免费看av在线| 色综合久久久久久中文网| 精品一区免费| 蜜臀av.com| 久久亚洲捆绑美女| 艳妇荡乳欲伦69影片| 亚洲精品久久在线| 不卡一区视频| 久久国产精品亚洲va麻豆| 麻豆一区二区99久久久久| 亚洲av无码成人精品区| 欧美色图一区二区三区| 天堂av2024| 亚洲一区二区免费| 日韩电影在线免费观看|