You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2015/09/21 16:27:23 UTC

[27/52] [partial] ignite git commit: IGNITE-1513: Moved .Net.

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Services/IServices.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Services/IServices.cs b/modules/platform/dotnet/Apache.Ignite.Core/Services/IServices.cs
new file mode 100644
index 0000000..fff25c3
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Services/IServices.cs
@@ -0,0 +1,181 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Services
+{
+    using System.Collections.Generic;
+    using Apache.Ignite.Core.Cluster;
+    using Apache.Ignite.Core.Common;
+
+    /// <summary>
+    /// Defines functionality to deploy distributed services in the Ignite.
+    /// </summary>
+    public interface IServices : IAsyncSupport<IServices>
+    {
+        /// <summary>
+        /// Gets the cluster group to which this instance belongs.
+        /// </summary>
+        /// <value>
+        /// The cluster group to which this instance belongs.
+        /// </value>
+        IClusterGroup ClusterGroup { get; }
+
+        /// <summary>
+        /// Deploys a cluster-wide singleton service. Ignite guarantees that there is always
+        /// one instance of the service in the cluster. In case if Ignite node on which the service
+        /// was deployed crashes or stops, Ignite will automatically redeploy it on another node.
+        /// However, if the node on which the service is deployed remains in topology, then the
+        /// service will always be deployed on that node only, regardless of topology changes.
+        /// <para />
+        /// Note that in case of topology changes, due to network delays, there may be a temporary situation
+        /// when a singleton service instance will be active on more than one node (e.g. crash detection delay).
+        /// </summary>
+        /// <param name="name">Service name.</param>
+        /// <param name="service">Service instance.</param>
+        [AsyncSupported]
+        void DeployClusterSingleton(string name, IService service);
+
+        /// <summary>
+        /// Deploys a per-node singleton service. Ignite guarantees that there is always
+        /// one instance of the service running on each node. Whenever new nodes are started
+        /// within the underlying cluster group, Ignite will automatically deploy one instance of
+        /// the service on every new node.        
+        /// </summary>
+        /// <param name="name">Service name.</param>
+        /// <param name="service">Service instance.</param>
+        [AsyncSupported]
+        void DeployNodeSingleton(string name, IService service);
+
+        /// <summary>
+        /// Deploys one instance of this service on the primary node for a given affinity key.
+        /// Whenever topology changes and primary node assignment changes, Ignite will always
+        /// make sure that the service is undeployed on the previous primary node and deployed
+        /// on the new primary node.
+        /// <para />
+        /// Note that in case of topology changes, due to network delays, there may be a temporary situation
+        /// when a service instance will be active on more than one node (e.g. crash detection delay).
+        /// </summary>
+        /// <param name="name">Service name.</param>
+        /// <param name="service">Service instance.</param>
+        /// <param name="cacheName">Name of the cache on which affinity for key should be calculated, null for
+        /// default cache.</param>
+        /// <param name="affinityKey">Affinity cache key.</param>
+        [AsyncSupported]
+        void DeployKeyAffinitySingleton<TK>(string name, IService service, string cacheName, TK affinityKey);
+
+        /// <summary>
+        /// Deploys multiple instances of the service on the grid. Ignite will deploy a
+        /// maximum amount of services equal to <paramref name="totalCount" /> parameter making sure that
+        /// there are no more than <paramref name="maxPerNodeCount" /> service instances running
+        /// on each node. Whenever topology changes, Ignite will automatically rebalance
+        /// the deployed services within cluster to make sure that each node will end up with
+        /// about equal number of deployed instances whenever possible.
+        /// </summary>
+        /// <param name="name">Service name.</param>
+        /// <param name="service">Service instance.</param>
+        /// <param name="totalCount">Maximum number of deployed services in the grid, 0 for unlimited.</param>
+        /// <param name="maxPerNodeCount">Maximum number of deployed services on each node, 0 for unlimited.</param>
+        [AsyncSupported]
+        void DeployMultiple(string name, IService service, int totalCount, int maxPerNodeCount);
+
+        /// <summary>
+        /// Deploys instances of the service in the Ignite according to provided configuration.
+        /// </summary>
+        /// <param name="configuration">Service configuration.</param>
+        [AsyncSupported]
+        void Deploy(ServiceConfiguration configuration);
+
+        /// <summary>
+        /// Cancels service deployment. If a service with specified name was deployed on the grid, 
+        /// then <see cref="IService.Cancel"/> method will be called on it.
+        /// <para/>
+        /// Note that Ignite cannot guarantee that the service exits from <see cref="IService.Execute"/>
+        /// method whenever <see cref="IService.Cancel"/> is called. It is up to the user to
+        /// make sure that the service code properly reacts to cancellations.
+        /// </summary>
+        /// <param name="name">Name of the service to cancel.</param>
+        [AsyncSupported]
+        void Cancel(string name);
+
+        /// <summary>
+        /// Cancels all deployed services.
+        /// <para/>
+        /// Note that depending on user logic, it may still take extra time for a service to 
+        /// finish execution, even after it was cancelled.
+        /// </summary>
+        [AsyncSupported]
+        void CancelAll();
+
+        /// <summary>
+        /// Gets metadata about all deployed services.
+        /// </summary>
+        /// <returns>Metadata about all deployed services.</returns>
+        ICollection<IServiceDescriptor> GetServiceDescriptors();
+
+        /// <summary>
+        /// Gets deployed service with specified name.
+        /// </summary>
+        /// <typeparam name="T">Service type.</typeparam>
+        /// <param name="name">Service name.</param>
+        /// <returns>Deployed service with specified name.</returns>
+        T GetService<T>(string name);
+
+        /// <summary>
+        /// Gets all deployed services with specified name.
+        /// </summary>
+        /// <typeparam name="T">Service type.</typeparam>
+        /// <param name="name">Service name.</param>
+        /// <returns>All deployed services with specified name.</returns>
+        ICollection<T> GetServices<T>(string name);
+
+        /// <summary>
+        /// Gets a remote handle on the service. If service is available locally,
+        /// then local instance is returned, otherwise, a remote proxy is dynamically
+        /// created and provided for the specified service.
+        /// </summary>
+        /// <typeparam name="T">Service type.</typeparam>
+        /// <param name="name">Service name.</param>
+        /// <returns>Either proxy over remote service or local service if it is deployed locally.</returns>
+        T GetServiceProxy<T>(string name) where T : class;
+
+        /// <summary>
+        /// Gets a remote handle on the service. If service is available locally,
+        /// then local instance is returned, otherwise, a remote proxy is dynamically
+        /// created and provided for the specified service.
+        /// </summary>
+        /// <typeparam name="T">Service type.</typeparam>
+        /// <param name="name">Service name.</param>
+        /// <param name="sticky">Whether or not Ignite should always contact the same remote
+        /// service or try to load-balance between services.</param>
+        /// <returns>Either proxy over remote service or local service if it is deployed locally.</returns>
+        T GetServiceProxy<T>(string name, bool sticky) where T : class;
+
+        /// <summary>
+        /// Returns an instance with portable mode enabled.
+        /// Service method results will be kept in portable form.
+        /// </summary>
+        /// <returns>Instance with portable mode enabled.</returns>
+        IServices WithKeepPortable();
+        
+        /// <summary>
+        /// Returns an instance with server-side portable mode enabled.
+        /// Service method arguments will be kept in portable form.
+        /// </summary>
+        /// <returns>Instance with server-side portable mode enabled.</returns>
+        IServices WithServerKeepPortable();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceConfiguration.cs b/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceConfiguration.cs
new file mode 100644
index 0000000..e91656f
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceConfiguration.cs
@@ -0,0 +1,62 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Services
+{
+    using Apache.Ignite.Core.Cluster;
+
+    /// <summary>
+    /// Service configuration.
+    /// </summary>
+    public class ServiceConfiguration
+    {
+        /// <summary>
+        /// Gets or sets the service name.
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// Gets or sets the service instance.
+        /// </summary>
+        public IService Service { get; set; }
+
+        /// <summary>
+        /// Gets or sets the total number of deployed service instances in the cluster, 0 for unlimited.
+        /// </summary>
+        public int TotalCount { get; set; }
+
+        /// <summary>
+        /// Gets or sets maximum number of deployed service instances on each node, 0 for unlimited.
+        /// </summary>
+        public int MaxPerNodeCount { get; set; }
+
+        /// <summary>
+        /// Gets or sets cache name used for key-to-node affinity calculation.
+        /// </summary>
+        public string CacheName { get; set; }
+
+        /// <summary>
+        /// Gets or sets affinity key used for key-to-node affinity calculation.
+        /// </summary>
+        public object AffinityKey { get; set; }
+
+        /// <summary>
+        /// Gets or sets node filter used to filter nodes on which the service will be deployed.
+        /// </summary>
+        public IClusterNodeFilter NodeFilter { get; set; } 
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceInvocationException.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceInvocationException.cs b/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceInvocationException.cs
new file mode 100644
index 0000000..fe83cbc
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Services/ServiceInvocationException.cs
@@ -0,0 +1,101 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Services
+{
+    using System;
+    using System.Runtime.Serialization;
+    using Apache.Ignite.Core.Common;
+    using Apache.Ignite.Core.Portable;
+
+    /// <summary>
+    /// Indicates an error during Grid Services invocation.
+    /// </summary>
+    [Serializable]
+    public class ServiceInvocationException : IgniteException
+    {
+        /** Serializer key. */
+        private const string KeyPortableCause = "PortableCause";
+
+        /** Cause. */
+        private readonly IPortableObject _portableCause;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ServiceInvocationException"/> class.
+        /// </summary>
+        public ServiceInvocationException()
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ServiceInvocationException"/> class.
+        /// </summary>
+        /// <param name="message">The message that describes the error.</param>
+        public ServiceInvocationException(string message) : base(message)
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ServiceInvocationException"/> class.
+        /// </summary>
+        /// <param name="message">The message.</param>
+        /// <param name="cause">The cause.</param>
+        public ServiceInvocationException(string message, Exception cause) : base(message, cause)
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ServiceInvocationException"/> class.
+        /// </summary>
+        /// <param name="message">The message.</param>
+        /// <param name="portableCause">The portable cause.</param>
+        public ServiceInvocationException(string message, IPortableObject portableCause)
+            :base(message)
+        {
+            _portableCause = portableCause;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="IgniteException"/> class.
+        /// </summary>
+        /// <param name="info">Serialization information.</param>
+        /// <param name="ctx">Streaming context.</param>
+        protected ServiceInvocationException(SerializationInfo info, StreamingContext ctx)
+            : base(info, ctx)
+        {
+            _portableCause = (IPortableObject) info.GetValue(KeyPortableCause, typeof (IPortableObject));
+        }
+
+        /// <summary>
+        /// Gets the portable cause.
+        /// </summary>
+        public IPortableObject PortableCause
+        {
+            get { return _portableCause; }
+        }
+
+        /** <inheritdoc /> */
+        public override void GetObjectData(SerializationInfo info, StreamingContext context)
+        {
+            info.AddValue(KeyPortableCause, _portableCause);
+
+            base.GetObjectData(info, context);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransaction.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransaction.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransaction.cs
new file mode 100644
index 0000000..e85d577
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransaction.cs
@@ -0,0 +1,230 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Transactions
+{
+    using System;
+    using System.Collections.Generic;
+    using Apache.Ignite.Core.Common;
+
+    /// <summary>
+    /// Grid cache transaction. 
+    /// <para />
+    /// Cache transactions support the following isolation levels:
+    /// <list type="bullet">
+    ///     <item>
+    ///         <description><see cref="TransactionIsolation.ReadCommitted"/> isolation level 
+    ///         means that always a committed value will be provided for read operations. With this isolation 
+    ///         level values are always read from cache global memory or persistent store every time a value 
+    ///         is accessed. In other words, if the same key is accessed more than once within the same transaction, 
+    ///         it may have different value every time since global cache memory may be updated concurrently by 
+    ///         other threads.</description>
+    ///     </item>
+    ///     <item>
+    ///         <description><see cref="TransactionIsolation.RepeatableRead"/> isolation level 
+    ///         means that if a value was read once within transaction, then all consecutive reads will provide 
+    ///         the same in-transaction value. With this isolation level accessed values are stored within 
+    ///         in-transaction memory, so consecutive access to the same key within the same transaction will always 
+    ///         return the value that was previously read or updated within this transaction. If concurrency is 
+    ///         <see cref="TransactionConcurrency.Pessimistic"/>, then a lock on the key will be 
+    ///         acquired prior to accessing the value.</description>
+    ///     </item>
+    ///     <item>
+    ///         <description><see cref="TransactionIsolation.Serializable"/> isolation level means 
+    ///         that all transactions occur in a completely isolated fashion, as if all transactions in the system 
+    ///         had executed serially, one after the other. Read access with this level happens the same way as with 
+    ///         <see cref="TransactionIsolation.RepeatableRead"/> level. However, in 
+    ///         <see cref="TransactionConcurrency.Optimistic"/> mode, if some transactions cannot be 
+    ///         serially isolated from each other, then one winner will be picked and the other transactions in 
+    ///         conflict will result in <c>TransactionOptimisticException</c> being thrown on Java side.</description>
+    ///     </item>
+    /// </list>
+    /// Cache transactions support the following concurrency models:
+    /// <list type="bullet">
+    ///     <item>
+    ///         <description><see cref="TransactionConcurrency.Optimistic"/> - in this mode all cache 
+    ///         operations 
+    ///         are not distributed to other nodes until <see cref="ITransaction.Commit()"/>.
+    ///         In this mode one <c>PREPARE</c> message will 
+    ///         be sent to participating cache nodes to start acquiring per-transaction locks, and once all nodes 
+    ///         reply <c>OK</c> (i.e. <c>Phase 1</c> completes successfully), a one-way <c>COMMIT</c> message is sent
+    ///         without waiting for reply. If it is necessary to know whenever remote nodes have committed as well, 
+    ///         synchronous commit or synchronous rollback should be enabled via 
+    ///         <c>CacheConfiguration.setWriteSynchronizationMode</c>.
+    ///         <para />
+    ///         Note that in this mode, optimistic failures are only possible in conjunction with
+    ///         <see cref="TransactionIsolation.Serializable"/> isolation level. In all other cases, 
+    ///         optimistic transactions will never fail optimistically and will always be identically ordered on all 
+    ///         participating Ignite nodes.</description>
+    ///     </item>
+    ///     <item>
+    ///         <description><see cref="TransactionConcurrency.Pessimistic"/> - in this mode a lock is 
+    ///         acquired on all cache operations with exception of read operations in 
+    ///         <see cref="TransactionIsolation.ReadCommitted"/> mode. All optional filters passed 
+    ///         into cache operations will be evaluated after successful lock acquisition. Whenever 
+    ///         <see cref="ITransaction.Commit()"/> is called, a single one-way <c>COMMIT</c> 
+    ///         message is sent to participating cache nodes without waiting for reply. Note that there is no reason 
+    ///         for distributed <c>PREPARE</c> step, as all locks have been already acquired. Just like with 
+    ///         optimistic mode, it is possible to configure synchronous commit or rollback and wait till 
+    ///         transaction commits on all participating remote nodes.</description>
+    ///     </item>
+    /// </list>
+    /// <para />
+    /// In addition to standard <c>CacheAtomicityMode.TRANSACTIONAL</c> behavior, Ignite also supports
+    /// a lighter <c>CacheAtomicityMode.ATOMIC</c> mode as well. In this mode distributed transactions
+    /// and distributed locking are not supported. Disabling transactions and locking allows to achieve much higher
+    /// performance and throughput ratios. It is recommended that <c>CacheAtomicityMode.TRANSACTIONAL</c> mode
+    /// is used whenever full <c>ACID</c>-compliant transactions are not needed.
+    /// <example>
+    ///     You can use cache transactions as follows:
+    ///     <code>
+    ///     ICacheTx tx = cache.TxStart();    
+    /// 
+    ///     try 
+    ///     {
+    ///         int v1 = cache&lt;string, int&gt;.Get("k1");
+    ///         
+    ///         // Check if v1 satisfies some condition before doing a put.
+    ///         if (v1 > 0)
+    ///             cache.Put&lt;string, int&gt;("k1", 2);
+    ///             
+    ///         cache.Removex("k2);
+    ///         
+    ///         // Commit the transaction.
+    ///         tx.Commit();
+    ///     }
+    ///     finally 
+    ///     {
+    ///         tx.Dispose();
+    ///     }
+    ///     
+    ///     </code>
+    /// </example>
+    /// </summary>
+    public interface ITransaction : IDisposable, IAsyncSupport<ITransaction>
+    {
+        /// <summary>
+        /// ID of the node on which this transaction started.
+        /// </summary>
+        /// <value>
+        /// Originating node ID.
+        /// </value>
+        Guid NodeId { get; }
+
+        /// <summary>
+        /// ID of the thread in which this transaction started.
+        /// </summary>
+        long ThreadId
+        {
+            get;
+        }
+
+        /// <summary>
+        /// Start time of this transaction on this node.
+        /// </summary>
+        DateTime StartTime
+        {
+            get;
+        }
+
+        /// <summary>
+        /// Transaction isolation level.
+        /// </summary>
+        TransactionIsolation Isolation
+        {
+            get;
+        }
+
+        /// <summary>
+        /// Transaction concurrency mode.
+        /// </summary>
+        TransactionConcurrency Concurrency
+        {
+            get;
+        }
+
+        /// <summary>
+        /// Current transaction state.
+        /// </summary>
+        TransactionState State
+        {
+            get;
+        }
+
+        /// <summary>
+        /// Timeout value in milliseconds for this transaction. If transaction times
+        /// out prior to it's completion, an exception will be thrown.
+        /// </summary>
+        TimeSpan Timeout
+        {
+            get;
+        }
+
+        /// <summary>
+        /// Gets a value indicating whether this transaction was marked as rollback-only.
+        /// </summary>
+        bool IsRollbackOnly
+        {
+            get;
+        }
+
+        /// <summary>
+        /// Modify the transaction associated with the current thread such that the 
+        /// only possible outcome of the transaction is to roll back the transaction.
+        /// </summary>
+        /// <returns>
+        /// True if rollback-only flag was set as a result of this operation, 
+        /// false if it was already set prior to this call or could not be set
+        /// because transaction is already finishing up committing or rolling back.
+        /// </returns>
+        bool SetRollbackonly();
+
+        /// <summary>
+        /// Commits this transaction.
+        /// </summary>
+        [AsyncSupported]
+        void Commit();
+
+        /// <summary>
+        /// Rolls back this transaction.
+        /// </summary>
+        [AsyncSupported]
+        void Rollback();
+
+        /// <summary>
+        /// Adds a new metadata.
+        /// </summary>
+        /// <param name="name">Metadata name.</param>
+        /// <param name="val">Metadata value.</param>
+        void AddMeta<TV>(string name, TV val);
+
+        /// <summary>
+        /// Gets metadata by name.
+        /// </summary>
+        /// <param name="name">Metadata name.</param>
+        /// <returns>Metadata value.</returns>
+        /// <exception cref="KeyNotFoundException">If metadata key was not found.</exception>
+        TV Meta<TV>(string name);
+
+        /// <summary>
+        /// Removes metadata by name.
+        /// </summary>
+        /// <param name="name">Metadata name.</param>
+        /// <returns>Value of removed metadata or default value for <code>V</code> type.</returns>
+        TV RemoveMeta<TV>(string name);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactionMetrics.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactionMetrics.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactionMetrics.cs
new file mode 100644
index 0000000..565dd34
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactionMetrics.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.
+ */
+
+namespace Apache.Ignite.Core.Transactions
+{
+    using System;
+
+    /// <summary>
+    /// Transaction metrics, shared across all caches.
+    /// </summary>
+    public interface ITransactionMetrics
+    {
+        /// <summary>
+        /// Gets the last time transaction was committed.
+        /// </summary>
+        DateTime CommitTime { get; }
+
+        /// <summary>
+        /// Gets the last time transaction was rolled back.
+        /// </summary>
+        DateTime RollbackTime { get; }
+
+        /// <summary>
+        /// Gets the total number of transaction commits.
+        /// </summary>
+        int TxCommits { get; }
+
+        /// <summary>
+        /// Gets the total number of transaction rollbacks.
+        /// </summary>
+        int TxRollbacks { get; }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactions.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactions.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactions.cs
new file mode 100644
index 0000000..83f12a5
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/ITransactions.cs
@@ -0,0 +1,73 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Transactions
+{
+    using System;
+
+    /// <summary>
+    /// Transactions facade.
+    /// <para/>
+    /// All members are thread-safe and may be used concurrently from multiple threads.
+    /// </summary>
+    public interface ITransactions
+    {
+        /// <summary>
+        /// Starts a transaction with default isolation, concurrency, timeout, and invalidation policy.
+        /// All defaults are set in CacheConfiguration at startup.
+        /// </summary>
+        /// <returns>New transaction.</returns>
+        ITransaction TxStart();
+
+        /// <summary>
+        /// Starts new transaction with the specified concurrency and isolation.
+        /// </summary>
+        /// <param name="concurrency">Concurrency.</param>
+        /// <param name="isolation">Isolation.</param>
+        /// <returns>New transaction.</returns>
+        ITransaction TxStart(TransactionConcurrency concurrency, TransactionIsolation isolation);
+
+        /// <summary>
+        /// Starts new transaction with the specified concurrency and isolation.
+        /// </summary>
+        /// <param name="concurrency">Concurrency.</param>
+        /// <param name="isolation">Isolation.</param>
+        /// <param name="timeout">Timeout.</param>
+        /// <param name="txSize">Number of entries participating in transaction (may be approximate).</param>
+        /// <returns>New transaction.</returns>
+        ITransaction TxStart(TransactionConcurrency concurrency, TransactionIsolation isolation, 
+            TimeSpan timeout, int txSize);
+
+        /// <summary>
+        /// Gets transaction started by this thread or null if this thread does not have a transaction.
+        /// </summary>
+        /// <value>
+        /// Transaction started by this thread or null if this thread does not have a transaction.
+        /// </value>
+        ITransaction Tx { get; }
+
+        /// <summary>
+        /// Gets the metrics.
+        /// </summary>
+        ITransactionMetrics GetMetrics();
+
+        /// <summary>
+        /// Resets the metrics.
+        /// </summary>
+        void ResetMetrics();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionConcurrency.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionConcurrency.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionConcurrency.cs
new file mode 100644
index 0000000..4025607
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionConcurrency.cs
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Transactions
+{
+    /// <summary>
+    /// Transaction concurrency control. See <see cref="ITransaction"/> for more 
+    /// information on transaction concurrency controls.
+    /// </summary>
+    public enum TransactionConcurrency
+    {
+        /// <summary>
+        /// Optimistic concurrency control.
+        /// </summary>
+        Optimistic = 0,
+
+        /// <summary>
+        /// Pessimistic concurrency control.
+        /// </summary>
+        Pessimistic = 1
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionHeuristicException.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionHeuristicException.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionHeuristicException.cs
new file mode 100644
index 0000000..cb46902
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionHeuristicException.cs
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Transactions
+{
+    using System;
+    using System.Runtime.Serialization;
+    using Apache.Ignite.Core.Common;
+
+    /// <summary> 
+    /// Exception thrown whenever Ignite transaction enters an unknown state.
+    /// This exception is usually thrown whenever commit partially succeeds.
+    /// Cache will still resolve this situation automatically to ensure data
+    /// integrity, by invalidating all values participating in this transaction
+    /// on remote nodes.  
+    /// </summary>
+    [Serializable]
+    public class TransactionHeuristicException : IgniteException
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionHeuristicException"/> class.
+        /// </summary>
+        public TransactionHeuristicException()
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionHeuristicException"/> class.
+        /// </summary>
+        /// <param name="message">The message that describes the error.</param>
+        public TransactionHeuristicException(string message) : base(message)
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionHeuristicException"/> class.
+        /// </summary>
+        /// <param name="info">Serialization information.</param>
+        /// <param name="ctx">Streaming context.</param>
+        protected TransactionHeuristicException(SerializationInfo info, StreamingContext ctx)
+            : base(info, ctx)
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionHeuristicException"/> class.
+        /// </summary>
+        /// <param name="message">The message.</param>
+        /// <param name="cause">The cause.</param>
+        public TransactionHeuristicException(string message, Exception cause) : base(message, cause)
+        {
+            // No-op.
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionIsolation.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionIsolation.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionIsolation.cs
new file mode 100644
index 0000000..2a7723f
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionIsolation.cs
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Transactions
+{
+    /// <summary>
+    /// Defines different cache transaction isolation levels. See <see cref="ITransaction"/>
+    /// documentation for more information about cache transaction isolation levels.
+    /// </summary>
+    public enum TransactionIsolation
+    {
+        /// <summary>
+        /// Read committed isolation level.
+        /// </summary>
+        ReadCommitted = 0,
+
+        /// <summary>
+        /// Repeatable read isolation level.
+        /// </summary>
+        RepeatableRead = 1,
+
+        /// <summary>
+        /// Serializable isolation level.
+        /// </summary>
+        Serializable = 2
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionOptimisticException.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionOptimisticException.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionOptimisticException.cs
new file mode 100644
index 0000000..2b64370
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionOptimisticException.cs
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Transactions
+{
+    using System;
+    using System.Runtime.Serialization;
+    using Apache.Ignite.Core.Common;
+
+    /// <summary> 
+    /// Exception thrown whenever Ignite transactions fail optimistically.  
+    /// </summary>
+    [Serializable]
+    public class TransactionOptimisticException : IgniteException
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionOptimisticException"/> class.
+        /// </summary>
+        public TransactionOptimisticException()
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionOptimisticException"/> class.
+        /// </summary>
+        /// <param name="message">The message that describes the error.</param>
+        public TransactionOptimisticException(string message) : base(message)
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionOptimisticException"/> class.
+        /// </summary>
+        /// <param name="message">The message.</param>
+        /// <param name="cause">The cause.</param>
+        public TransactionOptimisticException(string message, Exception cause)
+            : base(message, cause)
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionOptimisticException"/> class.
+        /// </summary>
+        /// <param name="info">Serialization information.</param>
+        /// <param name="ctx">Streaming context.</param>
+        protected TransactionOptimisticException(SerializationInfo info, StreamingContext ctx)
+            : base(info, ctx)
+        {
+            // No-op.
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionRollbackException.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionRollbackException.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionRollbackException.cs
new file mode 100644
index 0000000..c1f25c8
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionRollbackException.cs
@@ -0,0 +1,68 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Transactions 
+{
+    using System;
+    using System.Runtime.Serialization;
+    using Apache.Ignite.Core.Common;
+
+    /// <summary>
+    /// Exception thrown whenever Ignite transactions has been automatically rolled back.  
+    /// </summary>
+    [Serializable]
+    public class TransactionRollbackException : IgniteException
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionRollbackException"/> class.
+        /// </summary>
+        public TransactionRollbackException()
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionRollbackException"/> class.
+        /// </summary>
+        /// <param name="message">The message that describes the error.</param>
+        public TransactionRollbackException(string message) : base(message)
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionRollbackException"/> class.
+        /// </summary>
+        /// <param name="info">Serialization information.</param>
+        /// <param name="ctx">Streaming context.</param>
+        protected TransactionRollbackException(SerializationInfo info, StreamingContext ctx)
+            : base(info, ctx)
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionRollbackException"/> class.
+        /// </summary>
+        /// <param name="message">The message.</param>
+        /// <param name="cause">The cause.</param>
+        public TransactionRollbackException(string message, Exception cause) : base(message, cause)
+        {
+            // No-op.
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionState.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionState.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionState.cs
new file mode 100644
index 0000000..eecf72b
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionState.cs
@@ -0,0 +1,70 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Transactions
+{
+    /// <summary>
+    /// Cache transaction state.
+    /// </summary>
+    public enum TransactionState
+    {
+        /// <summary>
+        /// Transaction started.
+        /// </summary>
+        Active,
+
+        /// <summary>
+        /// Transaction validating.
+        /// </summary>
+        Preparing,
+
+        /// <summary>
+        /// Transaction validation succeeded.
+        /// </summary>
+        Prepared,
+
+        /// <summary>
+        /// Transaction is marked for rollback.
+        /// </summary>
+        MarkedRollback,
+
+        /// <summary>
+        /// Transaction commit started (validating finished).
+        /// </summary>
+        Committing,
+
+        /// <summary>
+        /// Transaction commit succeeded.
+        /// </summary>
+        Committed,
+        
+        /// <summary>
+        /// Transaction rollback started (validation failed).
+        /// </summary>
+        RollingBack,
+
+        /// <summary>
+        /// Transaction rollback succeeded.
+        /// </summary>
+        RolledBack,
+
+        /// <summary>
+        /// Transaction rollback failed or is otherwise unknown state.
+        /// </summary>
+        Unknown
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionTimeoutException.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionTimeoutException.cs b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionTimeoutException.cs
new file mode 100644
index 0000000..f1e492a
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.Core/Transactions/TransactionTimeoutException.cs
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Transactions 
+{
+    using System;
+    using System.Runtime.Serialization;
+    using Apache.Ignite.Core.Common;
+
+    /// <summary>
+    /// Exception thrown whenever Ignite transactions time out.  
+    /// </summary>
+    [Serializable]
+    public class TransactionTimeoutException : IgniteException
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionTimeoutException"/> class.
+        /// </summary>
+        public TransactionTimeoutException()
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionTimeoutException"/> class.
+        /// </summary>
+        /// <param name="message">The message that describes the error.</param>
+        public TransactionTimeoutException(string message)
+            : base(message)
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionTimeoutException"/> class.
+        /// </summary>
+        /// <param name="info">Serialization information.</param>
+        /// <param name="ctx">Streaming context.</param>
+        protected TransactionTimeoutException(SerializationInfo info, StreamingContext ctx)
+            : base(info, ctx)
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TransactionTimeoutException"/> class.
+        /// </summary>
+        /// <param name="message">The message.</param>
+        /// <param name="cause">The cause.</param>
+        public TransactionTimeoutException(string message, Exception cause) : base(message, cause)
+        {
+            // No-op.
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.sln
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.sln b/modules/platform/dotnet/Apache.Ignite.sln
new file mode 100644
index 0000000..ebde1a8
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.sln
@@ -0,0 +1,86 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Core", "Apache.Ignite.Core\Apache.Ignite.Core.csproj", "{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Core.Tests", "..\..\test\dotnet\Apache.Ignite.Core.Tests\Apache.Ignite.Core.Tests.csproj", "{6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "..\cpp\common\project\vs\common.vcxproj", "{4F7E4917-4612-4B96-9838-025711ADE391}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Core.Tests.TestDll", "..\..\test\dotnet\Apache.Ignite.Core.Tests.TestDll\Apache.Ignite.Core.Tests.TestDll.csproj", "{F4A69E2D-908E-4F0F-A794-84D508D60E5F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite", "Apache.Ignite\Apache.Ignite.csproj", "{27F7F3C6-BDDE-43A9-B565-856F8395A04B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Examples", "Examples\Apache.Ignite.Examples\Apache.Ignite.Examples.csproj", "{069FA680-3C4D-43A9-B84F-E67513B87827}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.ExamplesDll", "Examples\Apache.Ignite.ExamplesDll\Apache.Ignite.ExamplesDll.csproj", "{DFB08363-202E-412D-8812-349EF10A8702}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Debug|x64.ActiveCfg = Debug|x64
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Debug|x64.Build.0 = Debug|x64
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Debug|x86.ActiveCfg = Debug|x86
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Debug|x86.Build.0 = Debug|x86
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Release|x64.ActiveCfg = Release|x64
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Release|x64.Build.0 = Release|x64
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Release|x86.ActiveCfg = Release|x86
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Release|x86.Build.0 = Release|x86
+		{6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Debug|x64.ActiveCfg = Debug|x64
+		{6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Debug|x64.Build.0 = Debug|x64
+		{6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Debug|x86.ActiveCfg = Debug|x86
+		{6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Debug|x86.Build.0 = Debug|x86
+		{6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Release|x64.ActiveCfg = Release|x64
+		{6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Release|x64.Build.0 = Release|x64
+		{6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Release|x86.ActiveCfg = Release|x86
+		{6A62F66C-DA5B-4FBB-8CE7-A95F740FDC7A}.Release|x86.Build.0 = Release|x86
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Debug|x64.ActiveCfg = Debug|x64
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Debug|x64.Build.0 = Debug|x64
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Debug|x86.ActiveCfg = Debug|Win32
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Debug|x86.Build.0 = Debug|Win32
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Release|x64.ActiveCfg = Release|x64
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Release|x64.Build.0 = Release|x64
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Release|x86.ActiveCfg = Release|Win32
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Release|x86.Build.0 = Release|Win32
+		{F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Debug|x64.ActiveCfg = Debug|x64
+		{F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Debug|x64.Build.0 = Debug|x64
+		{F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Debug|x86.ActiveCfg = Debug|x86
+		{F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Debug|x86.Build.0 = Debug|x86
+		{F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Release|x64.ActiveCfg = Release|x64
+		{F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Release|x64.Build.0 = Release|x64
+		{F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Release|x86.ActiveCfg = Release|x86
+		{F4A69E2D-908E-4F0F-A794-84D508D60E5F}.Release|x86.Build.0 = Release|x86
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x64.ActiveCfg = Debug|x64
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x64.Build.0 = Debug|x64
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x86.ActiveCfg = Debug|x86
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x86.Build.0 = Debug|x86
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x64.ActiveCfg = Release|x64
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x64.Build.0 = Release|x64
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x86.ActiveCfg = Release|x86
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x86.Build.0 = Release|x86
+		{069FA680-3C4D-43A9-B84F-E67513B87827}.Debug|x64.ActiveCfg = Debug|x64
+		{069FA680-3C4D-43A9-B84F-E67513B87827}.Debug|x64.Build.0 = Debug|x64
+		{069FA680-3C4D-43A9-B84F-E67513B87827}.Debug|x86.ActiveCfg = Debug|x86
+		{069FA680-3C4D-43A9-B84F-E67513B87827}.Debug|x86.Build.0 = Debug|x86
+		{069FA680-3C4D-43A9-B84F-E67513B87827}.Release|x64.ActiveCfg = Release|x64
+		{069FA680-3C4D-43A9-B84F-E67513B87827}.Release|x64.Build.0 = Release|x64
+		{069FA680-3C4D-43A9-B84F-E67513B87827}.Release|x86.ActiveCfg = Release|x86
+		{069FA680-3C4D-43A9-B84F-E67513B87827}.Release|x86.Build.0 = Release|x86
+		{DFB08363-202E-412D-8812-349EF10A8702}.Debug|x64.ActiveCfg = Debug|x64
+		{DFB08363-202E-412D-8812-349EF10A8702}.Debug|x64.Build.0 = Debug|x64
+		{DFB08363-202E-412D-8812-349EF10A8702}.Debug|x86.ActiveCfg = Debug|x86
+		{DFB08363-202E-412D-8812-349EF10A8702}.Debug|x86.Build.0 = Debug|x86
+		{DFB08363-202E-412D-8812-349EF10A8702}.Release|x64.ActiveCfg = Release|x64
+		{DFB08363-202E-412D-8812-349EF10A8702}.Release|x64.Build.0 = Release|x64
+		{DFB08363-202E-412D-8812-349EF10A8702}.Release|x86.ActiveCfg = Release|x86
+		{DFB08363-202E-412D-8812-349EF10A8702}.Release|x86.Build.0 = Release|x86
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.sln.DotSettings
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.sln.DotSettings b/modules/platform/dotnet/Apache.Ignite.sln.DotSettings
new file mode 100644
index 0000000..187a909
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.sln.DotSettings
@@ -0,0 +1,4 @@
+<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
+	<s:Boolean x:Key="/Default/CodeStyle/CSharpUsing/AddImportsToDeepestScope/@EntryValue">True</s:Boolean>
+	
+	<s:Boolean x:Key="/Default/CodeStyle/CSharpUsing/QualifiedUsingAtNestedScope/@EntryValue">True</s:Boolean></wpf:ResourceDictionary>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite.slnrel
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.slnrel b/modules/platform/dotnet/Apache.Ignite.slnrel
new file mode 100644
index 0000000..0229623
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite.slnrel
@@ -0,0 +1,43 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Core", "Apache.Ignite.Core\Apache.Ignite.Core.csproj", "{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "..\cpp\src\common\project\vs\common.vcxproj", "{4F7E4917-4612-4B96-9838-025711ADE391}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite", "Apache.Ignite\Apache.Ignite.csproj", "{27F7F3C6-BDDE-43A9-B565-856F8395A04B}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Debug|x64.ActiveCfg = Debug|x64
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Debug|x64.Build.0 = Debug|x64
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Debug|x86.ActiveCfg = Debug|x86
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Debug|x86.Build.0 = Debug|x86
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Release|x64.ActiveCfg = Release|x64
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Release|x64.Build.0 = Release|x64
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Release|x86.ActiveCfg = Release|x86
+		{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}.Release|x86.Build.0 = Release|x86
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Debug|x64.ActiveCfg = Debug|x64
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Debug|x64.Build.0 = Debug|x64
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Debug|x86.ActiveCfg = Debug|Win32
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Debug|x86.Build.0 = Debug|Win32
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Release|x64.ActiveCfg = Release|x64
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Release|x64.Build.0 = Release|x64
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Release|x86.ActiveCfg = Release|Win32
+		{4F7E4917-4612-4B96-9838-025711ADE391}.Release|x86.Build.0 = Release|Win32
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x64.ActiveCfg = Debug|x64
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x64.Build.0 = Debug|x64
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x86.ActiveCfg = Debug|x86
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Debug|x86.Build.0 = Debug|x86
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x64.ActiveCfg = Release|x64
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x64.Build.0 = Release|x64
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x86.ActiveCfg = Release|x86
+		{27F7F3C6-BDDE-43A9-B565-856F8395A04B}.Release|x86.Build.0 = Release|x86
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csproj
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csproj b/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csproj
new file mode 100644
index 0000000..7f6db3a
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csproj
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{27F7F3C6-BDDE-43A9-B565-856F8395A04B}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Apache.Ignite</RootNamespace>
+    <AssemblyName>Apache.Ignite</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <PlatformTarget>x64</PlatformTarget>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <PlatformTarget>x64</PlatformTarget>
+    <OutputPath>bin\x64\Release\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <PlatformTarget>x86</PlatformTarget>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <PlatformTarget>x86</PlatformTarget>
+    <OutputPath>bin\x86\Release\</OutputPath>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.ServiceProcess" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Config\AppSettingsConfigurator.cs" />
+    <Compile Include="Config\ArgsConfigurator.cs" />
+    <Compile Include="Config\ConfigValueParser.cs" />
+    <Compile Include="Config\IConfigurator.cs" />
+    <Compile Include="IgniteRunner.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Service\IgniteService.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="Service\NativeMethods.cs" />
+    <Compile Include="Service\ServiceDescription.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Apache.Ignite.Core\Apache.Ignite.Core.csproj">
+      <Project>{4cd2f726-7e2b-46c4-a5ba-057bb82eecb6}</Project>
+      <Name>Apache.Ignite.Core</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>copy $(TargetPath) $(SolutionDir)..\..\test\dotnet\Apache.Ignite.Core.Tests\$(OutDir)
+copy $(TargetPath).config $(SolutionDir)..\..\test\dotnet\Apache.Ignite.Core.Tests\$(OutDir)</PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csprojrel
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csprojrel b/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csprojrel
new file mode 100644
index 0000000..0883660
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/Apache.Ignite.csprojrel
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{27F7F3C6-BDDE-43A9-B565-856F8395A04B}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Apache.Ignite</RootNamespace>
+    <AssemblyName>Apache.Ignite</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <PlatformTarget>x64</PlatformTarget>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <PlatformTarget>x64</PlatformTarget>
+    <OutputPath>bin\x64\Release\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <PlatformTarget>x86</PlatformTarget>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <PlatformTarget>x86</PlatformTarget>
+    <OutputPath>bin\x86\Release\</OutputPath>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.ServiceProcess" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Config\AppSettingsConfigurator.cs" />
+    <Compile Include="Config\ArgsConfigurator.cs" />
+    <Compile Include="Config\ConfigValueParser.cs" />
+    <Compile Include="Config\IConfigurator.cs" />
+    <Compile Include="IgniteRunner.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Service\IgniteService.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="Service\NativeMethods.cs" />
+    <Compile Include="Service\ServiceDescription.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Apache.Ignite.Core\Apache.Ignite.Core.csproj">
+      <Project>{4cd2f726-7e2b-46c4-a5ba-057bb82eecb6}</Project>
+      <Name>Apache.Ignite.Core</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/App.config
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/App.config b/modules/platform/dotnet/Apache.Ignite/App.config
new file mode 100644
index 0000000..a9e8c39
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/App.config
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  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.
+-->
+
+
+<!--
+    Apache Ignite .Net startup application configuration file.
+-->
+
+<configuration>
+    <startup>
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
+    </startup>
+
+    <runtime>
+        <gcServer enabled="true" />
+    </runtime>
+
+    <appSettings>
+        <!-- Path to spring configuration file relative from IGNITE_HOME (if not provided "config/default-config.xml" is used) -->
+        <!-- <add key="Ignite.SpringConfigUrl" value="my-config.xml"/> -->
+
+        <!-- Absolute path to spring configuration file (if not provided "config/default-config.xml" is used) -->
+        <!-- <add key="Ignite.SpringConfigUrl" value="C:\my-dir\my-config.xml"/> -->
+
+        <!-- Path to Java library jvm.dll (if not provided JAVA_HOME environment variable is used to find jvm.dll) -->
+        <!-- <add key="Ignite.JvmDllPath" value="C:\Program Files\Java\jdk1.7.0_45\jre\bin\server\jvm.dll"/> -->
+
+        <!-- Additional classpath passed to JVM (enlist additional jar files here) -->
+        <!-- <add key="Ignite.JvmClasspath" value="c:\my-dir\my-lib1.jar;c:\my-dir\my-lib2.jar"/> -->
+
+        <!-- JVM Options passed to JVM -->
+        <!-- <add key="Ignite.JvmOption.1" value="-Xmx512m"/> -->
+        <!-- <add key="Ignite.JvmOption.2" value="-DIGNITE_QUIET=false"/> -->
+
+        <!-- Additional .Net assemblies to be loaded on startup. -->
+        <!-- <add key="Ignite.Assembly.1" value="System.Data.Linq,Culture=neutral,Version=1.0.0.0,PublicKeyToken=b77a5c561934e089"/> -->
+        <!-- <add key="Ignite.Assembly.2" value="my-assembly.dll"/> -->
+    </appSettings>
+
+</configuration>

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/Config/AppSettingsConfigurator.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/Config/AppSettingsConfigurator.cs b/modules/platform/dotnet/Apache.Ignite/Config/AppSettingsConfigurator.cs
new file mode 100644
index 0000000..b2e827e
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/Config/AppSettingsConfigurator.cs
@@ -0,0 +1,113 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Config
+{
+    using System.Collections.Generic;
+    using System.Collections.Specialized;
+    using Apache.Ignite.Core;
+
+    /// <summary>
+    /// Configurator which uses application configuration.
+    /// </summary>
+    internal class AppSettingsConfigurator : IConfigurator<NameValueCollection>
+    {
+        /** Common configuration property prefix. */
+        private static readonly string CfgPrefix = "Ignite.".ToLower();
+
+        /** Configuration property: Ignite home. */
+        private static readonly string CfgHome = "Home".ToLower();
+
+        /** Configuration property: Spring config URL. */
+        private static readonly string CfgSpringCfgUrl = "SpringConfigUrl".ToLower();
+
+        /** Configuration property: Path to JVM dll. */
+        private static readonly string CfgJvmDll = "JvmDll".ToLower();
+
+        /** Configuration property: JVM classpath. */
+        private static readonly string CfgJvmClasspath = "JvmClasspath".ToLower();
+
+        /** Configuration property: suppress warnings flag. */
+        private static readonly string CfgSuppressWarn = "SuppressWarnings".ToLower();
+
+        /** Configuration property: JVM option prefix. */
+        private static readonly string CfgJvmOptPrefix = "JvmOption".ToLower();
+
+        /** Configuration property: assembly prefix. */
+        private static readonly string CfgAssemblyPrefix = "Assembly".ToLower();
+
+        /** Configuration property: JVM min memory. */
+        private static readonly string CfgJvmMinMem = "JvmInitialMemoryMB".ToLower();
+
+        /** Configuration property: JVM max memory. */
+        private static readonly string CfgJvmMaxMem = "JvmMaxMemoryMB".ToLower();
+
+        /** <inheritDoc /> */
+        public void Configure(IgniteConfiguration cfg, NameValueCollection src)
+        {
+            var jvmOpts = new List<string>();
+            var assemblies = new List<string>();
+
+            foreach (string key in src.Keys)
+            {
+                var key0 = key.ToLower();
+
+                if (key0.StartsWith(CfgPrefix))
+                {
+                    key0 = key0.Substring(CfgPrefix.Length);
+
+                    var val = src[key];
+
+                    if (CfgHome.Equals(key0))
+                        cfg.IgniteHome = val;
+                    else if (CfgSpringCfgUrl.Equals(key0))
+                        cfg.SpringConfigUrl = val;
+                    else if (CfgJvmDll.Equals(key0))
+                        cfg.JvmDllPath = val;
+                    else if (CfgJvmClasspath.Equals(key0))
+                        cfg.JvmClasspath = val;
+                    else if (CfgSuppressWarn.Equals(key0))
+                        cfg.SuppressWarnings = val != null && bool.TrueString.ToLower().Equals(val.ToLower());
+                    else if (key0.StartsWith(CfgJvmOptPrefix))
+                        jvmOpts.Add(val);
+                    else if (key0.StartsWith(CfgAssemblyPrefix))
+                        assemblies.Add(val);
+                    else if (CfgJvmMinMem.Equals(key0))
+                        cfg.JvmInitialMemoryMb = ConfigValueParser.ParseInt(val, key);
+                    else if (CfgJvmMaxMem.Equals(key0))
+                        cfg.JvmMaxMemoryMb = ConfigValueParser.ParseInt(val, key);
+                }
+            }
+
+            if (jvmOpts.Count > 0)
+            {
+                if (cfg.JvmOptions == null)
+                    cfg.JvmOptions = jvmOpts;
+                else
+                    jvmOpts.ForEach(val => cfg.JvmOptions.Add(val));
+            }
+
+            if (assemblies.Count > 0)
+            {
+                if (cfg.Assemblies == null)
+                    cfg.Assemblies = assemblies;
+                else
+                    assemblies.ForEach(val => cfg.Assemblies.Add(val));
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/Config/ArgsConfigurator.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/Config/ArgsConfigurator.cs b/modules/platform/dotnet/Apache.Ignite/Config/ArgsConfigurator.cs
new file mode 100644
index 0000000..b0651d7
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/Config/ArgsConfigurator.cs
@@ -0,0 +1,164 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Config
+{
+    using System.Collections.Generic;
+    using Apache.Ignite.Core;
+
+    /// <summary>
+    /// Configurator which uses arguments array.
+    /// </summary>
+    internal class ArgsConfigurator : IConfigurator<string[]>
+    {
+        /** Command line argument: Ignite home. */
+        private static readonly string CmdIgniteHome = "-IgniteHome=".ToLower();
+
+        /** Command line argument: Spring config URL. */
+        private static readonly string CmdSpringCfgUrl = "-SpringConfigUrl=".ToLower();
+
+        /** Command line argument: Path to JVM dll. */
+        private static readonly string CmdJvmDll = "-JvmDll=".ToLower();
+
+        /** Command line argument: JVM classpath. */
+        private static readonly string CmdJvmClasspath = "-JvmClasspath=".ToLower();
+
+        /** Command line argument: suppress warnings flag. */
+        private static readonly string CmdSuppressWarn = "-SuppressWarnings=".ToLower();
+
+        /** Command line argument: JVM option prefix. */
+        private static readonly string CmdJvmOpt = "-J".ToLower();
+
+        /** Command line argument: assembly. */
+        private static readonly string CmdAssembly = "-Assembly=".ToLower();
+
+        /** Command line argument: JvmInitialMemoryMB. */
+        private static readonly string CmdJvmMinMem = "-JvmInitialMemoryMB=".ToLower();
+
+        /** Command line argument: JvmMaxMemoryMB. */
+        private static readonly string CmdJvmMaxMem = "-JvmMaxMemoryMB=".ToLower();
+
+        /// <summary>
+        /// Convert configuration to arguments.
+        /// </summary>
+        /// <param name="cfg"></param>
+        /// <returns></returns>
+        internal static string[] ToArgs(IgniteConfiguration cfg)
+        {
+            var args = new List<string>();
+
+            if (cfg.IgniteHome != null)
+                args.Add(CmdIgniteHome + cfg.IgniteHome);
+
+            if (cfg.SpringConfigUrl != null)
+                args.Add(CmdSpringCfgUrl + cfg.SpringConfigUrl);
+
+            if (cfg.JvmDllPath != null)
+                args.Add(CmdJvmDll + cfg.JvmDllPath);
+
+            if (cfg.JvmClasspath != null)
+                args.Add(CmdJvmClasspath + cfg.JvmClasspath);
+            
+            if (cfg.SuppressWarnings)
+                args.Add(CmdSuppressWarn + bool.TrueString);
+
+            if (cfg.JvmOptions != null)
+            {
+                foreach (var jvmOpt in cfg.JvmOptions)
+                    args.Add(CmdJvmOpt + jvmOpt);
+            }
+
+            if (cfg.Assemblies != null)
+            {
+                foreach (var assembly in cfg.Assemblies)
+                    args.Add(CmdAssembly + assembly);
+            }
+
+            args.Add(CmdJvmMinMem + cfg.JvmInitialMemoryMb);
+            args.Add(CmdJvmMaxMem + cfg.JvmMaxMemoryMb);
+
+            return args.ToArray();
+        }
+
+        /// <summary>
+        /// Convert arguments to configuration.
+        /// </summary>
+        /// <param name="args">Arguments.</param>
+        /// <returns>Configuration.</returns>
+        internal static IgniteConfiguration FromArgs(string[] args)
+        {
+            var cfg = new IgniteConfiguration();
+
+            new ArgsConfigurator().Configure(cfg, args);
+
+            return cfg;
+        }
+
+        /** <inheritDoc /> */
+        public void Configure(IgniteConfiguration cfg, string[] src)
+        {
+            var jvmOpts = new List<string>();
+            var assemblies = new List<string>();
+
+            foreach (var arg in src)
+            {
+                var argLow = arg.ToLower();
+
+                if (argLow.StartsWith(CmdIgniteHome))
+                    cfg.IgniteHome = arg.Substring(CmdIgniteHome.Length);
+                else if (argLow.StartsWith(CmdSpringCfgUrl))
+                    cfg.SpringConfigUrl = arg.Substring(CmdSpringCfgUrl.Length);
+                else if (argLow.StartsWith(CmdJvmDll))
+                    cfg.JvmDllPath = arg.Substring(CmdJvmDll.Length);
+                else if (argLow.StartsWith(CmdJvmClasspath))
+                    cfg.JvmClasspath = arg.Substring(CmdJvmClasspath.Length);
+                else if (argLow.StartsWith(CmdSuppressWarn))
+                {
+                    var val = arg.Substring(CmdSuppressWarn.Length);
+
+                    cfg.SuppressWarnings = bool.TrueString.ToLower().Equals(val.ToLower());
+                }
+                else if (argLow.StartsWith(CmdJvmMinMem))
+                    cfg.JvmInitialMemoryMb = ConfigValueParser.ParseInt(arg.Substring(CmdJvmMinMem.Length),
+                        CmdJvmMinMem);
+                else if (argLow.StartsWith(CmdJvmMaxMem))
+                    cfg.JvmMaxMemoryMb = ConfigValueParser.ParseInt(arg.Substring(CmdJvmMaxMem.Length),
+                        CmdJvmMaxMem);
+                else if (argLow.StartsWith(CmdJvmOpt))
+                    jvmOpts.Add(arg.Substring(CmdJvmOpt.Length));
+                else if (argLow.StartsWith(CmdAssembly))
+                    assemblies.Add(arg.Substring(CmdAssembly.Length));
+            }
+
+            if (jvmOpts.Count > 0)
+            {
+                if (cfg.JvmOptions == null)
+                    cfg.JvmOptions = jvmOpts;
+                else
+                    jvmOpts.ForEach(val => cfg.JvmOptions.Add(val));
+            }
+
+            if (assemblies.Count > 0)
+            {
+                if (cfg.Assemblies == null)
+                    cfg.Assemblies = assemblies;
+                else
+                    assemblies.ForEach(val => cfg.Assemblies.Add(val));
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/Config/ConfigValueParser.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/Config/ConfigValueParser.cs b/modules/platform/dotnet/Apache.Ignite/Config/ConfigValueParser.cs
new file mode 100644
index 0000000..796b8e1
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/Config/ConfigValueParser.cs
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Config
+{
+    using System;
+
+    /// <summary>
+    /// Parses Ignite config values.
+    /// </summary>
+    internal class ConfigValueParser
+    {
+        /// <summary>
+        /// Parses provided string to int. Throws a custom exception if failed.
+        /// </summary>
+        public static int ParseInt(string value, string propertyName)
+        {
+            int result;
+
+            if (int.TryParse(value, out result))
+                return result;
+
+            throw new InvalidOperationException(
+                string.Format("Failed to configure Ignite: property '{0}' has value '{1}', which is not an integer.",
+                    propertyName, value));
+        }
+    }
+}