MSMQ Outgoing Queues

Posted on May 19, 2009 21:47 by Ahmed Al Amir

I have been developing an infrastructure framework that integrates the various parts in my system together, so I started building an ESB (Enterprise Service Bus) and found that MSMQ is suitable for that framework as it provides guaranteed message delivery, efficient routing, security, and priority-based messaging and enables sub-systems at different times to communicate across networks even if they are temporarily offline.

After building the core communication code and testing it against my business rules, I noticed that I needed some monitoring over the service bus to ensure that messages placed on the service bus are delivered to the specified bus subscribers. Also I need to be able be able to generate notification in case of exceptions or latency.

By using MSMQ every message sent to remote queue is placed in a temporary outgoing queue which is created on each publishing machine. These outgoing queues are used in case the remote queue is unavailable, this means that I have to check Outgoing Queues in each publisher.After investigating .Net Messaging APIs, I found that it does not provide any queue monitoring or management functionality.

M. Aamir Malik  wrote a good article that  describes how to access the Outgoing Message Queues. You can find the article here[http://www.codeproject.com/KB/IP/MSMQ.aspx]. Unfortunately, in his article, Malik did not mention how to get the number of unacknowledged  messages in the outgoing queues.I followed his technique and tried to extend the code to allow me to implement this functionality then I got held back by the fact that Microsoft does not provide full implementation of the COM Interfaces.

After doing some research I found that there are three ways to solve this issue :

1-Using MSMQ COM Interfaces compatibility will be a problem as some functions are not found in the old versions and some other functions are not implemented from certain operating systems.

2-Using MSMQ performance counter which will not give me all the information I need.

3-Using MSMQ admin APIs [http://support.microsoft.com/kb/242471] which will give me a full control over MSMQ.

I decided to focus on the third option and downloading APIs.Unfortunately, the admin APIs are written in C++ which forces me to write a wrapper for these APIs but this will make my deployment a nightmare.So, I found that the best way is to write a safe code for that wrapper. I searched the internet and found a nice article in Microsoft magazine that bridges the gap between unmanaged code and managed code called [CLR INSIDE OUT] which you can find here [http://msdn.microsoft.com/en-us/magazine/cc164193.aspx]

I used [P/Invoke Interop Assistant] to generate the managed version of the Admin APIs by supplying [mqmgmt.h] C++ header file. After solving problems of the generated code it looked like this :

using System;

using System.Runtime.InteropServices;

namespace Messaging.Extensions

{   

    public static class MessageQueueExtensions

    {

        #region -- Constants –

        /// NULL VALUE

        public const byte VT_NULL = 1;

        /// UNSIGNED INTEGER

        public const byte VT_UI4 = 19;

        /// MQ_ADMIN_ACCESS -> 0x00000080

        public const int MQ_ADMIN_ACCESS = 128;

        /// MSMQ_CONNECTED -> L"CONNECTED"

        public const string MSMQ_CONNECTED = "CONNECTED";

        /// MSMQ_DISCONNECTED -> L"DISCONNECTED"

        public const string MSMQ_DISCONNECTED = "DISCONNECTED";

        /// MGMT_QUEUE_TYPE_PUBLIC -> L"PUBLIC"

        public const string MGMT_QUEUE_TYPE_PUBLIC = "PUBLIC";

        /// MGMT_QUEUE_TYPE_PRIVATE -> L"PRIVATE"

        public const string MGMT_QUEUE_TYPE_PRIVATE = "PRIVATE";

        /// MGMT_QUEUE_TYPE_MACHINE -> L"MACHINE"

        public const string MGMT_QUEUE_TYPE_MACHINE = "MACHINE";

        /// MGMT_QUEUE_TYPE_CONNECTOR -> L"CONNECTOR"

        public const string MGMT_QUEUE_TYPE_CONNECTOR = "CONNECTOR";

        /// MGMT_QUEUE_STATE_LOCAL -> L"LOCAL CONNECTION"

        public const string MGMT_QUEUE_STATE_LOCAL = "LOCAL CONNECTION";

        /// MGMT_QUEUE_STATE_NONACTIVE -> L"INACTIVE"

        public const string MGMT_QUEUE_STATE_NONACTIVE = "INACTIVE";

        /// MGMT_QUEUE_STATE_WAITING -> L"WAITING"

        public const string MGMT_QUEUE_STATE_WAITING = "WAITING";

        /// MGMT_QUEUE_STATE_NEED_VALIDATE -> L"NEED VALIDATION"

        public const string MGMT_QUEUE_STATE_NEED_VALIDATE = "NEED VALIDATION";

        /// MGMT_QUEUE_STATE_ONHOLD -> L"ONHOLD"

        public const string MGMT_QUEUE_STATE_ONHOLD = "ONHOLD";

        /// MGMT_QUEUE_STATE_CONNECTED -> L"CONNECTED"

        public const string MGMT_QUEUE_STATE_CONNECTED = "CONNECTED";

        /// MGMT_QUEUE_STATE_DISCONNECTING -> L"DISCONNECTING"

        public const string MGMT_QUEUE_STATE_DISCONNECTING = "DISCONNECTING";

        /// MGMT_QUEUE_STATE_DISCONNECTED -> L"DISCONNECTED"

        public const string MGMT_QUEUE_STATE_DISCONNECTED = "DISCONNECTED";

        /// MGMT_QUEUE_LOCAL_LOCATION -> L"LOCAL"

        public const string MGMT_QUEUE_LOCAL_LOCATION = "LOCAL";

        /// MGMT_QUEUE_REMOTE_LOCATION -> L"REMOTE"

        public const string MGMT_QUEUE_REMOTE_LOCATION = "REMOTE";

        /// MGMT_QUEUE_UNKNOWN_TYPE -> L"UNKNOWN"

        public const string MGMT_QUEUE_UNKNOWN_TYPE = "UNKNOWN";

        /// MGMT_QUEUE_CORRECT_TYPE -> L"YES"

        public const string MGMT_QUEUE_CORRECT_TYPE = "YES";

        /// MGMT_QUEUE_INCORRECT_TYPE -> L"NO"

        public const string MGMT_QUEUE_INCORRECT_TYPE = "NO";

        /// MO_MACHINE_TOKEN -> L"MACHINE"

        public const string MO_MACHINE_TOKEN = "MACHINE";

        /// MO_QUEUE_TOKEN -> L"QUEUE"

        public const string MO_QUEUE_TOKEN = "QUEUE";

        /// MACHINE_ACTION_CONNECT -> L"CONNECT"

        public const string MACHINE_ACTION_CONNECT = "CONNECT";

        /// MACHINE_ACTION_DISCONNECT -> L"DISCONNECT"

        public const string MACHINE_ACTION_DISCONNECT = "DISCONNECT";

        /// MACHINE_ACTION_TIDY -> L"TIDY"

        public const string MACHINE_ACTION_TIDY = "TIDY";

        /// QUEUE_ACTION_PAUSE -> L"PAUSE"

        public const string QUEUE_ACTION_PAUSE = "PAUSE";

        /// QUEUE_ACTION_RESUME -> L"RESUME"

        public const string QUEUE_ACTION_RESUME = "RESUME";

        /// QUEUE_ACTION_EOD_RESEND -> L"EOD_RESEND"

        public const string QUEUE_ACTION_EOD_RESEND = "EOD_RESEND";

        #endregion

        #region -- Enums --

        public enum MQMGMT_MACHINE_PROPERTIES

        {

            /// PROPID_MGMT_MSMQ_BASE -> 0

            PROPID_MGMT_MSMQ_BASE = 0,

            PROPID_MGMT_MSMQ_ACTIVEQUEUES,

            PROPID_MGMT_MSMQ_PRIVATEQ,

            PROPID_MGMT_MSMQ_DSSERVER,

            PROPID_MGMT_MSMQ_CONNECTED,

            PROPID_MGMT_MSMQ_TYPE,

        }

        public enum MQMGMT_QUEUE_PROPERTIES

        {

            /// PROPID_MGMT_QUEUE_BASE -> 0

            PROPID_MGMT_QUEUE_BASE = 0,

            PROPID_MGMT_QUEUE_PATHNAME,

            PROPID_MGMT_QUEUE_FORMATNAME,

            PROPID_MGMT_QUEUE_TYPE,

            PROPID_MGMT_QUEUE_LOCATION,

            PROPID_MGMT_QUEUE_XACT,

            PROPID_MGMT_QUEUE_FOREIGN,

            PROPID_MGMT_QUEUE_MESSAGE_COUNT,

            PROPID_MGMT_QUEUE_USED_QUOTA,

            PROPID_MGMT_QUEUE_JOURNAL_MESSAGE_COUNT,

            PROPID_MGMT_QUEUE_JOURNAL_USED_QUOTA,

            PROPID_MGMT_QUEUE_STATE,

            PROPID_MGMT_QUEUE_NEXTHOPS,

            PROPID_MGMT_QUEUE_EOD_LAST_ACK,

            PROPID_MGMT_QUEUE_EOD_LAST_ACK_TIME,

            PROPID_MGMT_QUEUE_EOD_LAST_ACK_COUNT,

            PROPID_MGMT_QUEUE_EOD_FIRST_NON_ACK,

            PROPID_MGMT_QUEUE_EOD_LAST_NON_ACK,

            PROPID_MGMT_QUEUE_EOD_NEXT_SEQ,

            PROPID_MGMT_QUEUE_EOD_NO_READ_COUNT,

            PROPID_MGMT_QUEUE_EOD_NO_ACK_COUNT,

            PROPID_MGMT_QUEUE_EOD_RESEND_TIME,

            PROPID_MGMT_QUEUE_EOD_RESEND_INTERVAL,

            PROPID_MGMT_QUEUE_EOD_RESEND_COUNT,

            PROPID_MGMT_QUEUE_EOD_SOURCE_INFO,

        }

        #endregion

#region -- Structures --

        [StructLayoutAttribute(LayoutKind.Explicit)]

        public struct Union

        {

            /// UCHAR->unsigned char

            [FieldOffsetAttribute(0)]

            public byte bVal;

            /// SHORT->short

            [FieldOffsetAttribute(0)]

            public short iVal;

            /// USHORT->unsigned short

            [FieldOffsetAttribute(0)]

            public ushort uiVal;

            /// VARIANT_BOOL->short

            [FieldOffsetAttribute(0)]

            public short boolVal;

            /// LONG->int

            [FieldOffsetAttribute(0)]

            public int lVal;

            /// ULONG->unsigned int

            [FieldOffsetAttribute(0)]

            public uint ulVal;

            /// ULARGE_INTEGER->_ULARGE_INTEGER

            [FieldOffsetAttribute(0)]

            public ULARGE_INTEGER uhVal;

            /// SCODE->LONG->int

            [FieldOffsetAttribute(0)]

            public int scode;

            /// DATE->double

            [FieldOffsetAttribute(0)]

            public double date;

            /// CLSID*

            [FieldOffsetAttribute(0)]

            public System.IntPtr puuid;

            /// BLOB->tagBLOB

            [FieldOffsetAttribute(0)]

            public tagBLOB blob;

            /// LPOLESTR->OLECHAR*

            [FieldOffsetAttribute(0)]

            public System.IntPtr bstrVal;

            /// LPSTR->CHAR*

            [FieldOffsetAttribute(0)]

            public System.IntPtr pszVal;

            /// LPWSTR->WCHAR*

            [FieldOffsetAttribute(0)]

            public System.IntPtr pwszVal;

            /// CAI->tagCAI

            [FieldOffsetAttribute(0)]

            public tagCAI cai;

            /// CAUI->tagCAUI

            [FieldOffsetAttribute(0)]

            public tagCAUI caui;

            /// CABOOL->tagCABOOL

            [FieldOffsetAttribute(0)]

            public tagCABOOL cabool;

            /// CAL->tagCAL

            [FieldOffsetAttribute(0)]

            public tagCAL cal;

            /// CAUL->tagCAUL

            [FieldOffsetAttribute(0)]

            public tagCAUL caul;

            /// CACLSID->tagCACLSID

            [FieldOffsetAttribute(0)]

            public tagCACLSID cauuid;

            /// CABSTR->tagCABSTR

            [FieldOffsetAttribute(0)]

            public tagCABSTR cabstr;

            /// CALPWSTR->tagCALPWSTR

            [FieldOffsetAttribute(0)]

            public tagCALPWSTR calpwstr;

            /// CAPROPVARIANT->tagCAPROPVARIANT

            [FieldOffsetAttribute(0)]

            public tagCAPROPVARIANT capropvar;

        }

        [StructLayoutAttribute(LayoutKind.Sequential)]

        public struct MQPROPVARIANT

        {

            /// VARTYPE->unsigned short

            public ushort vt;

            /// WORD->unsigned short

            public ushort wReserved1;

            /// WORD->unsigned short

            public ushort wReserved2;

            /// WORD->unsigned short

            public ushort wReserved3;

            /// Anonymous_1506164d_aea5_43ce_9c68_e6f00748bae9

            public Union Union1;

        }

        [StructLayoutAttribute(LayoutKind.Sequential)]

        public struct MQMGMTPROPS

        {

            /// DWORD->unsigned int

            public uint cProp;

            /// MGMTPROPID*

            public System.IntPtr aPropID;

            /// MQPROPVARIANT*

            public System.IntPtr aPropVar;

            /// HRESULT*

            public System.IntPtr aStatus;

        }

        #endregion

  #region -- External Methods --

        /// Return Type: HRESULT->LONG->int

        ///pMachineName: LPCWSTR->WCHAR*

        ///pObjectName: LPCWSTR->WCHAR*

        ///pMgmtProps: MQMGMTPROPS*

        [DllImportAttribute("mqrt.dll", EntryPoint = "MQMgmtGetInfo")]

        public static extern int MQMgmtGetInfo([InAttribute()] [MarshalAsAttribute(UnmanagedType.LPWStr)] string pMachineName, [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPWStr)] string             pObjectName, ref MQMGMTPROPS pMgmtProps);

        /// Return Type: HRESULT->LONG->int

        ///pMachineName: LPCWSTR->WCHAR*

        ///pObjectName: LPCWSTR->WCHAR*

        ///pAction: LPCWSTR->WCHAR*

        [DllImportAttribute("mqrt.dll", EntryPoint = "MQMgmtAction")]

        public static extern int MQMgmtAction([InAttribute()] [MarshalAsAttribute(UnmanagedType.LPWStr)] string pMachineName, [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPWStr)] string pObjectName, [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPWStr)] string pAction);

        /// Return Type: HRESULT->LONG->int

        ///hQueue: HANDLE->void*

        [DllImportAttribute("mqrt.dll", EntryPoint = "MQPurgeQueue")]

        public static extern int MQPurgeQueue(System.IntPtr hQueue);

        #endregion

}

}

Now I have a managed code version of the MSMQ Admin APIs, so I wrote some extension methods to extend  MessageQueue class as follows :

private static uint GetCount(string path, MQMGMT_QUEUE_PROPERTIES Required)

        {

            if (path.Contains("Formatname:"))

                path = path.Replace("Formatname:", "");

            MQMGMTPROPS props = new MQMGMTPROPS { cProp = 1 };

            try

            {

                props.aPropID = Marshal.AllocHGlobal(sizeof(int));

                Marshal.WriteInt32(props.aPropID, (int)Required);

                props.aPropVar = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(MQPROPVARIANT)));

                Marshal.StructureToPtr(new MQPROPVARIANT { vt = VT_NULL }, props.aPropVar, false);

                props.aStatus = Marshal.AllocHGlobal(sizeof(int));

                Marshal.WriteInt32(props.aStatus, 0);

                int result = MQMgmtGetInfo(null, "queue=" + path, ref props);

                if (result != 0 || Marshal.ReadInt32(props.aStatus) != 0)

                {

                    return 0;

                }

                MQPROPVARIANT propVar = (MQPROPVARIANT)Marshal.PtrToStructure(props.aPropVar, typeof(MQPROPVARIANT));

                if (propVar.vt != VT_UI4)

                {

                    return 0;

                }

                else

                {

                    return propVar.Union1.ulVal;

                }

            }

            finally

            {

                Marshal.FreeHGlobal(props.aPropID);

                Marshal.FreeHGlobal(props.aPropVar);

                Marshal.FreeHGlobal(props.aStatus);

            }

        }

public static uint GetUnacknowledgedMessages(this MessageQueue queue)

        {

            return GetCount(queue.Path, MQMGMT_QUEUE_PROPERTIES.PROPID_MGMT_QUEUE_EOD_NO_ACK_COUNT);

        }

After investing some time, I thought that it is much better to have combination of MSMQ COM Interfaces and Admin APIs to give me more flexibility, you will find the complete source code here. [MessageQueueExtensions.zip (15.63 kb)]

Currently rated 4.2 by 17 people

  • Currently 4.235294/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Related posts

Comments

May 18. 2009 17:32

Gravatar

Interesting, actually I liked your logic and how you put things together.
I will check the performance and come back to you.
thanx

Ahmed Mostafa eg

May 18. 2009 21:40

Gravatar

Great job!

This simplifies the generation of unmanaged data types and method calls but, you still have to understand how to move data between managed and unmanaged code back and forth.

I mean, you still need the managed<->unmanaged know-how

Mohammad Khazbak eg

May 19. 2009 02:51

Gravatar

Great

Brian us

May 19. 2009 02:52

Gravatar

effectual and operative, Personally! you have saved me alot of time and mayb couldn't get the same results as you did .. thank you !!

Ramy El-Zawahry eg

November 13. 2009 18:53

Gravatar

Interesting information. May I add this blog to my linkexchange directory ?

no teletrack payday loans us

November 13. 2009 19:48

Gravatar

Nice piece of info you got in here. Keep it going and I'll make sure to bookmark. See ya.

cash advance us

November 17. 2009 11:40

Gravatar

Interesting information. May I add this blog to my linkexchange directory ?

no teletrack payday loans us

December 24. 2009 21:13

Gravatar

Well, I just found your blog through search engine. Actually I didn't intend to visit it before, yet after I read your article, I just can say that it's so inspiring. Thanks for making such nice article!

Oes Tsetnoc us

December 31. 2009 13:52

Gravatar

Just wanted to say thanks for this.

cash loans us

January 4. 2010 16:45

Gravatar

Nice info for MSMQ Outgoing Queues.

Bedding Duvet Covers us

January 4. 2010 21:58

Gravatar

Great post.keep posting us this type of wonderful information.We always look forward towards your post.

Acai berry us

January 5. 2010 23:17

Gravatar

Do you make money out of this blog? just curious

payday loans us

January 5. 2010 23:43

Gravatar

I'm not much of a commenter but this one deserves my appreciation. bookmarked :)

cash advance us

January 7. 2010 12:05

Gravatar

Interesting post

paydayloans us

January 8. 2010 01:28

Gravatar

Your blog contains very nice and meaningful information. Thanks for posting this here.

Acne us

January 21. 2010 21:39

Gravatar

Nice resource. rss feed added

loans us

January 30. 2010 16:03

Gravatar

Searching for this for some time now - i guess luck is more advanced than search engines :)

payday loans us

February 9. 2010 00:33

Gravatar

Your concepts are very clear thanks for letting us know!

Omaha Steaks us

February 19. 2010 06:24

Gravatar

This is a really excellent read for me. Must admit that you are one of the coolest blogger I ever saw. Thanks for posting this useful article.

Teeth Whitening us

February 19. 2010 13:05

Gravatar

This is indeed a great post, I would surely love to know more about it. I will look forward to see more

Teeth Whitening us

February 19. 2010 14:59

Gravatar

This is a really excellent read for me. Must admit that you are one of the coolest blogger I ever saw. Thanks for posting this useful article.

P90X us

February 19. 2010 17:44

Gravatar

you have really great info there, Thanks because I find this info useful. I've really enjoyed reading your articles Simply, admirable what you have done here.

Acai Berry us

February 25. 2010 06:03

Gravatar

I'm not much of a commenter but this one deserves my appreciation. bookmarked :)

cash advance us

February 25. 2010 08:56

Gravatar

This is one of the best post I have ever read, I would love to read more in future. Keep up the good work.

Acai Berry us

February 25. 2010 09:55

Gravatar

MSMQ Outgoing Queues. Useful information shared..Iam very happy to read this article..thanks for giving us nice info.Fantastic walk-through. I appreciate this post.

Bed Bugs Pictures us

February 25. 2010 12:14

Gravatar

MSMQ Outgoing Queues. Hello, maybe this is off topic but anyway, i've been browsing around your site and it looks really really neat. I'm building a new blog and struggling to make it look good, everytime i touch something i mess it up. How hard was it to build your site? Could someone like me with no experience do it, and add family update pages without wrecking it every time?.

Phone Pay As You Go us

February 26. 2010 01:51

Gravatar

MSMQ Outgoing Queues. I am very glad to see such information which I was searching for a long time.This made very glad..This site has given us an useful information...

Hair Color Pictures us

February 26. 2010 01:59

Gravatar

MSMQ Outgoing Queues. Thank you for the insight, i really appreciate your posts..

Hair Color Pictures us

February 26. 2010 03:11

Gravatar

MSMQ Outgoing Queues. .

Hair Color us

February 28. 2010 01:33

Gravatar

There is obviously a lot to know about this. I think you made some good points in Features also.

easy loans

February 28. 2010 03:19

Gravatar

MSMQ Outgoing Queues. Nice ... maybe you could update this. Thanks.

Hair Color Pictures us

February 28. 2010 04:20

Gravatar

MSMQ Outgoing Queues. I never thought of that this way .. good writing. .

Hair Color Pictures us

March 3. 2010 02:38

Gravatar

Pleasure in the job puts perfection in the work.

Loans in NM us

March 5. 2010 13:16

Gravatar

I used to read your Blog regularly. I must say great stuff .Keep posting us.

P90X Reviews us

March 5. 2010 15:49

Gravatar

Leadership is a potent combination of strategy and character.

online advance us

March 12. 2010 14:14

Gravatar

MSMQ Outgoing Queues. I need to read more on this topic..Thanks for sharing a nice info....

herpes simplex us

March 12. 2010 15:46

Gravatar

MSMQ Outgoing Queues. Some interesting information, well researched. I'll put a link to tjis site on my blog.Thank you! .

dog toy us

March 12. 2010 15:48

Gravatar

I really want to congratulate you for your blog.I am hoping the same best work from you in the future as well. In fact your creative writing abilities has inspired me to start my own blog now.

Teeth Whitening us

March 12. 2010 18:20

Gravatar

MSMQ Outgoing Queues. I havent any word to appreciate this post.....Really i am impressed from this post....the person who create this post it was a great human..thanks for shared this with us..

cooking master us

March 12. 2010 18:44

Gravatar

MSMQ Outgoing Queues. Thanks for such a nice article.It includes very informative information about the article..

picturehaircuts us

March 12. 2010 20:47

Gravatar

blog hopping.

Sikat ang Pinoy us

March 12. 2010 20:54

Gravatar

Integrate what you believe in every single area of your life. Take your heart to work and ask the most and best of everybody else, too.

fast personal loans us

March 12. 2010 21:21

Gravatar

MSMQ Outgoing Queues. Hello, maybe this is off topic but anyway, i've been browsing around your site and it looks really really neat. I'm building a new blog and struggling to make it look good, everytime i touch something i mess it up. How hard was it to build your site? Could someone like me with no experience do it, and add family update pages without wrecking it every time?.

practice test us

March 13. 2010 00:18

Gravatar

Hello,
This is my first visit. I like your site.
I have site too, about pimple may you interest in reading.
Happy writing.

Thanks
Dave

pimple treatment iq

March 13. 2010 04:17

Gravatar

Give yourself something to work toward - constantly.

bad credit personal loans us

March 17. 2010 08:39

Gravatar

very entertaining blog. Ill be back..

Webthesurfi Rugs Webdesign us

March 19. 2010 09:37

Gravatar

You want to know how to earn extra money in easy way? 5 minutes only and you will earn more than $50 with no cost and hassle free...

Ways to make extra money us

March 22. 2010 14:23

Gravatar

I wasn't aware of the many ripples and depth to this story until I surfed here through Google! Great job.

paydayloans

March 22. 2010 17:06

Gravatar

Do you have any additional info on this? Or maybe point me into the correct direction?

payday loans guaranteed no fax

March 22. 2010 22:53

Gravatar

your blog is very imformative and i learn a lot from it.
Thanks for sharing.

regards,

rosela

Watch Pacquiao Vs Clottey Live us

March 22. 2010 22:54

Gravatar

very entertaining and informative blog. Ill be back..

Webthesurfi Rugs Webdesign us

March 23. 2010 05:54

Gravatar

You made some good points there. I searched this topic and found out that most people will agree with your blog.

personal loans

March 24. 2010 04:47

Gravatar

Your work is to discover your work and then with all your heart to give yourself to it.

lose weight fast us

March 24. 2010 05:54

Gravatar

As a Noob, I am always seeking online for articles that can help me. Thank you

Acne scar treatment

March 24. 2010 08:35

Gravatar

MSMQ Outgoing Queues. Useful information shared..Iam very happy to read this article..thanks for giving us nice info.Fantastic walk-through. I appreciate this post.

strees fracture us

March 24. 2010 09:09

Gravatar

MSMQ Outgoing Queues. Very interesting post I have seen here.Thanks for posting it..

cats us

March 24. 2010 09:24

Gravatar

Hello, a very nice blog, I am just looking around some blogs, seems a pretty nice platform you are using. I'm currently using Wordpress for some of my sites but hoping to change one of them over to a platform similar to yours as a trial run. Anything in particular you would recommend about it?

chat software us

March 25. 2010 15:01

Gravatar

There is no greatness without a passion to be great, whether it's the aspiration of an athlete or an artist, a scientist, a parent, or a businessperson.

acai berry select us

March 26. 2010 08:45

Gravatar

MSMQ Outgoing Queues. Thanks for such a nice article.It includes very informative information about the article..

side effects us

March 26. 2010 11:21

Gravatar

MSMQ Outgoing Queues. I need to read more on this topic..Thanks for sharing a nice info....

blood pressure us

March 27. 2010 00:36

Gravatar

I admire the valuable information you offer in your articles. I will bookmark your blog and have my children check up here often. I am quite sure they will learn lots of new stuff here than anybody else! Big thanks for the useful info i found on MSMQ Outgoing Queues.

cash payday loan

March 28. 2010 03:07

Gravatar

Hello, I found your blog in a new directory of blogs. I dont know how your blog came up, must have been a typo, Your blog looks good. Have a nice day. Big thanks for the useful info i found on MSMQ Outgoing Queues.

teeth whitening

March 29. 2010 12:46

Gravatar

I am not really sure if best practices have emerged around things like that, but I am sure that your great job is clearly identified. I was wondering if you offer any subscription to your RSS feeds as I would be very interested and can?t find any link to subscribe here. Big thanks for the useful info i found on MSMQ Outgoing Queues.

payday cash loans

March 31. 2010 01:05

Gravatar

Excellent post.I want to thank you for this informative read, I really appreciate sharing this great post. Keep up your work.

plaka sorgulama us

March 31. 2010 21:17

Gravatar

AMAZING! Great work! This is a very nice post! Thanks!

teeth whitening

April 2. 2010 13:28

Gravatar

Hey very nice blog!! Man .. Beautiful .. Amazing .. I will bookmark your blog and take the feeds also...

Stretch marks

April 2. 2010 21:30

Gravatar

Today was a good day for research but I was surprised to find this info so easy to grasp.

Jamie tn

April 5. 2010 05:35

Gravatar

Hey very nice blog!! Man .. Beautiful .. Amazing .. I will bookmark your blog and take the feeds also...

Colon Cleanse us

April 6. 2010 19:11

Gravatar

Why don’t you guys add a social bookmarking button to your site so users have a chance to spread the name of your blog over the Internet. I am sure there will be a lot of readers who will do it. Just a thought.
Cheers – Sherry



Kegels exercises for men us

April 7. 2010 01:05

Gravatar

Does anybody here trade using Fidelity? If so, what do you think about it?

forex trading ni

April 7. 2010 13:49

Gravatar

I completely agree with the above comment, the internet is with a doubt growing into the most important medium of communication across the globe and its due to sites like this that ideas are spreading so quickly. Big thanks for the useful info i found on MSMQ Outgoing Queues.

toenail fungus remedy

April 8. 2010 01:40

Gravatar

I just found your blog on Bing, a really good post.

Weight loss meal plans ye

April 9. 2010 15:52

Gravatar

Found your site on del.icio.us today and really liked it.. i bookmarked it and will be back to check it out some more later ..

credit debt settlement

April 9. 2010 23:52

Gravatar

You should really review the comments here. Today it has been relatively smooth but a couple of weeks ago there were a couple of postings that could have raised a few eyebrows.

Stanley at

April 9. 2010 23:52

Gravatar

MSMQ Outgoing Queues. Such a usefule blog�wow !!!!.

hair color pictures us

April 9. 2010 23:53

Gravatar

Hello - I should say, Im impressed together with your web page. I had no trouble navigating via every one of the tabs and data was really easy to access. I determined what I wanted in no time whatsoever. Fairly awesome. Would appreciate it in case you add forums or something, it will be a excellent way for your clients to interact. Good job

How to Cure Gout Naturally cn

April 10. 2010 11:19

Gravatar

This is a cool adn nice read. The blog is written in such a way that it is so easy to read and understand. I AM a fan of your blog. Thanks for sharing this information.

Kegel exercising for men us

April 10. 2010 11:20

Gravatar

Thanks for your well-written critique. My brother and I were about to accomplish some research on our very own, about this subject. I am so glad I learned your internet site before we spent too a lot time looking through journals! You have explained the matter extremely nicely.

fast gout relief today cn

April 10. 2010 12:41

Gravatar

I just wanted to leave a quick comment to say that your blog was nice. I found it on google search after going through a lot of other information that was not really relevant. I thought I would find this much earlier considering how good the information is. Anyways, Cya- Lisa

How to Jelq us

April 10. 2010 14:26

Gravatar

You've accomplished a quite fine function, I'm impressed by your expertise, keep up the good function. I would love to know far more.

dental insurance quotes cn

April 10. 2010 15:07

Gravatar

I just wanted to leave a quick comment to say that your blog was nice. I found it on google search after going through a lot of other information that was not really relevant. I thought I would find this much earlier considering how good the information is. Anyways, Cya- Lisa

Jelqing exercise videos us

April 10. 2010 15:20

Gravatar

Cool.

Ares us

April 10. 2010 17:56

Gravatar

Stumbled across your post while searching for by way of yahoo. I go through the quite first paragraph and its excellent! I don't have enough time to finish it now, but I've bookmarked your web site and will go by way of the rest tonight. : )

Dental Insurance For Individuals cn

April 12. 2010 08:16

Gravatar

I just found this blog when I was looking for something else. I wanted to comment about the template,I really like it. I think I will use something similar for my blog as well..

Jelq us

April 12. 2010 11:49

Gravatar

Hey, I just wanted to leave a quick comment to say that I really enjoyed reading your post. There is a lot of good information here for anyone interested in this topic. Keep up the good work.

How can men use kegel exercises us

April 12. 2010 16:34

Gravatar

Hi. that is kind of an "unconventional" question , but have other visitors asked you how get the menu bar to glimpse like you've recieved it? I also have a blog and am actually looking to alter around the theme, however am scared to death to mess with it for fear in the search engines punishing me. I am quite new to all of this ...so i am just not positive precisely the best way to make an effort to to it all however. I'll just retain functioning on it one day at a time.

Inkjet Ink Cartridges cn

April 12. 2010 16:58

Gravatar

Terrific post many thanks. In particular remarkable topic, will bookmark your internet site to find out if you produce a lot more about in the long term.

HP Inkjet Ink cn

April 12. 2010 17:46

Gravatar

This can be my first time i visit the following. I found so many entertaining stuff within your weblog, specially its discussion. In the tons of comments on your content, I guess I am not the only a single having every one of the enjoyment the following! Hold up the good do the job.

refillable ink cartridges cn

April 12. 2010 18:17

Gravatar

Hi I determined this internet site by mistake when i was looking Google for this acne issue, I have to say your website is truly helpful I also adore the theme, its incredible!. I dont have that a lot time to read all your submit at the moment but I have bookmarked your web page and also signed up for your personal RSS feeds. I'll be again in a day or two. many thanks for a wonderful website.

black chrome rims cn

April 12. 2010 18:47

Gravatar

Thank you for your intelligent critique. Me and my neighbour were just setting as much as do some analysis about this. I'm very glad to find out this kind of good facts getting shared freely around.

cheap car rims cn

April 12. 2010 19:30

Gravatar

The publish is truly the freshest on this precious topic. I concur with your conclusions and will eagerly glimpse forward for your potential updates. Saying many thanks won't just be sufficient, for that great lucidity as part of your writing.

rims for cars cn

April 12. 2010 21:56

Gravatar

The post is really the freshest on this precious topic. I concur with your conclusions and will eagerly seem forward to your long term updates. Saying thanks won't just be adequate, to the superb lucidity in your crafting.

Pink Engagement Rings cn

April 15. 2010 01:30

Gravatar

Your weblog includes a genuinely cool pattern. That becoming said http://wordpress.org/extend/plugins/backup-content-as-txt/ the details here is totally free and is of high-quality. I'm subscribing to your feed right now.

Jose Hollywood cn

April 15. 2010 01:33

Gravatar

I wish you a successful implementation of your idea and will be waiting for http://www.connotea.org/user/ofself more interesting ideas from you. Thank you very much http://faves.com/users/ofself for sharing your ideas.

Jina Vaka cn

April 15. 2010 05:19

Gravatar

I wanted to thank you for this great read!! I definitely enjoying every little bit of it.I have you bookmarked to check out new stuff you post. Big thanks for the useful info i found on MSMQ Outgoing Queues.

genital warts treatment

April 15. 2010 07:26

Gravatar

Pleased to see your article! http://www.slideshare.net/jkljkl520/drinking-water-filter hope you have a great day! http://www.scribd.com/doc/29082722/Drinking-Water-Filter Thanks for this article http://www.docstoc.com/docs/31977803/Drinking-water-filter I will bookmark again.

Librada Trebesch cn

April 15. 2010 10:30

Gravatar

I love your blog. This is the kind of information people expect from all blogs

DOMINIQUE be

April 15. 2010 11:24

Gravatar

That is some inspirational Never knew that opinions could be this http://www.blogigo.com/changemylife/need-say-somthing-about-Aquasana-drinking-water-filter/10/ varied. here.

Isaias Falk cn

April 15. 2010 11:27

Gravatar

The tragedy of life is not http://opensourcecinema.org/user/65269 that it ends so soon,but that we wait so long to begin it.

Lesley Starke cn

April 15. 2010 13:08

Gravatar

Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I'll be subscribing to your feed and I hope you post again soon.

reverse osmosis drinking water filter cn

April 15. 2010 13:12

Gravatar

I don't like your template but your posts are quite good so I will check back!

car loans with bad credit

April 15. 2010 13:37

Gravatar

i found your blog when i was looking for a different sort of informtion but i was very happy and glad to read throu your blog. The information available here is great.

Kegels exercises for men us

April 18. 2010 21:56

Gravatar

Hello, I basically like your publishing mode! I'm checking for a freelance writer to do the job on some of my world wide web sites, would you be interested? Please do get in touch with me if you happen to be.

Unusual Engagement Rings cn

April 20. 2010 00:26

Gravatar

This was novel. I wished I could analyze every post, but i have to go back to work now... But I'll be back.

Chas Funai cn

April 20. 2010 07:45

Gravatar

Hello, I just began a new blog, but I cannot seem to get several readers. I can see that you have acquired a lot of comments. Are you able to give me some advice on tips on how to get far more readers and how to encourage comments? Thank you in advance.

how to get a six pack fast cn

April 20. 2010 22:50

Gravatar

Interesting post :) However, some of the comments people have made above are questionable, need to think a little bit more in depth

ABBY at

April 23. 2010 04:50

Gravatar

In searching for sites related to web hosting and specifically comparison hosting linux plan web, your site came up.You are a very smart person! Big thanks for the useful info i found on MSMQ Outgoing Queues.

getting rid of cellulite us

April 25. 2010 23:57

Gravatar

The important thing is not to stop questioning.

payday loans us

April 26. 2010 22:22

Gravatar

I've been following your blog for 3 days now and i should say i am starting to like your post. and now how do i subscribe to your blog?

Thanks
Dave

colors om

April 30. 2010 03:49

Gravatar

The composing design anything you use is exciting to look over, this article rocks ! i appreciate it. Good job

Cathy Son py

April 30. 2010 17:14

Gravatar

This is my first time i visit here. I found so many interesting stuff in your blog especially its discussion. From the tons of comments on your articles, I guess I am not the only one having all the enjoyment here! keep up the good work.

rug runner us

May 1. 2010 14:27

Gravatar

How hard was it to build your site? Could someone like me with no experience do it, and add family update pages without wrecking it every time?.

Insurance Claim Attorney us

May 2. 2010 14:20

Gravatar

Informative website, not like the other msmq websites.

Weight loss meal plans tn

May 3. 2010 03:02

Gravatar

dfgsdfgsd

vigrx plus us

May 3. 2010 08:38

Gravatar

I love your blog
Good to determine a lot of people writing about msmq

pictures of acne am

May 5. 2010 07:04

Gravatar

There is obviously a lot to know about this. I think you made some good points in Features also.

cash loan today us

May 6. 2010 17:43

Gravatar

Admiring the time and effort you put into your weblog and detailed facts you offer! I am going to bookmark your web site and also have my children verify up the following normally. Thumbs up!

insurance quotes online us

May 8. 2010 22:03

Gravatar

Please, can you PM me and tell me handful of much more thinks about this, I am actually fan of the website...

Cheap Insurance Quotes

May 8. 2010 23:12

Gravatar

Interesting article. Had been do you got all the details from... :)

Dumbarton il

May 10. 2010 07:46

Gravatar

This is exactly what i was looking for. thank you for the informative post and keep up the good work!

guaranteed payday loans us

May 10. 2010 08:10

Gravatar

haha � the one who is posting the comments :D

manny rivas

May 10. 2010 08:24

Gravatar

Hey very nice weblog!! Guy .. Gorgeous .. Amazing .. I will bookmark your weblog and consider the feeds also...

Queeny pt

May 10. 2010 19:17

Gravatar

Love the way this reads, not like the blogs I usually read. Not that it was too technical but just a little more challenging than what I am used to.

Alex sg

May 10. 2010 20:07

Gravatar

Interesting article. Had been did you got all the details from... ...)

Thistle tt

May 10. 2010 20:08

Gravatar

google is great ..i got actually what I was looking for ?

reverse phone numbers

May 12. 2010 14:59

Gravatar

Hello,
This is my first visit. I like your site.
I have site too, about pimple may you interest in reading.

Missouri us

May 13. 2010 16:04

Gravatar

Super-Duper site! I am loving it!!!
Will come back once again - taking you feeds also, Numerous thanks.

Earl Cochran ve

May 14. 2010 00:14

Gravatar

I thought it was going to be some boring old post, but it really compensated for my time. I will post a link to this page on my blog. I am sure my visitors will find that very useful

paydayloans us

May 14. 2010 01:09

Gravatar

Interesting blog because msmq is always more complexthan it appears.

Raquel mc

May 14. 2010 09:43

Gravatar

godo post very imformative

Remove Acne Scars us

May 16. 2010 21:46

Gravatar

Please, can you PM me and tell me few more thinks about this, I am really fan of your blog...

fast cash advances us

May 17. 2010 00:25

Gravatar

Your weblog is so informative �
keep up the good perform!!!!!!!!

arigoldfarb tr

May 17. 2010 03:19

Gravatar

Insights galore, many thanks.

water filter review in

May 20. 2010 10:57

Gravatar

Thanks for sharing such a nice post.

China tour us

May 20. 2010 16:00

Gravatar

great layout... i really like your site

vigrx plus us

May 20. 2010 18:15

Gravatar

This can be an excellent piece of writing, I was wondering if I could use this article on my webpage, I am going to link it back in your websites although. If this may be a problem please let me know and I'll take it down right away.

boost ezine articles views

May 20. 2010 22:53

Gravatar

This is a great project and I hope you get a lot of support!

Canada goose parka

May 20. 2010 22:53

Gravatar

Write your articles great hope that more exchanges to your site the first time very happy.very nice !

cosmetic packaging

May 25. 2010 19:25

Gravatar

Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I'll be subscribing to your feed and I hope you post again soon.

personal secured loans us

May 26. 2010 07:27

Gravatar

do you who decides what gravatar icon I will get when i post a commenet. i always get the weird looking ones

male enhancement us

May 26. 2010 23:50

Gravatar

I should really be working

Stevie us

Comments are closed