https://issues.apache.org/activemq/browse/AMQNET-290

Add interfaces for ConnectionFactory, Connection, and Session instances that offer participation in Transactions based on the .NET System.Transactions model.
diff --git a/src/main/csharp/INetTxConnection.cs b/src/main/csharp/INetTxConnection.cs
new file mode 100644
index 0000000..82abc33
--- /dev/null
+++ b/src/main/csharp/INetTxConnection.cs
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Apache.NMS
+{
+    /// <summary>
+    /// The INetTxConnection extends the functionality of the IConnection interface by
+    /// adding the createNetTxSession method (optional).
+    ///
+    /// The INetTxConnection interface is optional. NMS providers are not required to support this
+    /// interface. This interface is for use by NMS providers to support transactional environments.
+    /// </summary>
+    public interface INetTxConnection : IConnection
+    {
+        /// <summary>
+        /// Creates a INetTxSession object.
+        /// </summary>
+        INetTxSession CreateNetTxSession();
+    }
+}
+
diff --git a/src/main/csharp/INetTxConnectionFactory.cs b/src/main/csharp/INetTxConnectionFactory.cs
new file mode 100644
index 0000000..4e5cb2e
--- /dev/null
+++ b/src/main/csharp/INetTxConnectionFactory.cs
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Apache.NMS
+{
+    /// <summary>
+    /// Some application servers provide support for use in a .NET transactions (optional).
+    ///
+    /// To include NMS API transactions in a MSDTC transaction, an application server requires a
+    /// .NET Transaction aware NMS provider that is capable of mapping the MSDTC transaction model
+    /// into operations that are supported by the application server. An NMS provider exposes its
+    /// .NET Transaction support using an INetTxConnectionFactory object, which an application
+    /// server uses to create INetTxConnection objects.
+    ///
+    /// The INetTxConnectionFactory interface is optional. NMS providers are not required to support this
+    /// interface. This interface is for use by NMS providers to support transactional environments.
+    /// </summary>
+    public interface INetTxConnectionFactory : IConnectionFactory
+    {
+        /// <summary>
+        /// Creates a new connection
+        /// </summary>
+        INetTxConnection CreateNetTxConnection();
+
+        /// <summary>
+        /// Creates a new connection with the given user name and password
+        /// </summary>
+        INetTxConnection CreateNetTxConnection(string userName, string password);
+    }
+}
+
diff --git a/src/main/csharp/INetTxSession.cs b/src/main/csharp/INetTxSession.cs
new file mode 100644
index 0000000..804f592
--- /dev/null
+++ b/src/main/csharp/INetTxSession.cs
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Apache.NMS
+{
+    /// <summary>
+    /// The INetTxSession interface extends the capability of Session by adding access to a NMS
+    /// provider's support for the Distributed Transactions (optional).  The transaction support
+    /// leverages the .NET Frameworks System.Transactions API.
+    ///
+    /// The NMS Provider implements this interface by participating in the current ambient transaction
+    /// as defined by the System.Transactions.Transaction.Current static member.  Whenever a new
+    /// Transaction is entered the NMS provider should enlist in that transaction.  When there is no
+    /// ambient transaction then the NMS Prodiver should allow the INetTxSession instance to behave
+    /// as a session that is in Auto Acknowledge mode.
+    ///
+    /// Calling the Commit or Rollback methods on a INetTxSession instance should throw an exception
+    /// as those operations are controlled by the Transaction Manager.
+    ///
+    /// The INetTxSession interface is optional. NMS providers are not required to support this
+    /// interface. This interface is for use by NMS providers to support transactional environments.
+    /// </summary>
+    public interface INetTxSession : ISession
+    {
+    }
+}
+