fix for: https://issues.apache.org/activemq/browse/AMQNET-281
diff --git a/src/main/csharp/ConnectionFactory.cs b/src/main/csharp/ConnectionFactory.cs
index 5946077..9ce897c 100755
--- a/src/main/csharp/ConnectionFactory.cs
+++ b/src/main/csharp/ConnectionFactory.cs
@@ -164,10 +164,14 @@
 			set
 			{
 				brokerUri = new Uri(URISupport.StripPrefix(value.OriginalString, "activemq:"));
-
-				if(brokerUri.Query != null)
+				
+				if(!String.IsNullOrEmpty(brokerUri.Query) && !brokerUri.OriginalString.EndsWith(")"))
 				{
-					StringDictionary properties = URISupport.ParseQuery(brokerUri.Query);
+					// Since the Uri class will return the end of a Query string found in a Composite
+					// URI we must ensure that we trim that off before we proceed.
+					string query = brokerUri.Query.Substring(brokerUri.Query.LastIndexOf(")") + 1);						
+					
+					StringDictionary properties = URISupport.ParseQuery(query);
 
 					StringDictionary connection = URISupport.ExtractProperties(properties, "connection.");
 					StringDictionary nms = URISupport.ExtractProperties(properties, "nms.");
diff --git a/src/test/csharp/NMSConnectionFactoryTest.cs b/src/test/csharp/NMSConnectionFactoryTest.cs
index 221676b..b4242af 100644
--- a/src/test/csharp/NMSConnectionFactoryTest.cs
+++ b/src/test/csharp/NMSConnectionFactoryTest.cs
@@ -43,6 +43,9 @@
 		[TestCase("activemq:failover://(tcp://${activemqhost}:61616)?transport.initialReconnectDelay=100")]

 		[TestCase("activemq:failover:(tcp://${activemqhost}:61616)?connection.asyncSend=true")]

 		[TestCase("activemq:failover:(tcp://${activemqhost}:61616)?transport.timeout=100&connection.asyncSend=true")]

+		[TestCase("activemq:failover:tcp://${activemqhost}:61616?keepAlive=false&wireFormat.maxInactivityDuration=1000")]

+		[TestCase("activemq:failover:(tcp://${activemqhost}:61616?keepAlive=false&wireFormat.maxInactivityDuration=1000)")]

+		[TestCase("activemq:failover:(tcp://${activemqhost}:61616?keepAlive=false&wireFormat.maxInactivityDuration=1000)?connection.asyncclose=false")]

 

 #if false

 		[TestCase("activemq:discovery:multicast://default")]

@@ -81,6 +84,7 @@
 			using(IConnection connection = factory.CreateConnection("", ""))

 			{

 				Assert.IsNotNull(connection);

+				connection.Close();

 			}

 		}

 

@@ -105,6 +109,8 @@
                 Assert.IsNotNull(this.info);

                 Assert.AreEqual(username, info.UserName);

                 Assert.AreEqual(password, info.Password);

+				

+				connection.Close();

             }

         }

 

@@ -143,7 +149,9 @@
                 Assert.AreEqual(topicPrefetch, amqConnection.PrefetchPolicy.TopicPrefetch);

                 Assert.AreEqual(durableTopicPrefetch, amqConnection.PrefetchPolicy.DurableTopicPrefetch);

                 Assert.AreEqual(maximumPendingMessageLimit, amqConnection.PrefetchPolicy.MaximumPendingMessageLimit);

-            }

+

+				connection.Close();

+			}

         }

     }

 }