ignite-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From voze...@apache.org
Subject [26/52] [partial] ignite git commit: IGNITE-1513: Moved .Net.
Date Mon, 21 Sep 2015 14:27:22 GMT
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/Config/IConfigurator.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/Config/IConfigurator.cs b/modules/platform/dotnet/Apache.Ignite/Config/IConfigurator.cs
new file mode 100644
index 0000000..f5c0acf
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/Config/IConfigurator.cs
@@ -0,0 +1,34 @@
+/*
+ * 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 Apache.Ignite.Core;
+
+    /// <summary>
+    /// Configurator which is capable of setting configuration properties taken from somewhere.
+    /// </summary>
+    internal interface IConfigurator<in T>
+    {
+        /// <summary>
+        /// Set configuration.
+        /// </summary>
+        /// <param name="cfg">Configuration.</param>
+        /// <param name="src">Source.</param>
+        void Configure(IgniteConfiguration cfg, T src);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/IgniteRunner.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/IgniteRunner.cs b/modules/platform/dotnet/Apache.Ignite/IgniteRunner.cs
new file mode 100644
index 0000000..122994f
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/IgniteRunner.cs
@@ -0,0 +1,171 @@
+/*
+ * 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
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Configuration;
+    using System.Linq;
+    using System.ServiceProcess;
+    using Apache.Ignite.Config;
+    using Apache.Ignite.Core;
+    using Apache.Ignite.Core.Impl;
+    using Apache.Ignite.Service;
+
+    /// <summary>
+    /// Runner class.
+    /// </summary>
+    public class IgniteRunner
+    {
+        /** Help commands. */
+        private static readonly IList<string> Help = new List<string> { "/help", "-help", "--help" };
+
+        /** Argument meaning that this is service call. */
+        internal static readonly string Svc = "/service";
+
+        /** Service install command. */
+        internal static readonly string SvcInstall = "/install";
+
+        /** Service uninstall command. */
+        internal static readonly string SvcUninstall = "/uninstall";
+
+        /// <summary>
+        /// Application entry point.
+        /// </summary>
+        internal static void Main(string[] args)
+        {
+            IgniteConfiguration cfg;
+
+            bool svc = false;
+            bool install = false;
+
+            try
+            {
+                // Check for special cases.
+                if (args.Length > 0)
+                {
+                    string first = args[0].ToLower();
+
+                    if (Help.Contains(first))
+                    {
+                        PrintHelp();
+
+                        return;
+                    }
+                    
+                    if (Svc.Equals(first))
+                    {
+                        args = RemoveFirstArg(args);
+
+                        svc = true;
+                    }
+
+                    else if (SvcInstall.Equals(first))
+                    {
+                        args = RemoveFirstArg(args);
+
+                        install = true;
+                    }
+                    else if (SvcUninstall.Equals(first))
+                    {
+                        IgniteService.Uninstall();
+
+                        return;
+                    }
+                }
+
+                if (!svc)
+                {
+                    // Pick application configuration.
+                    cfg = new IgniteConfiguration();
+
+                    new AppSettingsConfigurator().Configure(cfg, ConfigurationManager.AppSettings);
+
+                    // Pick command line arguments.
+                    new ArgsConfigurator().Configure(cfg, args);
+
+                    if (install)
+                        IgniteService.DoInstall(cfg);
+                    else
+                    {
+                        Ignition.Start(cfg);
+
+                        IgniteManager.DestroyJvm();
+                    }
+
+                    return;
+                }
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine("ERROR: " + e.Message);
+
+                Environment.Exit(-1);
+            }
+
+            // If we are here, then this is a service call.
+            cfg = new IgniteConfiguration();
+
+            // Use only arguments, not app.config.
+            new ArgsConfigurator().Configure(cfg, args);
+
+            ServiceBase.Run(new IgniteService(cfg));
+        }
+
+        /// <summary>
+        /// Prints help.
+        /// </summary>
+        private static void PrintHelp()
+        {
+            Console.WriteLine("Usage: Apache.Ignite.exe [/install] [/uninstall] [-options]");
+            Console.WriteLine("");
+            Console.WriteLine("\t/install [-options]    installs Ignite Windows service with provided options");
+            Console.WriteLine("\t/uninstall             uninstalls Ignite Windows service");
+            Console.WriteLine("");
+            Console.WriteLine("Options:");
+            Console.WriteLine("\t-IgniteHome            path to Ignite installation directory (if not provided IGNITE_HOME environment variable is used)");
+            Console.WriteLine("\t-springConfigUrl       path to spring configuration file (if not provided \"config/default-config.xml\" is used)");
+            Console.WriteLine("\t-jvmDllPath            path to JVM library jvm.dll (if not provided JAVA_HOME environment variable is used)");
+            Console.WriteLine("\t-jvmClasspath          classpath passed to JVM (enlist additional jar files here)");
+            Console.WriteLine("\t-suppressWarnings      wether to print warnings");
+            Console.WriteLine("\t-J<javaOption>         JVM options passed to created JVM");
+            Console.WriteLine("\t-assembly=userLib.dll  additional .Net assemblies");
+            Console.WriteLine("\t-jvmInitialMemoryMB    Initial Java heap size, in megabytes. Maps to -Xms Java parameter. Defaults to 512.");
+            Console.WriteLine("\t-jvmMaxMemoryMB        Maximum Java heap size, in megabytes. Maps to -Xmx Java parameter. Defaults to 1024.");
+            Console.WriteLine("");
+            Console.WriteLine("Examples:");
+            Console.WriteLine("\tApache.Ignite.exe -J-Xms1024m -J-Xmx1024m -springConfigUrl=C:/woer/gg-test/my-test-gg-confignative.xml");
+            Console.WriteLine("\tApache.Ignite.exe -IgniteHome=c:/apache-ignite -jvmClasspath=libs/myLib1.jar;libs/myLib2.jar");
+            Console.WriteLine("\tApache.Ignite.exe -assembly=c:/myProject/libs/lib1.dll -assembly=c:/myProject/libs/lib2.dll");
+            Console.WriteLine("\tApache.Ignite.exe -jvmInitialMemoryMB=1024 -jvmMaxMemoryMB=4096");
+            Console.WriteLine("");
+            Console.WriteLine("Note:");
+            Console.WriteLine("Command line settings have priority over Apache.Ignite.exe.config settings. JVM options and assemblies are concatenated; data from config file comes first, then data from command line.");
+        }
+
+        /// <summary>
+        /// Remove the first argument.
+        /// </summary>
+        /// <param name="args">Arguments.</param>
+        /// <returns>New arguments.</returns>
+        private static string[] RemoveFirstArg(string[] args)
+        {
+            return args.Skip(1).ToArray();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/Properties/AssemblyInfo.cs b/modules/platform/dotnet/Apache.Ignite/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..03f7fb9
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+/*
+ * 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.Reflection;
+using System.Runtime.InteropServices;
+
+[assembly: AssemblyTitle("Apache.Ignite")]
+[assembly: AssemblyDescription("Apache Ignite .NET Executable")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Apache Software Foundation")]
+[assembly: AssemblyProduct("Apache Ignite")]
+[assembly: AssemblyCopyright("Copyright ©  2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+[assembly: ComVisible(false)]
+
+[assembly: Guid("0f9702ec-da7d-4ce5-b4b7-73310c885355")]
+
+[assembly: AssemblyVersion("1.5.0")]
+[assembly: AssemblyFileVersion("1.5.0")]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/Service/IgniteService.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/Service/IgniteService.cs b/modules/platform/dotnet/Apache.Ignite/Service/IgniteService.cs
new file mode 100644
index 0000000..a818171
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/Service/IgniteService.cs
@@ -0,0 +1,219 @@
+/*
+ * 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.Service
+{
+    using System;
+    using System.ComponentModel;
+    using System.IO;
+    using System.Linq;
+    using System.Reflection;
+    using System.Runtime.InteropServices;
+    using System.ServiceProcess;
+    using System.Text;
+    using Apache.Ignite.Config;
+    using Apache.Ignite.Core;
+    using Apache.Ignite.Core.Common;
+
+    /// <summary>
+    /// Ignite windows service.
+    /// </summary>
+    internal class IgniteService : ServiceBase
+    {
+        /** Service name. */
+        internal static readonly string SvcName = "Apache Ignite";
+
+        /** Service display name. */
+        internal static readonly string SvcDisplayName = "Apache Ignite .NET " + 
+            Assembly.GetExecutingAssembly().GetName().Version.ToString(4);
+
+        /** Service description. */
+        internal static readonly string SvcDesc = "Apache Ignite .Net Service.";
+
+        /** Current executable name. */
+        internal static readonly string ExeName =
+            new FileInfo(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath).FullName;
+
+        /** Current executable fully qualified name. */
+        internal static readonly string FullExeName = Path.GetFileName(FullExeName);
+
+        /** Ignite configuration to start with. */
+        private readonly IgniteConfiguration _cfg;
+
+        /// <summary>
+        /// Constructor.
+        /// </summary>
+        public IgniteService(IgniteConfiguration cfg)
+        {
+            AutoLog = true;
+            CanStop = true;
+            ServiceName = SvcName;
+
+            _cfg = cfg;
+        }
+
+        /** <inheritDoc /> */
+        protected override void OnStart(string[] args)
+        {
+            Ignition.Start(_cfg);
+        }
+
+        /** <inheritDoc /> */
+        protected override void OnStop()
+        {
+            Ignition.StopAll(true);
+        }
+
+        /// <summary>
+        /// Install service programmatically.
+        /// </summary>
+        /// <param name="cfg">Ignite configuration.</param>
+        internal static void DoInstall(IgniteConfiguration cfg)
+        {
+            // 1. Check if already defined.
+            if (ServiceController.GetServices().Any(svc => SvcName.Equals(svc.ServiceName)))
+            {
+                throw new IgniteException("Ignite service is already installed (uninstall it using \"" +
+                                          ExeName + " " + IgniteRunner.SvcUninstall + "\" first)");
+            }
+
+            // 2. Create startup arguments.
+            var args = ArgsConfigurator.ToArgs(cfg);
+
+            if (args.Length > 0)
+            {
+                Console.WriteLine("Installing \"" + SvcName + "\" service with the following startup " +
+                    "arguments:");
+
+                foreach (var arg in args)
+                    Console.WriteLine("\t" + arg);
+            }
+            else
+                Console.WriteLine("Installing \"" + SvcName + "\" service ...");
+
+            // 3. Actual installation.
+            Install0(args);
+
+            Console.WriteLine("\"" + SvcName + "\" service installed successfully.");
+        }
+
+        /// <summary>
+        /// Uninstall service programmatically.
+        /// </summary>
+        internal static void Uninstall()
+        {
+            var svc = ServiceController.GetServices().FirstOrDefault(x => SvcName == x.ServiceName);
+
+            if (svc == null)
+            {
+                Console.WriteLine("\"" + SvcName + "\" service is not installed.");
+            }
+            else if (svc.Status != ServiceControllerStatus.Stopped)
+            {
+                throw new IgniteException("Ignite service is running, please stop it first.");
+            }
+            else
+            {
+                Console.WriteLine("Uninstalling \"" + SvcName + "\" service ...");
+
+                Uninstall0();
+
+                Console.WriteLine("\"" + SvcName + "\" service uninstalled successfully.");
+            }
+        }
+
+        /// <summary>
+        /// Native service installation.
+        /// </summary>
+        /// <param name="args">Arguments.</param>
+        private static void Install0(string[] args)
+        {
+            // 1. Prepare arguments.
+            var binPath = new StringBuilder(FullExeName).Append(" ").Append(IgniteRunner.Svc);
+
+            foreach (var arg in args)
+                binPath.Append(" ").Append(arg);
+
+            // 2. Get SC manager.
+            var scMgr = OpenServiceControlManager();
+
+            // 3. Create service.
+            var svc = NativeMethods.CreateService(
+                scMgr,
+                SvcName,
+                SvcDisplayName,
+                983551, // Access constant. 
+                0x10,   // Service type SERVICE_WIN32_OWN_PROCESS.
+                0x2,    // Start type SERVICE_AUTO_START.
+                0x2,    // Error control SERVICE_ERROR_SEVERE.
+                binPath.ToString(),
+                null,
+                IntPtr.Zero,
+                null,
+                null,   // Use priviliged LocalSystem account.
+                null
+            );
+
+            if (svc == IntPtr.Zero)
+                throw new IgniteException("Failed to create the service.", new Win32Exception());
+
+            // 4. Set description.
+            var desc = new ServiceDescription {desc = Marshal.StringToHGlobalUni(SvcDesc)};
+
+
+            try 
+            {
+                if (!NativeMethods.ChangeServiceConfig2(svc, 1u, ref desc)) 
+                    throw new IgniteException("Failed to set service description.", new Win32Exception());
+            }
+            finally 
+            {
+                Marshal.FreeHGlobal(desc.desc);
+            }
+        }
+
+        /// <summary>
+        /// Native service uninstallation.
+        /// </summary>
+        private static void Uninstall0()
+        {
+            var scMgr = OpenServiceControlManager();
+
+            var svc = NativeMethods.OpenService(scMgr, SvcName, 65536);
+
+            if (svc == IntPtr.Zero)
+                throw new IgniteException("Failed to uninstall the service.", new Win32Exception());
+
+            NativeMethods.DeleteService(svc);
+        }
+
+        /// <summary>
+        /// Opens SC manager.
+        /// </summary>
+        /// <returns>SC manager pointer.</returns>
+        private static IntPtr OpenServiceControlManager()
+        {
+            var ptr = NativeMethods.OpenSCManager(null, null, 983103);
+
+            if (ptr == IntPtr.Zero)
+                throw new IgniteException("Failed to initialize Service Control manager " +
+                                          "(did you run the command as administrator?)", new Win32Exception());
+
+            return ptr;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/Service/NativeMethods.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/Service/NativeMethods.cs b/modules/platform/dotnet/Apache.Ignite/Service/NativeMethods.cs
new file mode 100644
index 0000000..56ab15d
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/Service/NativeMethods.cs
@@ -0,0 +1,57 @@
+/*
+ * 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.Service
+{
+    using System;
+    using System.Runtime.InteropServices;
+
+    /// <summary>
+    /// Native methods.
+    /// </summary>
+    internal class NativeMethods
+    {
+        [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
+        public static extern IntPtr OpenSCManager(string machineName, string dbName, int access);
+
+        [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
+        public static extern IntPtr CreateService(
+            IntPtr db,
+            string svcName,
+            string displayName,
+            int access,
+            int svcType,
+            int startType,
+            int errControl,
+            string binPath,
+            string loadOrderGrp,
+            IntPtr pTagId,
+            string dependencies,
+            string servicesStartName,
+            string pwd
+            );
+
+        [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
+        public static extern IntPtr OpenService(IntPtr db, string svcName, int access);
+
+        [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
+        public static extern bool DeleteService(IntPtr svc);
+
+        [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
+        public static extern bool ChangeServiceConfig2(IntPtr svc,  uint infoLevel, ref ServiceDescription desc);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite/Service/ServiceDescription.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite/Service/ServiceDescription.cs b/modules/platform/dotnet/Apache.Ignite/Service/ServiceDescription.cs
new file mode 100644
index 0000000..a81a737
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite/Service/ServiceDescription.cs
@@ -0,0 +1,32 @@
+/*
+ * 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.Service
+{
+    using System;
+    using System.Runtime.InteropServices;
+
+    /// <summary>
+    /// Service description structure.
+    /// </summary>
+    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
+    public struct ServiceDescription
+    {
+        /** Pointer to description. */
+        public IntPtr desc;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Apache.Ignite_x86.slnrel
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite_x86.slnrel b/modules/platform/dotnet/Apache.Ignite_x86.slnrel
new file mode 100644
index 0000000..a85e118
--- /dev/null
+++ b/modules/platform/dotnet/Apache.Ignite_x86.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|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
+		{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/Examples/Apache.Ignite.Examples.sln
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Examples/Apache.Ignite.Examples.sln b/modules/platform/dotnet/Examples/Apache.Ignite.Examples.sln
new file mode 100644
index 0000000..c1337f3
--- /dev/null
+++ b/modules/platform/dotnet/Examples/Apache.Ignite.Examples.sln
@@ -0,0 +1,72 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.31101.0
+MinimumVisualStudioVersion = 10.0.40219.1
+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\common\project\vs\common.vcxproj", "{4F7E4917-4612-4B96-9838-025711ADE391}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Examples", "Apache.Ignite.Examples\Apache.Ignite.Examples.csproj", "{069FA680-3C4D-43A9-B84F-E67513B87827}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.ExamplesDll", "Apache.Ignite.ExamplesDll\Apache.Ignite.ExamplesDll.csproj", "{DFB08363-202E-412D-8812-349EF10A8702}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Config", "Config", "{F1491682-C798-4C23-8239-16C5BC2C5A02}"
+	ProjectSection(SolutionItems) = preProject
+		Config\example-cache-query.xml = Config\example-cache-query.xml
+		Config\example-cache-store.xml = Config\example-cache-store.xml
+		Config\example-cache.xml = Config\example-cache.xml
+		Config\example-compute.xml = Config\example-compute.xml
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite", "..\Apache.Ignite\Apache.Ignite.csproj", "{27F7F3C6-BDDE-43A9-B565-856F8395A04B}"
+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
+		{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
+		{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|x86.ActiveCfg = Debug|x86
+		{DFB08363-202E-412D-8812-349EF10A8702}.Release|x64.ActiveCfg = Release|x64
+		{DFB08363-202E-412D-8812-349EF10A8702}.Release|x86.ActiveCfg = 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
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Examples/Apache.Ignite.Examples.slnrel
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Examples/Apache.Ignite.Examples.slnrel b/modules/platform/dotnet/Examples/Apache.Ignite.Examples.slnrel
new file mode 100644
index 0000000..d898abc
--- /dev/null
+++ b/modules/platform/dotnet/Examples/Apache.Ignite.Examples.slnrel
@@ -0,0 +1,38 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Examples", "Apache.Ignite.Examples\Apache.Ignite.Examples.csproj", "{069FA680-3C4D-43A9-B84F-E67513B87827}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.ExamplesDll", "Apache.Ignite.ExamplesDll\Apache.Ignite.ExamplesDll.csproj", "{DFB08363-202E-412D-8812-349EF10A8702}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Config", "Config", "{F1491682-C798-4C23-8239-16C5BC2C5A02}"
+	ProjectSection(SolutionItems) = preProject
+		Config\example-cache-query.xml = Config\example-cache-query.xml
+		Config\example-cache-store.xml = Config\example-cache-store.xml
+		Config\example-cache.xml = Config\example-cache.xml
+		Config\example-compute.xml = Config\example-compute.xml
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{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|x86.ActiveCfg = Debug|x86
+		{DFB08363-202E-412D-8812-349EF10A8702}.Release|x64.ActiveCfg = Release|x64
+		{DFB08363-202E-412D-8812-349EF10A8702}.Release|x86.ActiveCfg = Release|x86
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj
new file mode 100644
index 0000000..8ee90d9
--- /dev/null
+++ b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj
@@ -0,0 +1,80 @@
+<?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>{069FA680-3C4D-43A9-B84F-E67513B87827}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Apache.Ignite.Examples</RootNamespace>
+    <AssemblyName>Apache.Ignite.Examples</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>
+    <StartupObject>Apache.Ignite.Examples.Compute.TaskExample</StartupObject>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Compute\ClosureExample.cs" />
+    <Compile Include="Compute\TaskExample.cs" />
+    <Compile Include="Datagrid\ContinuousQueryExample.cs" />
+    <Compile Include="Datagrid\CrossPlatformExample.cs" />
+    <Compile Include="Datagrid\DataStreamerExample.cs" />
+    <Compile Include="Datagrid\PutGetExample.cs" />
+    <Compile Include="Datagrid\QueryExample.cs" />
+    <Compile Include="Datagrid\StoreExample.cs" />
+    <Compile Include="Datagrid\TransactionExample.cs" />
+    <Compile Include="Events\EventsExample.cs" />
+    <Compile Include="Messaging\MessagingExample.cs" />
+    <Compile Include="Misc\LifecycleExample.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Services\IMapService.cs" />
+    <Compile Include="Services\ServicesExample.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>
+    <ProjectReference Include="..\Apache.Ignite.ExamplesDll\Apache.Ignite.ExamplesDll.csproj">
+      <Project>{dfb08363-202e-412d-8812-349ef10a8702}</Project>
+      <Name>Apache.Ignite.ExamplesDll</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <ItemGroup />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- 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/Examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csprojrel
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csprojrel b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csprojrel
new file mode 100644
index 0000000..ff13ddc
--- /dev/null
+++ b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csprojrel
@@ -0,0 +1,79 @@
+<?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>{069FA680-3C4D-43A9-B84F-E67513B87827}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Apache.Ignite.Examples</RootNamespace>
+    <AssemblyName>Apache.Ignite.Examples</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>
+    <StartupObject>Apache.Ignite.Examples.Compute.TaskExample</StartupObject>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Apache.Ignite.Core">
+      <HintPath>..\..\Apache.Ignite\bin\$(Platform)\$(Configuration)\Apache.Ignite.Core.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Compute\ClosureExample.cs" />
+    <Compile Include="Compute\TaskExample.cs" />
+    <Compile Include="Datagrid\ContinuousQueryExample.cs" />
+    <Compile Include="Datagrid\CrossPlatformExample.cs" />
+    <Compile Include="Datagrid\DataStreamerExample.cs" />
+    <Compile Include="Datagrid\PutGetExample.cs" />
+    <Compile Include="Datagrid\QueryExample.cs" />
+    <Compile Include="Datagrid\StoreExample.cs" />
+    <Compile Include="Datagrid\TransactionExample.cs" />
+    <Compile Include="Events\EventsExample.cs" />
+    <Compile Include="Messaging\MessagingExample.cs" />
+    <Compile Include="Misc\LifecycleExample.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Services\IMapService.cs" />
+    <Compile Include="Services\ServicesExample.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Apache.Ignite.ExamplesDll\Apache.Ignite.ExamplesDll.csproj">
+      <Project>{dfb08363-202e-412d-8812-349ef10a8702}</Project>
+      <Name>Apache.Ignite.ExamplesDll</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <ItemGroup />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- 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/Examples/Apache.Ignite.Examples/App.config
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Examples/Apache.Ignite.Examples/App.config b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/App.config
new file mode 100644
index 0000000..8e69aeb
--- /dev/null
+++ b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/App.config
@@ -0,0 +1,24 @@
+<?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.
+-->
+
+<configuration>
+  <runtime>
+    <gcServer enabled="true" />
+  </runtime>
+</configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Compute/ClosureExample.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Compute/ClosureExample.cs b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Compute/ClosureExample.cs
new file mode 100644
index 0000000..7d0128d
--- /dev/null
+++ b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Compute/ClosureExample.cs
@@ -0,0 +1,84 @@
+/*
+ * 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;
+using System.Collections.Generic;
+using System.Linq;
+using Apache.Ignite.Core;
+using Apache.Ignite.ExamplesDll.Compute;
+
+namespace Apache.Ignite.Examples.Compute
+{
+    /// <summary>
+    /// Example demonstrating closure execution.
+    /// <para />
+    /// 1) Build the project Apache.Ignite.ExamplesDll (select it -> right-click -> Build).
+    ///    Apache.Ignite.ExamplesDll.dll must appear in %IGNITE_HOME%/platforms/dotnet/Examples/Apache.Ignite.ExamplesDll/bin/${Platform]/${Configuration} folder.
+    /// 2) Set this class as startup object (Apache.Ignite.Examples project -> right-click -> Properties ->
+    ///     Application -> Startup object);
+    /// 3) Start example (F5 or Ctrl+F5).
+    /// <para />
+    /// This example can be run with standalone Apache Ignite .Net node:
+    /// 1) Run %IGNITE_HOME%/platforms/dotnet/Apache.Ignite/bin/${Platform]/${Configuration}/Apache.Ignite.exe:
+    /// Apache.Ignite.exe -IgniteHome="%IGNITE_HOME%" -springConfigUrl=platforms\dotnet\examples\config\example-compute.xml -assembly=[path_to_Apache.Ignite.ExamplesDll.dll]
+    /// 2) Start example.
+    /// </summary>
+    public class ClosureExample
+    {
+        /// <summary>
+        /// Runs the example.
+        /// </summary>
+        [STAThread]
+        public static void Main()
+        {
+            var cfg = new IgniteConfiguration
+            {
+                SpringConfigUrl = @"platforms\dotnet\examples\config\example-compute.xml",
+                JvmOptions = new List<string> { "-Xms512m", "-Xmx1024m" }
+            };
+            
+            using (var ignite = Ignition.Start(cfg))
+            {
+                Console.WriteLine();
+                Console.WriteLine(">>> Closure execution example started.");
+
+                // Split the string by spaces to count letters in each word in parallel.
+                ICollection<string> words = "Count characters using closure".Split().ToList();
+
+                Console.WriteLine();
+                Console.WriteLine(">>> Calculating character count with manual reducing:");
+
+                var res = ignite.GetCompute().Apply(new CharacterCountClosure(), words);
+
+                int totalLen = res.Sum();
+
+                Console.WriteLine(">>> Total character count: " + totalLen);
+                Console.WriteLine();
+                Console.WriteLine(">>> Calculating character count with reducer:");
+
+                totalLen = ignite.GetCompute().Apply(new CharacterCountClosure(), words, new CharacterCountReducer());
+
+                Console.WriteLine(">>> Total character count: " + totalLen);
+                Console.WriteLine();
+            }
+
+            Console.WriteLine();
+            Console.WriteLine(">>> Example finished, press any key to exit ...");
+            Console.ReadKey();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Compute/TaskExample.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Compute/TaskExample.cs b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Compute/TaskExample.cs
new file mode 100644
index 0000000..47fee9e
--- /dev/null
+++ b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Compute/TaskExample.cs
@@ -0,0 +1,140 @@
+/*
+ * 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;
+using System.Collections.Generic;
+using Apache.Ignite.Core;
+using Apache.Ignite.ExamplesDll.Compute;
+using Apache.Ignite.ExamplesDll.Portable;
+
+namespace Apache.Ignite.Examples.Compute
+{
+    /// <summary>
+    /// Example demonstrating task execution.
+    /// <para />
+    /// 1) Build the project Apache.Ignite.ExamplesDll (select it -> right-click -> Build).
+    ///    Apache.Ignite.ExamplesDll.dll must appear in %IGNITE_HOME%/platforms/dotnet/Examples/Apache.Ignite.ExamplesDll/bin/${Platform]/${Configuration} folder.
+    /// 2) Set this class as startup object (Apache.Ignite.Examples project -> right-click -> Properties ->
+    ///     Application -> Startup object);
+    /// 3) Start example (F5 or Ctrl+F5).
+    /// <para />
+    /// This example can be run with standalone Apache Ignite .Net node:
+    /// 1) Run %IGNITE_HOME%/platforms/dotnet/Apache.Ignite/bin/${Platform]/${Configuration}/Apache.Ignite.exe:
+    /// Apache.Ignite.exe -IgniteHome="%IGNITE_HOME%" -springConfigUrl=platforms\dotnet\examples\config\example-compute.xml -assembly=[path_to_Apache.Ignite.ExamplesDll.dll]
+    /// 2) Start example.
+    /// </summary>
+    public class TaskExample
+    {
+        /// <summary>
+        /// Runs the example.
+        /// </summary>
+        [STAThread]
+        public static void Main()
+        {
+            var cfg = new IgniteConfiguration
+            {
+                SpringConfigUrl = @"platforms\dotnet\examples\config\example-compute.xml",
+                JvmOptions = new List<string> { "-Xms512m", "-Xmx1024m" }
+            };
+
+            using (var ignite = Ignition.Start(cfg))
+            {
+                Console.WriteLine();
+                Console.WriteLine(">>> Task execution example started.");
+
+                // Generate employees to calculate average salary for.
+                ICollection<Employee> employees = Employees();
+
+                Console.WriteLine();
+                Console.WriteLine(">>> Calculating average salary for employees:");
+
+                foreach (Employee employee in employees)
+                    Console.WriteLine(">>>     " + employee);
+
+                // Execute task and get average salary.
+                var avgSalary = ignite.GetCompute().Execute(new AverageSalaryTask(), employees);
+
+                Console.WriteLine();
+                Console.WriteLine(">>> Average salary for all employees: " + avgSalary);
+                Console.WriteLine();
+            }
+
+            Console.WriteLine();
+            Console.WriteLine(">>> Example finished, press any key to exit ...");
+            Console.ReadKey();
+        }
+
+        /// <summary>
+        /// Generates collection of employees for example.
+        /// </summary>
+        /// <returns>Collection of employees.</returns>
+        private static ICollection<Employee> Employees()
+        {
+            return new []
+            {
+                new Employee(
+                    "James Wilson",
+                    12500,
+                    new Address("1096 Eddy Street, San Francisco, CA", 94109),
+                    new List<string> {"Human Resources", "Customer Service"}
+                    ),
+                new Employee(
+                    "Daniel Adams",
+                    11000,
+                    new Address("184 Fidler Drive, San Antonio, TX", 78205),
+                    new List<string> {"Development", "QA"}
+                    ),
+                new Employee(
+                    "Cristian Moss",
+                    12500,
+                    new Address("667 Jerry Dove Drive, Florence, SC", 29501),
+                    new List<string> {"Logistics"}
+                    ),
+                new Employee(
+                    "Allison Mathis",
+                    25300,
+                    new Address("2702 Freedom Lane, Hornitos, CA", 95325),
+                    new List<string> {"Development"}
+                    ),
+                new Employee(
+                    "Breana Robbin",
+                    6500,
+                    new Address("3960 Sundown Lane, Austin, TX", 78758),
+                    new List<string> {"Sales"}
+                    ),
+                new Employee(
+                    "Philip Horsley",
+                    19800,
+                    new Address("2803 Elsie Drive, Sioux Falls, SD", 57104),
+                    new List<string> {"Sales"}
+                    ),
+                new Employee(
+                    "Brian Peters",
+                    10600,
+                    new Address("1407 Pearlman Avenue, Boston, MA", 02110),
+                    new List<string> {"Development", "QA"}
+                    ),
+                new Employee(
+                    "Jack Yang",
+                    12900,
+                    new Address("4425 Parrish Avenue Smithsons Valley, TX", 78130),
+                    new List<string> {"Sales"}
+                    )
+            };
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/ContinuousQueryExample.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/ContinuousQueryExample.cs b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/ContinuousQueryExample.cs
new file mode 100644
index 0000000..c61b45d
--- /dev/null
+++ b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/ContinuousQueryExample.cs
@@ -0,0 +1,103 @@
+/*
+ * 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;
+using System.Collections.Generic;
+using System.Threading;
+using Apache.Ignite.Core;
+using Apache.Ignite.Core.Cache.Event;
+using Apache.Ignite.Core.Cache.Query.Continuous;
+using Apache.Ignite.ExamplesDll.Datagrid;
+
+namespace Apache.Ignite.Examples.Datagrid
+{
+    /// <summary>
+    /// This example demonstrates continuous query API.
+    /// <para />
+    /// 1) Build the project Apache.Ignite.ExamplesDll (select it -> right-click -> Build).
+    ///    Apache.Ignite.ExamplesDll.dll must appear in %IGNITE_HOME%/platforms/dotnet/Examples/Apache.Ignite.ExamplesDll/bin/${Platform]/${Configuration} folder.
+    /// 2) Set this class as startup object (Apache.Ignite.Examples project -> right-click -> Properties ->
+    ///     Application -> Startup object);
+    /// 3) Start example (F5 or Ctrl+F5).
+    /// <para />
+    /// This example can be run with standalone Apache Ignite .Net node:
+    /// 1) Run %IGNITE_HOME%/platforms/dotnet/Apache.Ignite/bin/${Platform]/${Configuration}/Apache.Ignite.exe:
+    /// Apache.Ignite.exe -IgniteHome="%IGNITE_HOME%" -springConfigUrl=platforms\dotnet\examples\config\example-cache.xml -assembly=[path_to_Apache.Ignite.ExamplesDll.dll]
+    /// 2) Start example.
+    /// </summary>
+    public class ContinuousQueryExample
+    {
+        /// <summary>
+        /// Runs the example.
+        /// </summary>
+        [STAThread]
+        public static void Main()
+        {
+            var cfg = new IgniteConfiguration
+            {
+                SpringConfigUrl = @"platforms\dotnet\examples\config\example-cache.xml",
+                JvmOptions = new List<string> {"-Xms512m", "-Xmx1024m"}
+            };
+
+            using (var ignite = Ignition.Start(cfg))
+            {
+                Console.WriteLine();
+                Console.WriteLine(">>> Cache continuous query example started.");
+
+                var cache = ignite.GetOrCreateCache<int, string>("cache_continuous_query");
+
+                // Clean up caches on all nodes before run.
+                cache.Clear();
+
+                const int keyCnt = 20;
+
+                for (int i = 0; i < keyCnt; i++)
+                    cache.Put(i, i.ToString());
+
+                var qry = new ContinuousQuery<int, string>(new Listener<string>(), new ContinuousQueryFilter(15));
+
+
+                // Create new continuous query.
+                using (cache.QueryContinuous(qry))
+                {
+                    // Add a few more keys and watch more query notifications.
+                    for (var i = keyCnt; i < keyCnt + 5; i++)
+                        cache.Put(i, i.ToString());
+
+                    // Wait for a while while callback is notified about remaining puts.
+                    Thread.Sleep(2000);
+                }
+            }
+
+            Console.WriteLine();
+            Console.WriteLine(">>> Example finished, press any key to exit ...");
+            Console.ReadKey();
+        }
+
+        /// <summary>
+        /// Callback for continuous query example.
+        /// </summary>
+        private class Listener<T> : ICacheEntryEventListener<int, T>
+        {
+            public void OnEvent(IEnumerable<ICacheEntryEvent<int, T>> events)
+            {
+                foreach (var e in events)
+                    Console.WriteLine("Queried entry [key=" + e.Key + ", val=" + e.Value + ']');
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/CrossPlatformExample.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/CrossPlatformExample.cs b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/CrossPlatformExample.cs
new file mode 100644
index 0000000..e23d615
--- /dev/null
+++ b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/CrossPlatformExample.cs
@@ -0,0 +1,208 @@
+/*
+ * 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;
+using System.Collections.Generic;
+using Apache.Ignite.Core;
+using Apache.Ignite.Core.Portable;
+using Apache.Ignite.ExamplesDll.Portable;
+
+namespace Apache.Ignite.Examples.Datagrid
+{
+    /// <summary>
+    /// This example demonstrates use of portable objects between different platforms.
+    /// <para/>
+    /// This example must be run with standalone Java node. To achieve this start a node from %IGNITE_HOME%
+    /// using "ignite.bat" with proper configuration:
+    /// <example>'bin\ignite.bat examples\config\example-server.xml'</example>.
+    /// <para />
+    /// Once remote node is started, launch this example as follows:
+    /// 1) Build the project Apache.Ignite.ExamplesDll (select it -> right-click -> Build);
+    /// 2) Set this class as startup object (Apache.Ignite.Examples project -> right-click -> Properties -> 
+    ///     Application -> Startup object); 
+    /// 3) Start application (F5 or Ctrl+F5).
+    /// <para />
+    /// To see how objects can be transferred between platforms, start cross-platform Java example 
+    /// without restarting remote node.
+    /// </summary>
+    public class CrossPlatformExample
+    {
+        /// <summary>Key for Java object.</summary>
+        private const int KeyJava = 100;
+
+        /// <summary>Key for .Net object.</summary>
+        private const int KeyDotnet = 200;
+
+        /// <summary>Key for C++ object.</summary>
+        private const int KeyCpp = 300;
+
+        /// <summary>Cache Name.</summary>
+        private const string CacheName = "cacheCrossPlatform";
+
+        /// <summary>
+        /// Runs the example.
+        /// </summary>
+        [STAThread]
+        public static void Main()
+        {
+            var cfg = new IgniteConfiguration
+            {
+                SpringConfigUrl = @"platforms\dotnet\examples\config\example-cache.xml",
+                JvmOptions = new List<string> { "-Xms512m", "-Xmx1024m" }
+            };
+
+            using (var ignite = Ignition.Start(cfg))
+            {
+                Console.WriteLine();
+                Console.WriteLine(">>> Cross-platform example started.");
+
+                if (ignite.GetCluster().ForRemotes().GetNodes().Count == 0)
+                {
+                    Console.WriteLine();
+                    Console.WriteLine(">>> This example requires remote nodes to be started.");
+                    Console.WriteLine(">>> Please start at least 1 remote node.");
+                    Console.WriteLine(">>> Refer to example's documentation for details on configuration.");
+                    Console.WriteLine();
+                }
+                else
+                {
+                    var cache = ignite.GetOrCreateCache<int, Organization>(CacheName);
+
+                    // Create new Organization object to store in cache.
+                    Organization org = new Organization(
+                        "Apache",
+                        new Address("1065 East Hillsdale Blvd, Foster City, CA", 94404),
+                        OrganizationType.Private,
+                        DateTime.Now
+                    );
+
+                    // Put created data entry to cache.
+                    cache.Put(KeyDotnet, org);
+
+                    // Retrieve value stored by Java client.
+                    GetFromJava(ignite);
+
+                    // Retrieve value stored by C++ client.
+                    GetFromCpp(ignite);
+
+                    // Gets portable value from cache in portable format, without de-serializing it.
+                    GetDotNetPortableInstance(ignite);
+
+                    // Gets portable value form cache as a strongly-typed fully de-serialized instance.
+                    GetDotNetTypedInstance(ignite);
+
+                    Console.WriteLine();
+                }
+            }
+
+            Console.WriteLine();
+            Console.WriteLine(">>> Example finished, press any key to exit ...");
+            Console.ReadKey();
+        }
+
+        /// <summary>
+        /// Gets entry put by Java client. In order for entry to be in cache, Java client example
+        /// must be run before this example.
+        /// </summary>
+        /// <param name="Ignite">Ignite instance.</param>
+        private static void GetFromJava(IIgnite ignite)
+        {
+            var cache = ignite.GetOrCreateCache<int, IPortableObject>(CacheName)
+                .WithKeepPortable<int, IPortableObject>().WithAsync();
+
+            cache.Get(KeyJava);
+
+            var orgPortable = cache.GetFuture<IPortableObject>().ToTask().Result;
+
+            if (orgPortable == null)
+            {
+                Console.WriteLine(">>> Java client hasn't put entry to cache. Run Java example before this example " +
+                    "to see the output.");
+            }
+            else
+            {
+                Console.WriteLine(">>> Entry from Java client:");
+                Console.WriteLine(">>>     Portable:     " + orgPortable);
+                Console.WriteLine(">>>     Deserialized: " + orgPortable.Deserialize<Organization>());
+            }
+        }
+
+        /// <summary>
+        /// Gets entry put by C++ client. In order for entry to be in cache, C++ client example
+        /// must be run before this example.
+        /// </summary>
+        /// <param name="ignite">Ignite instance.</param>
+        private static void GetFromCpp(IIgnite ignite)
+        {
+            var cache = ignite.GetOrCreateCache<int, IPortableObject>(CacheName)
+                .WithKeepPortable<int, IPortableObject>().WithAsync();
+
+            cache.Get(KeyCpp);
+
+            var orgPortable = cache.GetFuture<IPortableObject>().Get();
+
+            Console.WriteLine();
+
+            if (orgPortable == null)
+            {
+                Console.WriteLine(">>> CPP client hasn't put entry to cache. Run CPP example before this example " +
+                    "to see the output.");
+            }
+            else
+            {
+                Console.WriteLine(">>> Entry from CPP client:");
+                Console.WriteLine(">>>     Portable:     " + orgPortable);
+                Console.WriteLine(">>>     Deserialized: " + orgPortable.Deserialize<Organization>());
+            }
+        }
+
+        /// <summary>
+        /// Gets portable value from cache in portable format, without de-serializing it.
+        /// </summary>
+        /// <param name="ignite">Ignite instance.</param>
+        private static void GetDotNetPortableInstance(IIgnite ignite)
+        {
+            // Apply "KeepPortable" flag on data projection.
+            var cache = ignite.GetOrCreateCache<int, IPortableObject>(CacheName)
+                .WithKeepPortable<int, IPortableObject>();
+
+            var org = cache.Get(KeyDotnet);
+
+            string name = org.GetField<string>("name");
+
+            Console.WriteLine();
+            Console.WriteLine(">>> Retrieved organization name from portable field: " + name);
+        }
+
+        /// <summary>
+        /// Gets portable value form cache as a strongly-typed fully de-serialized instance.
+        /// </summary>
+        /// <param name="ignite">Ignite instance.</param>
+        private static void GetDotNetTypedInstance(IIgnite ignite)
+        {
+            var cache = ignite.GetOrCreateCache<int, Organization>(CacheName);
+
+            // Get recently created employee as a strongly-typed fully de-serialized instance.
+            Organization emp = cache.Get(KeyDotnet);
+
+            string name = emp.Name;
+
+            Console.WriteLine();
+            Console.WriteLine(">>> Retrieved organization name from deserialized Organization instance: " + name);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/DataStreamerExample.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/DataStreamerExample.cs b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/DataStreamerExample.cs
new file mode 100644
index 0000000..ee9e200
--- /dev/null
+++ b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/DataStreamerExample.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.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using Apache.Ignite.Core;
+using Apache.Ignite.Core.Datastream;
+using Apache.Ignite.ExamplesDll.Portable;
+
+namespace Apache.Ignite.Examples.Datagrid
+{
+    /// <summary>
+    /// Demonstrates how cache can be populated with data utilizing <see cref="IDataStreamer{TK,TV}"/>.
+    /// Data streamer is a lot more efficient to use than standard cache put operation 
+    /// as it properly buffers cache requests together and properly manages load on remote nodes.
+    /// <para />
+    /// 1) Build the project Apache.Ignite.ExamplesDll (select it -> right-click -> Build).
+    ///    Apache.Ignite.ExamplesDll.dll must appear in %IGNITE_HOME%/platforms/dotnet/Examples/Apache.Ignite.ExamplesDll/bin/${Platform]/${Configuration} folder.
+    /// 2) Set this class as startup object (Apache.Ignite.Examples project -> right-click -> Properties ->
+    ///     Application -> Startup object);
+    /// 3) Start example (F5 or Ctrl+F5).
+    /// <para />
+    /// This example can be run with standalone Apache Ignite .Net node:
+    /// 1) Run %IGNITE_HOME%/platforms/dotnet/Apache.Ignite/bin/${Platform]/${Configuration}/Apache.Ignite.exe:
+    /// Apache.Ignite.exe -IgniteHome="%IGNITE_HOME%" -springConfigUrl=platforms\dotnet\examples\config\example-cache.xml -assembly=[path_to_Apache.Ignite.ExamplesDll.dll]
+    /// 2) Start example.
+    /// </summary>
+    public class DataStreamerExample
+    {
+        /// <summary>Number of entries to load.</summary>
+        private const int EntryCount = 500000;
+
+        /// <summary>Cache name.</summary>
+        private const string CacheName = "cache_data_streamer";
+
+        /// <summary>
+        /// Runs the example.
+        /// </summary>
+        [STAThread]
+        public static void Main()
+        {
+            var cfg = new IgniteConfiguration
+            {
+                SpringConfigUrl = @"platforms\dotnet\examples\config\example-cache.xml",
+                JvmOptions = new List<string> {"-Xms512m", "-Xmx1024m"}
+            };
+
+            using (var ignite = Ignition.Start(cfg))
+            {
+                Console.WriteLine();
+                Console.WriteLine(">>> Cache data streamer example started.");
+
+                // Clean up caches on all nodes before run.
+                ignite.GetOrCreateCache<int, Account>(CacheName).Clear();
+
+                Stopwatch timer = new Stopwatch();
+
+                timer.Start();
+
+                using (var ldr = ignite.GetDataStreamer<int, Account>(CacheName))
+                {
+                    ldr.PerNodeBufferSize = 1024;
+
+                    for (int i = 0; i < EntryCount; i++)
+                    {
+                        ldr.AddData(i, new Account(i, i));
+
+                        // Print out progress while loading cache.
+                        if (i > 0 && i % 10000 == 0)
+                            Console.WriteLine("Loaded " + i + " accounts.");
+                    }
+                }
+
+                timer.Stop();
+
+                long dur = timer.ElapsedMilliseconds;
+
+                Console.WriteLine(">>> Loaded " + EntryCount + " accounts in " + dur + "ms.");
+            }
+
+            Console.WriteLine();
+            Console.WriteLine(">>> Example finished, press any key to exit ...");
+            Console.ReadKey();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2eb16cd/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/PutGetExample.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/PutGetExample.cs b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/PutGetExample.cs
new file mode 100644
index 0000000..c1146f1
--- /dev/null
+++ b/modules/platform/dotnet/Examples/Apache.Ignite.Examples/Datagrid/PutGetExample.cs
@@ -0,0 +1,219 @@
+/*
+ * 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;
+using System.Collections.Generic;
+using Apache.Ignite.Core;
+using Apache.Ignite.Core.Portable;
+using Apache.Ignite.ExamplesDll.Portable;
+
+namespace Apache.Ignite.Examples.Datagrid
+{
+    /// <summary>
+    /// This example demonstrates several put-get operations on Ignite cache
+    /// with portable values. Note that portable object can be retrieved in
+    /// fully-deserialized form or in portable object format using special
+    /// cache projection.
+    /// <para />
+    /// 1) Build the project Apache.Ignite.ExamplesDll (select it -> right-click -> Build).
+    ///    Apache.Ignite.ExamplesDll.dll must appear in %IGNITE_HOME%/platforms/dotnet/Examples/Apache.Ignite.ExamplesDll/bin/${Platform]/${Configuration} folder.
+    /// 2) Set this class as startup object (Apache.Ignite.Examples project -> right-click -> Properties ->
+    ///     Application -> Startup object);
+    /// 3) Start example (F5 or Ctrl+F5).
+    /// <para />
+    /// This example can be run with standalone Apache Ignite .Net node:
+    /// 1) Run %IGNITE_HOME%/platforms/dotnet/Apache.Ignite/bin/${Platform]/${Configuration}/Apache.Ignite.exe:
+    /// Apache.Ignite.exe -IgniteHome="%IGNITE_HOME%" -springConfigUrl=platforms\dotnet\examples\config\example-cache.xml -assembly=[path_to_Apache.Ignite.ExamplesDll.dll]
+    /// 2) Start example.
+    /// </summary>
+    public class PutGetExample
+    {
+        /// <summary>Cache name.</summary>
+        private const string CacheName = "cache_put_get";
+
+        /// <summary>
+        /// Runs the example.
+        /// </summary>
+        [STAThread]
+        public static void Main()
+        {
+            var cfg = new IgniteConfiguration
+            {
+                SpringConfigUrl = @"platforms\dotnet\examples\config\example-cache.xml",
+                JvmOptions = new List<string> { "-Xms512m", "-Xmx1024m" }
+            };
+
+            using (var ignite = Ignition.Start(cfg))
+            {
+                Console.WriteLine();
+                Console.WriteLine(">>> Cache put-get example started.");
+
+                // Clean up caches on all nodes before run.
+                ignite.GetOrCreateCache<object, object>(CacheName).Clear();
+
+                PutGet(ignite);
+                PutGetPortable(ignite);
+                PutAllGetAll(ignite);
+                PutAllGetAllPortable(ignite);
+
+                Console.WriteLine();
+            }
+
+            Console.WriteLine();
+            Console.WriteLine(">>> Example finished, press any key to exit ...");
+            Console.ReadKey();
+        }
+
+        /// <summary>
+        /// Execute individual Put and Get.
+        /// </summary>
+        /// <param name="ignite">Ignite instance.</param>
+        private static void PutGet(IIgnite ignite)
+        {
+            var cache = ignite.GetCache<int, Organization>(CacheName);
+
+            // Create new Organization to store in cache.
+            Organization org = new Organization(
+                "Microsoft",
+                new Address("1096 Eddy Street, San Francisco, CA", 94109),
+                OrganizationType.Private,
+                DateTime.Now
+            );
+
+            // Put created data entry to cache.
+            cache.Put(1, org);
+
+            // Get recently created employee as a strongly-typed fully de-serialized instance.
+            Organization orgFromCache = cache.Get(1);
+
+            Console.WriteLine();
+            Console.WriteLine(">>> Retrieved organization instance from cache: " + orgFromCache);
+        }
+
+        /// <summary>
+        /// Execute individual Put and Get, getting value in portable format, without de-serializing it.
+        /// </summary>
+        /// <param name="ignite">Ignite instance.</param>
+        private static void PutGetPortable(IIgnite ignite)
+        {
+            var cache = ignite.GetCache<int, Organization>(CacheName);
+
+            // Create new Organization to store in cache.
+            Organization org = new Organization(
+                "Microsoft",
+                new Address("1096 Eddy Street, San Francisco, CA", 94109),
+                OrganizationType.Private,
+                DateTime.Now
+            );
+
+            // Put created data entry to cache.
+            cache.Put(1, org);
+
+            // Create projection that will get values as portable objects.
+            var portableCache = cache.WithKeepPortable<int, IPortableObject>();
+
+            // Get recently created organization as a portable object.
+            var portableOrg = portableCache.Get(1);
+
+            // Get organization's name from portable object (note that  object doesn't need to be fully deserialized).
+            string name = portableOrg.GetField<string>("name");
+
+            Console.WriteLine();
+            Console.WriteLine(">>> Retrieved organization name from portable object: " + name);
+        }
+
+        /// <summary>
+        /// Execute bulk Put and Get operations.
+        /// </summary>
+        /// <param name="ignite">Ignite instance.</param>
+        private static void PutAllGetAll(IIgnite ignite)
+        {
+            var cache = ignite.GetCache<int, Organization>(CacheName);
+
+            // Create new Organizations to store in cache.
+            Organization org1 = new Organization(
+                "Microsoft",
+                new Address("1096 Eddy Street, San Francisco, CA", 94109),
+                OrganizationType.Private,
+                DateTime.Now
+            );
+
+            Organization org2 = new Organization(
+                "Red Cross",
+                new Address("184 Fidler Drive, San Antonio, TX", 78205),
+                OrganizationType.NonProfit,
+                DateTime.Now
+            );
+
+            var map = new Dictionary<int, Organization> { { 1, org1 }, { 2, org2 } };
+
+            // Put created data entries to cache.
+            cache.PutAll(map);
+
+            // Get recently created organizations as a strongly-typed fully de-serialized instances.
+            IDictionary<int, Organization> mapFromCache = cache.GetAll(new List<int> { 1, 2 });
+
+            Console.WriteLine();
+            Console.WriteLine(">>> Retrieved organization instances from cache:");
+
+            foreach (Organization org in mapFromCache.Values)
+                Console.WriteLine(">>>     " + org);
+        }
+
+        /// <summary>
+        /// Execute bulk Put and Get operations getting values in portable format, without de-serializing it.
+        /// </summary>
+        /// <param name="ignite">Ignite instance.</param>
+        private static void PutAllGetAllPortable(IIgnite ignite)
+        {
+            var cache = ignite.GetCache<int, Organization>(CacheName);
+
+            // Create new Organizations to store in cache.
+            Organization org1 = new Organization(
+                "Microsoft",
+                new Address("1096 Eddy Street, San Francisco, CA", 94109),
+                OrganizationType.Private,
+                DateTime.Now
+            );
+
+            Organization org2 = new Organization(
+                "Red Cross",
+                new Address("184 Fidler Drive, San Antonio, TX", 78205),
+                OrganizationType.NonProfit,
+                DateTime.Now
+            );
+
+            var map = new Dictionary<int, Organization> { { 1, org1 }, { 2, org2 } };
+
+            // Put created data entries to cache.
+            cache.PutAll(map);
+
+            // Create projection that will get values as portable objects.
+            var portableCache = cache.WithKeepPortable<int, IPortableObject>();
+
+            // Get recently created organizations as portable objects.
+            IDictionary<int, IPortableObject> portableMap =
+                portableCache.GetAll(new List<int> { 1, 2 });
+
+            Console.WriteLine();
+            Console.WriteLine(">>> Retrieved organization names from portable objects:");
+
+            foreach (IPortableObject poratbleOrg in portableMap.Values)
+                Console.WriteLine(">>>     " + poratbleOrg.GetField<string>("name"));
+        }
+    }
+}


Mime
View raw message