New to compact framework tutorials? Learn to write your first compact framework application here.
Zac Efron - Hairspray star and Mythbusters' Kari Byron at Celebrity Treat. Check out income and career information in Singapore.

Saturday, January 07, 2006

- MSMQ Message Queueing in Compact Framework (part 1)

In this tutorial, we write a simple MSMQ application for a Windows Mobile device. The application automatically installs the MSMQ service if it's not already present. A simple interface is provided to let the user send and receive messages via MSMQ.



MSMQ is a Microsoft message queueing technology that allows disparate applications, not necessarily running in the same machine, to send messages to one another. Part of this store-and-forward technology is a failsafe mechanism to ensure guaranteed delivery (well, to an extent). Message priorities can also be set as well.

One of the strongest competitors to Microsoft, in terms of providing message queueing middleware, remains to be IBM, which offers the product called WebSphere MQ (previously called IBM MQSeries).

This tutorial is based on Mark Ihimoyan's posts in his excellent blog.
  1. As usual, start Visual Studio and create a new smart device project.
  2. In Solution Explorer, right-click on References, and add the reference to System.Messaging component. We need this reference as we are using the Messaging classes later.
  3. Change the form property MinimizeBox to false, so that the use can close the application easily.
  4. Add a TextBox, 2 Buttons and a Label to the form, naming them txtSendMsg, btnSend, btnReceive and lblReceiveMsg respectively. The first button lets the user send the message in the textbox to a message queue. The second button receives a message from the queue. Even if the user closes the application, the stored messages in the queue remain intact and can be received when the application is restarted (however, a soft reset clears the queue).
  5. Next, we want to make the application self-contained, in that it will check for the presence of the MSMQ service and automatically installs it if it is not detected.
  6. Go to Microsoft Mobile Development Center and follow the link "Redistributable Server Components for Windows Mobile 5.0" to download the package. We need the msmq.ARM.CAB file in the package.
  7. After downloading, extract the msmq.ARM.CAB file (under msmq folder in the downloaded package). This is the cab file that installs the MSMQ service in the device.
  8. Back in Visual Studio, right-click on your project in Solution Explorer and add msmq.ARM.CAB to your project (use Add-> Existing Item...). Then click on msmq.ARM.CAB in Solution Explorer and change its "Copy to Output Directory" property to "Copy if newer". This will ensure that the cab file is copied over to the program folder in the device.
  9. In your form code, import the namespaces:
  10. using System.IO;
    using System.Messaging;
    using System.Runtime.InteropServices;
  11. Then within the form partial class, add the following declarations needed to P/Invoke the CreateProcess Win32 function. We need to call CreateProcess to install the cab.
  12. public class ProcessInfo
    {
      public IntPtr hProcess;
      public IntPtr hThread;
      public Int32 ProcessId;
      public Int32 ThreadId;
    }

    [DllImport("CoreDll.DLL", SetLastError = true)]
    private extern static
        int CreateProcess(String imageName,
        String cmdLine,
        IntPtr lpProcessAttributes,
        IntPtr lpThreadAttributes,
        Int32 boolInheritHandles,
        Int32 dwCreationFlags,
        IntPtr lpEnvironment,
        IntPtr lpszCurrentDir,
        IntPtr lpsiStartInfo,
        ProcessInfo pi);
    [DllImport("CoreDll.dll")]
    private extern static  Int32 GetLastError();

    [DllImport("CoreDll.dll")]
    private extern static
        Int32 GetExitCodeProcess(IntPtr hProcess, out Int32 exitcode);

    [DllImport("CoreDll.dll")]
    private extern static
         Int32 CloseHandle(IntPtr hProcess);

    [DllImport("CoreDll.dll")]
    private extern static
        IntPtr ActivateDevice(
          string lpszDevKey,
            Int32 dwClientInfo);

    [DllImport("CoreDll.dll")]
    private extern static
        Int32 WaitForSingleObject(IntPtr Handle,
        Int32 Wait);

    public static bool CreateProcess(String ExeName, String CmdLine)
    {
      Int32 INFINITE;
      unchecked { INFINITE = (int)0xFFFFFFFF; }
      ProcessInfo pi = new ProcessInfo();
      if (CreateProcess(ExeName, CmdLine, IntPtr.Zero, IntPtr.Zero,
          0, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, pi) == 0)
      {
        return false;
      }
      WaitForSingleObject(pi.hProcess, INFINITE);
      Int32 exitCode;
      if (GetExitCodeProcess(pi.hProcess, out exitCode) == 0)
      {
        MessageBox.Show("Failure in GetExitCodeProcess");
        CloseHandle(pi.hThread);
        CloseHandle(pi.hProcess);
        return false;
      }
      CloseHandle(pi.hThread);
      CloseHandle(pi.hProcess);
      if (exitCode != 0)
        return false;
      else
        return true;
    }
  13. In the Form Load event handler (remember to generate the event handler stub by double-clicking on the form in design mode; similarly for the button click event handlers later), enter the following code which checks for and installs the MSMQ service.
  14. string MSMQ_ADM = @"\windows\msmqadm.exe";
    if (!CreateProcess(MSMQ_ADM, "status"))
    {
      if (!File.Exists(MSMQ_ADM) ||
         !File.Exists(@"\windows\msmqd.dll") ||
         !File.Exists(@"\windows\msmqrt.dll"))
      {
        //install msmq
        string _path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
        string docname = _path + "\\msmq.ARM.CAB";
        CreateProcess("wceload.exe", "/noui \"" + _path + "\\msmq.ARM.CAB\"");
      }
      //check again
      if (!File.Exists(@"\windows\msmqadm.exe"))
      {
        MessageBox.Show("failed to install msmq cab");
        Close();
      }
      else //register, start and activate service
      {
        CreateProcess(MSMQ_ADM, "register cleanup");
        if (CreateProcess(MSMQ_ADM, "register install")
          && CreateProcess(MSMQ_ADM, "register")
          && CreateProcess(MSMQ_ADM, "enable binary"))
        {
          IntPtr handle = ActivateDevice(@"Drivers\BuiltIn\MSMQD", 0);//device registry key
          CloseHandle(handle);
          if (CreateProcess(MSMQ_ADM, "status")) return; //success
        }
        MessageBox.Show("failed to start msmq");
        Close();
      }
    }
  15. In the btnSend click event handler, enter the following code to send a message to the "testq" queue.
  16. if (txtSendMsg.Text.Trim() == "") return;
    string strDestQ = @".\private$\testq"; //queue name
    try
    {
      if (!MessageQueue.Exists(strDestQ))
        MessageQueue.Create(strDestQ);
      MessageQueue mq = new MessageQueue(strDestQ);
      mq.Send(txtSendMsg.Text);
      txtSendMsg.Text = "";
    }
    catch { }
  17. Finally, in the btnReceive click event handler, we will receive the frontmost message in the "testq" queue. Note that we are setting a simple timeout of 1 second (so the UI is not blocked for too long) in case there isn't any message in the queue.
  18. lblReceiveMsg.Text = ""; Refresh();
    MessageQueue mq = new MessageQueue(@".\private$\testq");
    //set formatter for deserializing message
    mq.Formatter = new XmlMessageFormatter(new Type[] { typeof(String) });
    try
    {
      Message messageReceived = mq.Receive(new TimeSpan(0, 0, 1));//timeout in 1s
      lblReceiveMsg.Text = (string)messageReceived.Body;
    }
    catch { lblReceiveMsg.Text = "- timeout -"; }
  19. We are done! Deploy and run. The first time you run, there is quite a long delay on form load, as the application is invoking wceload.exe to install the MSMQ service. When the form is loaded, type something in the textbox and click the Send button. Send a few more messages. Then click the Receive button a few times.
  20. Try closing and reopening the application and test if sent messages are still receivable. What about the effect of doing a soft reset?
In part 2, coming soon, we will send MSMQ messages across the network. Watch this space.

Categories: [MSMQ_] [Networking_] Tags: [] [] [] []

41 Comments:

Blogger Kaiser Soze said...

Hi netcf2,

To generate categories for my stock market blog, I used your method of tagging posts and then using google search to locate them.

The method has worked out very well. So thank you very much.

Kaiser

1/07/2006  
Blogger danchong said...

hi Kaiser, thanks for the support! I believe you are referring to my post here.

1/07/2006  
Blogger Fay said...

Posted categories from your Nov. post, working good. Question on how you post such short post and link to them with read more. How do you do that? Thanks, great blog.

1/18/2006  
Blogger danchong said...

hi faith, to do a "read more" hack, you have to use the HTML span tag and hide the text. View my HTML source and see if you can figure it out. It should be quite easy if you're familiar with HTML.

1/22/2006  
Anonymous Anonymous said...

Hi,

Can use this message queue with a C++ message queue on the other side.

like I want create a message queue in c# programe and coomunicate with a process which is written in C++.

Is this possible, if yes how.

regards
krishna

6/14/2006  
Blogger danchong said...

hi Krishna, I haven't tried communicating with a C++ queue. But as far as I understand it, MSMQ allows disparate processes to communicate seamlessly, as long as the processes adhere to the MSMQ protocol. Whether a process is written using C# or C++ shouldn't matter.

6/15/2006  
Anonymous Warren said...

You speak about extracting the CAB file, but I can't seem to figure this simple step out... Any pointers for this

8/23/2006  
Blogger danchong said...

Hi Warren,

The URL which I gave above doesn't contain the link "Redistributable Server Components for Windows Mobile 5.0" anymore.

However, you can still get the package by doing a Google search for the phrase "Redistributable Server Components for Windows Mobile 5.0". In the Google results, one of the top results (most likely the first link) should lead you to a Microsoft download page where you can download the said package.

11/13/2006  
Anonymous Anonymous said...

Excellant tutorial on how to use create process! Thank you so much! BrandonBlais@juno.com

3/09/2007  
Anonymous Amit Kumar Rana said...

Excellent tutorial on MSMQ but i would like to know that this application is restricted to single Device or there it is distributed.
If it applicable to single device, then please let me know how to make it to the send & receive SMS frm different smart devices.

Amit Kumar Rana
email- complete.amit@gmail.com

3/10/2007  
Blogger Jay Dubal said...

Some good ebooks on microsoft .net compact framework kick start 2005 compact framework ebooks

6/10/2007  
Blogger rahul said...

Hi,

The tutorial was very helpful for me to create an application using MSMQ to upload data into a server.
But the data i uploaded was is not getting reflected in the remote private queue

Pls help me to solve this issue.

i am putting the code which i used for uploading the data into the server.


Public Sub SendToQueue()

Dim remoteQueue As Messaging.MessageQueue = New System.Messaging.MessageQueue
remoteQueue.DefaultPropertiesToSend.Priority = System.Messaging.MessagePriority.VeryHigh
remoteQueue.Formatter = New System.Messaging.XmlMessageFormatter(New String(-1) {})
Dim lsMSMQPath As String
Dim AppPath As String = IO.Path.GetDirectoryName( _
Reflection.Assembly.GetExecutingAssembly.GetName.CodeBase.ToString())


Dim _deviceIPAddress As String = String.Empty
Dim localHostName As String = Net.Dns.GetHostName()
Dim iphe As Net.IPHostEntry = Net.Dns.GetHostEntry(localHostName)
Dim ipAddr As String = String.Empty
For Each addr As Net.IPAddress In iphe.AddressList
ipAddr = addr.ToString()
Next
_deviceIPAddress = ipAddr



lsMSMQPath = "FormatName:DIRECT=OS:ServerName\private$\PrivateQueueName;XACTONLY"

remoteQueue.Path = lsMSMQPath


Dim responseQueue As messaging.messageQueue = New Messaging.MessageQueue
Dim adminQueue As messaging.messageQueue = New Messaging.MessageQueue
responseQueue.Path = String.Format(System.Globalization.CultureInfo.InvariantCulture, "FormatName:Direct=TCP:{0}\private$\MyResponse", _deviceIPAddress)
adminQueue.Path = String.Format(System.Globalization.CultureInfo.InvariantCulture, "FormatName:Direct=TCP:{0}\private$\MyAdmin", _deviceIPAddress)



Dim msg As Message = New Message
msg.Body = "My data"
msg.Label = "My Label"
msg.TimeToBeReceived = System.TimeSpan.Parse("1.00:00:00")
msg.TimeToReachQueue = System.TimeSpan.Parse("1.00:00:00")
msg.ResponseQueue = responseQueue
msg.AdministrationQueue = adminQueue
msg.AcknowledgeType = Messaging.AcknowledgeTypes.FullReceive Or Messaging.AcknowledgeTypes.FullReachQueue
msg.UseDeadLetterQueue = True
msg.UseJournalQueue = True
remoteQueue.Send(msg, Messaging.MessageQueueTransactionType.Single)
End Sub


the code is throwing no error after sending the data to the queue.
But the data is not reflected.

I am able to send data to a remote private queue in my network. But not to a remote computer on the public network.

7/13/2007  
Blogger danchong said...

>I am able to send data to a remote private queue in my network. But not to a remote computer on the public network.

My guess is that certain networking ports required for MSMQ are blocked between your private network and the wider network.

See:
http://support.microsoft.com/kb/178517

7/13/2007  
Blogger rahul said...

You are correct Dan,
We released some ports and it started working fine. Now i have a problem in formatting. Is there any way to implement ActiveXFormatting for .NET CF Message. My server code that reads the messages from the queue expects the message in ActiveXFormatting.


Thank you for the help and time you spend for helping me.

7/16/2007  
Blogger danchong said...

Unfortunately, I haven't got the chance to explore ActiveXFormatting. Maybe this article will help:
http://msdn.microsoft.com/msdnmag/issues/03/12/MSMQandNET/

7/17/2007  
Anonymous Anonymous said...

Is this same with this one ?

7/17/2007  
Blogger rahul said...

Hi All,

I have a MQ in a windows 2000 terminal to which i upload my messages. But when i tried to create a trigger on the MQ. it gave me a warning "The queue path was not validated, Make sure that the queue exists and that it allows everyone Peek Access". I have provided full access to everyone and also write access to Anonymous Login. The problem is my trigger is not invoked once the message reaches the Queue. I have created a Trigger that invokes a COM+ component and it is registered using REGSVCS...

Can somebody help me to fix this issue / or is there any other options to invoke a trigger when a message reaches the queue.

7/24/2007  
Anonymous iron garden gates said...

companies marketing mineral makeups and also get the best bargains in mineral makeup you can imagine,
find aout how to consolidate your students loans or just how to lower your actual rates.,
looking for breast enlargements? in Rochester,
homeopathy for eczema learn about it.,
Allergies, information about lipitor,
save big with great bargains in mineral makeup,

change edition interviewing motivational people preparing second
,

interviewing motivational people preparing second time
,

interviewing people motivational preparing for a second time
,

black mold exposure
,

black mold exposure symptoms
,

black mold symptoms of exposure
,

free job interview questions
,

free job interview answers
,

interview answers to get a job
,

lookfor hair styles for fine thin hair
,

search hair styles for fine thin hair
,

hair styles for fine thin hair
,

beach resort in the philippines
,

great beach resort in the philippines
,

luxury beach resort in the philippines
,
iron garden gates, here,
iron garden gates,
wrought iron garden gates
, here
,
wrought iron garden gates
,
You: The Owner's Manual: An Insider's Guide to the Body That Will Make You Healthier and Younger
,
eat eating mindless more than think we we why
,


texturizer,
texturizers here,
black hair texturizer,
find aout how care curly hair,
find about how to care curly hair,
care curly hair,
lipitor rash,
lipitor reactions,
new house ventura california,
the house new houston tx,
new house washington dc,
new house pa philadelphia,
san antonio tx house new,
house new pa philadelphia,
new house washington dc,
new house ventura california,
the house new houston tx,
house new san antonio tx,
the house new houston tx, that you are looking for,
new house ventura california, you need to buy,
new house washington dc,
house new pa philadelphia,
new house san antonio tx,

hair surgery transplant
,

air filter allergy
,

refurbished dell laptop computers
,

hair surgery transplant
,

air filter allergy
,

refurbished dell laptop computers
,

hair surgery transplant
,

air filter allergy
,

refurbished dell laptop computers
,

chocolate esophagus heartburn study
,

chocolate esophagus heartburn study
be informed,

digestion healing healthy heartburn natural preventing way
,

digestion healing healthy heartburn natural preventing way
,
sew skirts, 16simple styles you can make!,
sew what skirts 16 simple styles you,
rebates and discounts on sunsetter awnings,
sunsetter awnings discounts and rebates,
discount on sunsetter awnings


truck and bus tires 12r 22.5, get the best price,
tires truck and bus 12r 22.5 best price,
tires truck bus tires12r 22.5 best price,
plush car seat strap covers,
car seat strap covers,plush,
car seat strap, plush covers,
oscoda voip phone systems, the best!,
oscoda voip the phone system,
oscoda voip phone systems,
exterior iron gates,
oriental wrought iron gates,
powder coated iron garden fencing,

2/10/2008  
Anonymous iron gates said...

black mold exposure,
black mold symptoms of exposure,

wrought iron garden gates,
your next iron garden gates, here,

hair styles for fine thin hair,
search hair styles for fine thin hair,

night vision binoculars,
buy, night vision binoculars,

lipitor reactions,
lipitor reactions,

luxury beach resort in the philippines,
beach resort in the philippines,

homeopathy for baby eczema.,
homeopathy for baby eczema.,

save big with great mineral makeup bargains,
companies marketing mineral makeups,

prodam iphone praha,
Apple prodam iphone praha,

iphone clone cect manual,
manual for iphone clone cect,

fero 52 binoculars night vision,
fero 52 night vision,

best night vision binoculars,
buy, best night vision binoculars,

computer programs to make photo albums,
computer programs, make photo albums,

3/27/2008  
Blogger Jovis Low said...

Your blog is great and I have learn a lot from your experience.

Hope we can share our knowledge.


Thank you very much.


Best regards,

Jovis
http://prgexp.blogspot.com

4/22/2008  
Blogger akswift said...

Hi there,
nice Article.

Is there any possibility to change the path of the temp folder?

I have a device which often gets hard resetet. So i want to have the messages on a folder which then isn't deleted

9/19/2008  
Blogger john said...

i think this article was a great. easy to follow.

Download free ebooks at http://www.ebook-x.com

10/14/2008  
Blogger 信次 said...

情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,美國aneros,rudeboy,英國rudeboy,英國Rocksoff,德國Fun Factory,Fun Factory,英國甜筒造型按摩座,甜筒造型按摩座,英國Rock Chic ,瑞典 Lelo ,英國Emotional Bliss,英國 E.B,荷蘭 Natural Contours,荷蘭 N C,美國 OhMiBod,美國 OMB,Naughti Nano ,音樂按摩棒,ipod按摩棒,美國 The Screaming O,美國TSO,美國TOPCO,美國Doc Johnson,美國CA Exotic,美國CEN,美國Nasstoy,美國Tonguejoy,英國Je Joue,美國Pipe Dream,美國California Exotic,美國NassToys,美國Vibropod,美國Penthouse,仿真按摩棒,矽膠按摩棒,猛男倒模,真人倒模,仿真倒模,PJUR,Zestra,適趣液,穿戴套具,日本NPG,雙頭龍,FANCARNAL,日本NIPPORI,日本GEL,日本Aqua Style,美國WET,費洛蒙,費洛蒙香水,仿真名器,av女優,打炮,做愛,性愛,口交,吹喇叭,肛交,魔女訓練大師,無線跳蛋,有線跳蛋,震動棒,震動保險套,震動套,TOY-情趣用品,情趣用品網,情趣購物網,成人用品網,情趣用品討論,成人購物網,鎖精套,鎖精環,持久環,持久套,拉珠,逼真按摩棒,名器,超名器,逼真老二,電動自慰,自慰,打手槍,仿真女郎,SM道具,SM,性感內褲,仿真按摩棒,pornograph,hunter系列,h動畫,成人動畫,成人卡通,情色動畫,情色卡通,色情動畫,色情卡通,無修正,禁斷,人妻,極悪調教,姦淫,近親相姦,顏射,盜攝,偷拍,本土自拍,素人自拍,公園露出,街道露出,野外露出,誘姦,迷姦,輪姦,凌辱,痴漢,痴女,素人娘,中出,巨乳,調教,潮吹,av,a片,成人影片,成人影音,線上影片,成人光碟,成人無碼,成人dvd,情色影音,情色影片,情色dvd,情色光碟,航空版,薄碼,色情dvd,色情影音,色情光碟,線上A片,免費A片,A片下載,成人電影,色情電影,TOKYO HOT,SKY ANGEL,一本道,SOD,S1,ALICE JAPAN,皇冠系列,老虎系列,東京熱,亞熱,武士系列,新潮館,情趣用品,情趣,情趣商品,情趣網站,跳蛋,按摩棒,充氣娃娃,自慰套,G點,性感內衣,情趣內衣,角色扮演,生日禮物,生日精品,自慰,打手槍,潮吹,高潮,後庭,情色論譠,影片下載,遊戲下載,手機鈴聲,音樂下載,開獎號碼,統一發票號碼,夜市,統一發票對獎,保險套,做愛,減肥,美容,瘦身,當舖,軟體下載,汽車,機車,手機,來電答鈴,週年慶,美食,徵信社,網頁設計,網站設計,室內設計,靈異照片,同志,聊天室,運動彩券,大樂透,威力彩,搬家公司,除蟲,偷拍,自拍,無名破解,av女優,小說,民宿,大樂透開獎號碼,大樂透中獎號碼,威力彩開獎號碼,討論區,痴漢,懷孕,美女交友,交友,日本av,日本,機票,香水,股市,股市行情, 股市分析,租房子,成人影片,免費影片,醫學美容,免費算命,算命,姓名配對,姓名學,姓名學免費,遊戲,好玩遊戲,好玩遊戲區,線上遊戲,新遊戲,漫畫,線上漫畫,動畫,成人圖片,桌布,桌布下載,電視節目表,線上電視,線上a片,線上掃毒,線上翻譯,購物車,身分證製造機,身分證產生器,手機,二手車,中古車,法拍屋,歌詞,音樂,音樂網,火車,房屋,情趣用品,情趣,情趣商品,情趣網站,跳蛋,按摩棒,充氣娃娃,自慰套, G點,性感內衣,情趣內衣,角色扮演,生日禮物,精品,禮品,自慰,打手槍,潮吹,高潮,後庭,情色論譠,影片下載,遊戲下載,手機鈴聲,音樂下載,開獎號碼,統一發票,夜市,保險套,做愛,減肥,美容,瘦身,當舖,軟體下載,汽車,機車,手機,來電答鈴,週年慶,美食,徵信社,網頁設計,網站設計,室內設計,靈異照片,同志,聊天室,運動彩券,,大樂透,威力彩,搬家公司,除蟲,偷拍,自拍,無名破解, av女優,小說,民宿,大樂透開獎號碼,大樂透中獎號碼,威力彩開獎號碼,討論區,痴漢,懷孕,美女交友,交友,日本av ,日本,機票,香水,股市,股市行情,股市分析,租房子,成人影片,免費影片,醫學美容,免費算命,算命,姓名配對,姓名學,姓名學免費,遊戲,好玩遊戲,好玩遊戲區,線上遊戲,新遊戲,漫畫,線上漫畫,動畫,成人圖片,桌布,桌布下載,電視節目表,線上電視,線上a片,線上a片,線上翻譯,購物車,身分證製造機,身分證產生器,手機,二手車,中古車,法拍屋,歌詞,音樂,音樂網,借錢,房屋,街頭籃球,找工作,旅行社,六合彩,整型,整型,珠海,雷射溶脂,婚紗,網頁設計,水噹噹,台中隆鼻,果凍隆乳,改運整型,自體脂肪移植,新娘造型,婚禮顧問,下川島,常平,常平,珠海,澳門機票,香港機票,貸款,貸款,信用貸款,宜蘭民宿,花蓮民宿,未婚聯誼,網路購物,婚友,婚友社,未婚聯誼,交友,婚友,婚友社,單身聯誼,未婚聯誼,未婚聯誼, 婚友社,婚友,婚友社,單身聯誼,婚友,未婚聯誼,婚友社,未婚聯誼,單身聯誼,單身聯誼,白蟻,白蟻,除蟲,老鼠,減肥,減肥,在家工作,在家工作,婚友,單身聯誼,未婚聯誼,婚友,交友,交友,婚友社,婚友社,婚友社,大陸新娘,大陸新娘,越南新娘,越南新娘,外籍新娘,外籍新娘,台中坐月子中心,搬家公司,搬家公司,中和搬家,台北搬家,板橋搬家,新店搬家,線上客服,網頁設計,線上客服,網頁設計,植牙,關鍵字,關鍵字,seo,seo,網路排名,自然排序,網路排名軟體,交友,越南新娘,婚友社,外籍新娘,大陸新娘,越南新娘,交友,外籍新娘,視訊聊天,大陸新娘,婚友社,婚友,越南新娘,大陸新娘,越南新娘,視訊交友,外籍新娘,網路排名,網路排名軟體,網站排名優化大師,關鍵字排名大師,網站排名seo大師,關鍵字行銷專家,關鍵字,seo,關鍵字行銷,網頁排序,網頁排名,關鍵字大師,seo大,自然排名,網站排序,網路行銷創業,汽車借款,汽車借錢,汽車貸款,汽車貸款,拉皮,抽脂,近視雷射,隆乳,隆鼻,變性,雙眼皮,眼袋,牙齒,下巴,植牙,人工植牙,植髮,雷射美容,膠原蛋白,皮膚科,醫學美容,玻尿酸,肉毒桿菌,微晶瓷,電波拉皮,脈衝光,關鍵字,關鍵字,seo,seo,網路排名,自然排序,網路排名軟體,汽車借款,汽車借款,汽車借款,汽車貸款,汽車貸款,借錢,借貸,當舖,借款,借貸,借錢,週轉,學英文,英文社團,英語俱樂部,學習英文,英語會話,英文演講,English Club,學英語,學英文,美語社團,英語社團,英文讀書會,Toastmasters,Toastmaster,英語讀書會,拍樂得批發,拍樂得飾品,拍樂得化妝品批發,

2/19/2009  
Anonymous Anonymous said...

^^ nice blog!! ^@^

徵信, 徵信, 徵信, 徵信社, 徵信社, 徵信社, 感情挽回, 婚姻挽回, 挽回婚姻, 挽回感情, 徵信, 徵信社, 徵信, 徵信, 捉姦, 徵信公司, 通姦, 通姦罪, 抓姦, 抓猴, 捉猴, 捉姦, 監聽, 調查跟蹤, 反跟蹤, 外遇問題, 徵信, 捉姦, 女人徵信, 外遇問題, 女子徵信, 徵信社, 外遇, 徵信公司, 徵信網, 徵信, 徵信社, 外遇蒐證, 抓姦, 抓猴, 捉猴, 調查跟蹤, 反跟蹤, 感情挽回, 挽回感情, 婚姻挽回, 挽回婚姻, 感情挽回, 外遇沖開, 徵信, 徵信, 徵信社, 抓姦, 徵信, 徵信社, 外遇蒐證, 外遇, 通姦, 通姦罪, 贍養費, 徵信, 徵信社, 徵信社, 抓姦, 徵信社, 徵信社, 徵信, 徵信, 徵信公司, 徵信社, 徵信, 徵信公司, 徵信社, 徵信社, 徵信社, 徵信社, 徵信社, 徵信公司, 徵信社, 徵信, 徵信, 徵信公司, 女人徵信, 外遇, 外遇, 外遇, 外遇

徵信, 徵信網, 徵信社, 徵信網, 徵信, 徵信社, 外遇, 徵信, 徵信, 徵信社, 抓姦, 徵信, 徵信社, 外遇, 徵信社, 抓姦, 徵信社, 徵信公司, 徵信, 徵信社, 徵信公司, 徵信, 徵信社, 徵信公司, 徵信社, 徵信社, 徵信社, 徵信社, 徵信, 徵信社, 徵信社, 徵信社, 徵信

2/23/2009  
Blogger kevio said...

威創牙醫診所除了提供優質的植牙技術外還提供假牙|矯正|牙周病治療,是值得您信賴的牙醫診所植牙權威。

獅王紋身工作室提供專業的無痛刺青技術,獅王紋身在世界TATTOO大賽中,獲獎無數,獅王紋身給您最時尚的作品。

陳駿逸皮膚科診所提供了治療痘痘的服務,皮膚雷射權威,包括雷射脈衝光除斑等,讓您回復青春蘋果臉。

ck皮件處理棧提供專業洗包包|洗鞋子|各式皮件修理保養疑難雜症都有服務,清洗包包專門店讓您的包包、鞋子、永遠保持最新的況態唷。

杏儒中醫診所提供了糖尿病的治療。

seo大師e王國幫您的網站輕鬆在您的行業裡站上第一頁,e王國的關鍵字行銷是您的好幫手,包括關鍵字自然排序、都能讓您獲得完美的效果,以目前的網路行銷不外乎是關鍵字自然排序為主、而關鍵字行銷seo又是e王國的強項也包括關鍵字廣告的服務,讓e王國幫您征服網海。

Weekfun星期樂優質生活平台-各式美食,精品,住宿,夜店,批發資訊,讓您不用出門也能盡知天下事,好的行銷帶你進墳場,好的行銷讓您上戰場,Weekfun星期樂"激動"行銷團隊將提供您前所未有的網路行銷,seo,關鍵字行銷,關鍵字廣告,關鍵字,自然排序,部落格行銷,等多項網路行銷類型供您挑選適合自已店裡的好行銷,網路爆紅不是夢!!

3/08/2009  
Blogger 正享 said...

專業合法驅除白蟻 除白蟻 白蟻防治 跳蚤 除跳蚤 跳蚤防治 蛀蟲 除蛀蟲 蛀蟲防治 白蟻 除白蟻 白蟻防治 跳蚤 除跳蚤 跳蚤防治 蛀蟲 除蛀蟲 蛀蟲防治 除蟲 除蟲

3/23/2009  
Anonymous Anonymous said...

General Computer Tutorials at:
-----------------------
http://pc-tutorials101.blogspot.com/
------------------------------------
http://www.You4Dating.com 100% Free Dating website!

Our Website - is a great way to find new friends or partners, for fun, dating and long term relationships.
You4Dating Free Online Dating ,You4Dating is a Free 100% Dating Site, There are No Charges ever. We allow You to Restrict who can Contact You, and Remove those unfit to Date.

You4Dating is Responsible for Creating Relationships per Year proving it is possible to Find Love Online. It will Quickly become a Leader in the Internet Dating Industry because of its Advanced Features and matching Systems,and most of all,Because is a 100% Free-There are No Charges Ever.
You4Dating is an International Dating Website Serving Single Men and Single Women Worldwide. Whether you're seeking Muslim,Christian,Catholic, Singles Jewish ,Senor Dating,Black Dating, or Asian Dating,You4Dating is a Right Place for Members to Browse through, and Potentially Find a Date.
Meet more than 100000 Registred Users
Multy Language Dating Site.
--------------------------------------
http://www.You4Dating.com

7/15/2009  
Blogger eda said...

潤滑液,SM,內衣,性感內衣,自慰器,充氣娃娃,AV,
G點,性感丁字褲,情趣,角色扮演服,吊帶襪,丁字褲,無線跳蛋,

按摩棒,電動按摩棒,飛機杯,自慰套,自慰套,情趣用品,情趣內衣,
情趣按摩棒,.,
角色扮演,按摩棒,跳蛋,情趣跳蛋,
情趣,情趣用品,
色情小說|七夕情人,一夜情,

10/30/2009  
Anonymous kerja keras adalah energi kita said...

Thanks for the tips,..

11/13/2009  
Blogger smallawei said...

性感睡衣,情趣睡衣,性感內衣褲,性感內衣,性感內褲,
性感貓裝,性感睡衣,貓裝,吊帶襪,情趣內褲,丁字褲,SM,

震動環,潤滑液,情趣禮物,情趣玩具,威而柔,精油,逼真按摩棒,數位按摩棒,


G點,按摩棒,轉珠按摩棒,變頻跳蛋,跳蛋,無線跳蛋,

飛機杯,男用強精長軟質套,男用強精短軟質套,充氣娃娃性感內褲,
自慰套,自慰套,情趣娃娃,自慰器,電動自慰器,充氣娃娃,
角色扮演,情趣,情趣用品,巴黎,

12/22/2009  
Blogger 方便 said...

向著星球長驅直進的人,反比踟躕在峽路上的人,更容易達到目的。..................................................

1/20/2010  
Blogger 可愛的動畫圖片 said...

IS VERY GOOD
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

2/02/2010  
Blogger 發燙 said...

先告訴自己希望成為什麼樣的人,然後一步一步實踐必要的步驟。........................................

2/10/2010  
Blogger Hadyan Mardhi Fadlillah said...

Good Tutorial
Nice Info, I like your blog.

keep update !!

visit this site: http://wartawarga.gunadarma.ac.id

6/02/2010  
Anonymous Competitions said...

An informative post.it is good.

4/06/2011  
Anonymous Business Directory said...

It is a good tutorial for windows device users.
you did good job.Keep it up.

4/06/2011  
Blogger Dave said...

These kind of post are always inspiring and I prefer to read quality content so I happy to find many good point here in the post, writing is simply great, thank you for the post penis enlargement penis enlargement pills VigRX Plus

10/02/2011  
Anonymous muebles en barcelona said...

It can't really work, I suppose like this.

11/28/2011  
Blogger ChoiBlogs.blogspot.com said...

thanks post !!!!!!!!!

12/30/2011  
Blogger Riya Jacob said...

Such a nice post ! great love to read this one.

mumbai escorts
mumbai escorts
mumbai escorts
mumbai escorts

2/23/2016  
Blogger Riya Jacob said...

Such a nice post ! great love to read this one.


Mumbai Escorts services

Rici Mumbai Escorts services

Delhi Escort Service

Mumbai Escorts Services

Escorts services in Gurgaon

Mumbai Escorts services

Mumbai Escorts

3/08/2016  

Post a Comment

Links to this post:

Create a Link Permalink

<< Home