Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.DataAccess/PluginDescription.cs
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.DataAccess/PluginDescription.cs	(revision 2770)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.DataAccess/PluginDescription.cs	(revision 2771)
@@ -34,6 +34,6 @@
 
     [DataMember(Name = "Dependencies")]
-    private IEnumerable<PluginDescription> dependencies;
-    public IEnumerable<PluginDescription> Dependencies {
+    private List<PluginDescription> dependencies;
+    public List<PluginDescription> Dependencies {
       get { return dependencies; }
     }
@@ -51,5 +51,5 @@
       this.name = name;
       this.version = version;
-      this.dependencies = new List<PluginDescription>(dependencies).AsReadOnly();
+      this.dependencies = new List<PluginDescription>(dependencies); //.AsReadOnly();
       //this.isDatabaseInstance = true;
     }
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.DataAccess/PluginStore.cs
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.DataAccess/PluginStore.cs	(revision 2770)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.DataAccess/PluginStore.cs	(revision 2771)
@@ -10,95 +10,88 @@
   public class PluginStore {
 
-    private PluginStoreClassesDataContext ctx;
     public PluginStore() {
-      ctx = new PluginStoreClassesDataContext();
-    }
-
+    }
+
+    #region context creating members
     public IEnumerable<ProductDescription> Products {
       get {
-        return from p in ctx.Products
-               let plugins = from pair in ctx.ProductPlugins
-                             from plugin in ctx.Plugins
-                             where pair.ProductId == p.Id
-                             where plugin.Id == pair.PluginId
-                             select plugin
-               select MakeProductDescription(p, plugins);
-      }
-    }
-
-    private ProductDescription MakeProductDescription(Product p, IQueryable<Plugin> plugins) {
-      var desc = new ProductDescription(p.Id, p.Name, new Version(p.Version), from plugin in plugins
-                                                                              select MakePluginDescription(plugin));
-      return desc;
-    }
-
-    private PluginDescription MakePluginDescription(Plugin plugin) {
-      var desc = new PluginDescription(plugin.Id, plugin.Name, new Version(plugin.Version), from dep in GetDependencies(plugin)
-                                                                                            select MakePluginDescription(dep));
-      return desc;
-    }
-
-    private IEnumerable<Plugin> GetDependencies(Plugin plugin) {
-      return from pair in ctx.Dependencies
-             from dependency in ctx.Plugins
-             where pair.PluginId == plugin.Id
-             where pair.DependencyId == dependency.Id
-             select dependency;
+        using (var ctx = new PluginStoreClassesDataContext()) {
+          return (from p in ctx.Products
+                  let plugins = from pair in ctx.ProductPlugins
+                                from plugin in ctx.Plugins
+                                where pair.ProductId == p.Id
+                                where plugin.Id == pair.PluginId
+                                select plugin
+                  select MakeProductDescription(ctx, p, plugins)).ToList();
+        }
+      }
     }
 
     public IEnumerable<PluginDescription> Plugins {
       get {
-        return from plugin in ctx.Plugins
-               select MakePluginDescription(plugin);
+        using (var ctx = new PluginStoreClassesDataContext()) {
+          return (from plugin in ctx.Plugins
+                  select MakePluginDescription(ctx, plugin)).ToList();
+        }
       }
     }
 
     public byte[] PluginFile(PluginDescription pluginDescription) {
-      return GetExistingPlugin(pluginDescription.Name, pluginDescription.Version).PluginPackage.Data.ToArray();
+      using (var ctx = new PluginStoreClassesDataContext()) {
+        return GetExistingPlugin(ctx, pluginDescription.Name, pluginDescription.Version).PluginPackage.Data.ToArray();
+      }
     }
 
     public void Persist(PluginDescription pluginDescription, byte[] pluginPackage) {
-      try {
-        using (var transaction = new TransactionScope()) {
-          Plugin pluginEntity = InsertOrUpdatePlugin(pluginDescription);
-          if (pluginEntity.PluginPackage == null) {
-            // insert
-            pluginEntity.PluginPackage = MakePluginPackage(pluginDescription, pluginPackage);
-          } else {
-            // update
-            pluginEntity.PluginPackage.Data = pluginPackage;
+      using (var ctx = new PluginStoreClassesDataContext()) {
+        try {
+          using (var transaction = new TransactionScope()) {
+            Plugin pluginEntity = InsertOrUpdatePlugin(ctx, pluginDescription);
+            if (pluginEntity.PluginPackage == null) {
+              // insert
+              pluginEntity.PluginPackage = MakePluginPackage(pluginDescription, pluginPackage);
+            } else {
+              // update
+              pluginEntity.PluginPackage.Data = pluginPackage;
+            }
+            ctx.SubmitChanges();
+            transaction.Complete();
           }
-          ctx.SubmitChanges();
-          transaction.Complete();
-        }
-      }
-      catch (SqlException ex) {
-        throw new ArgumentException("Something went wrong while trying to persist plugin", ex);
-      }
-      catch (InvalidOperationException ex) {
-        throw new ArgumentException("Something went wrong while trying to persist plugin", ex);
+        }
+        catch (SqlException ex) {
+          throw new ArgumentException("Something went wrong while trying to persist plugin", ex);
+        }
+        catch (InvalidOperationException ex) {
+          throw new ArgumentException("Something went wrong while trying to persist plugin", ex);
+        }
       }
     }
 
     public void Persist(ProductDescription product) {
-      try {
-        using (var transaction = new TransactionScope()) {
-          InsertOrUpdateProduct(product);
-          foreach (var plugin in product.Plugins) {
-            InsertOrUpdatePlugin(plugin);
+      using (var ctx = new PluginStoreClassesDataContext()) {
+        try {
+          using (var transaction = new TransactionScope()) {
+            foreach (var plugin in product.Plugins) {
+              var pluginEntity = GetExistingPlugin(ctx, plugin.Name, plugin.Version);
+              UpdatePlugin(ctx, pluginEntity, plugin);
+            }
+            InsertOrUpdateProduct(ctx, product);
+            ctx.SubmitChanges();
+            transaction.Complete();
           }
-          ctx.SubmitChanges();
-          transaction.Complete();
-        }
-      }
-      catch (SqlException ex) {
-        throw new ArgumentException("Something went wrong while trying to persist product", ex);
-      }
-      catch (InvalidOperationException ex) {
-        throw new ArgumentException("Something went wrong while trying to persist product", ex);
-      }
-    }
-
-    private void InsertOrUpdateProduct(ProductDescription product) {
+        }
+        catch (SqlException ex) {
+          throw new ArgumentException("Something went wrong while trying to persist product", ex);
+        }
+        catch (InvalidOperationException ex) {
+          throw new ArgumentException("Something went wrong while trying to persist product", ex);
+        }
+      }
+    }
+
+    #endregion
+
+    #region insert/update product
+    private void InsertOrUpdateProduct(PluginStoreClassesDataContext ctx, ProductDescription product) {
       var productEntity = (from p in ctx.Products
                            where p.Name == product.Name
@@ -113,8 +106,8 @@
       product.Id = productEntity.Id;
 
-      DeleteOldPlugins(productEntity);
+      DeleteOldPlugins(ctx, productEntity);
 
       foreach (var plugin in product.Plugins) {
-        var existingPlugin = GetExistingPlugin(plugin.Name, plugin.Version);
+        var existingPlugin = GetExistingPlugin(ctx, plugin.Name, plugin.Version);
         ProductPlugin prodPlugin = new ProductPlugin();
         prodPlugin.PluginId = existingPlugin.Id;
@@ -124,5 +117,5 @@
     }
 
-    private void DeleteOldPlugins(Product productEntity) {
+    private void DeleteOldPlugins(PluginStoreClassesDataContext ctx, Product productEntity) {
       var oldPlugins = (from p in ctx.ProductPlugins
                         where p.ProductId == productEntity.Id
@@ -131,6 +124,8 @@
       ctx.SubmitChanges();
     }
-
-    private Plugin InsertOrUpdatePlugin(PluginDescription pluginDescription) {
+    #endregion
+
+    #region insert/update plugins
+    private Plugin InsertOrUpdatePlugin(PluginStoreClassesDataContext ctx, PluginDescription pluginDescription) {
       var pluginEntity = (from p in ctx.Plugins
                           where p.Name == pluginDescription.Name
@@ -142,10 +137,19 @@
         ctx.SubmitChanges();
       }
+
+      UpdatePlugin(ctx, pluginEntity, pluginDescription);
+      return pluginEntity;
+    }
+
+    private void UpdatePlugin(PluginStoreClassesDataContext ctx, Plugin pluginEntity, PluginDescription pluginDescription) {
+      // delete cached entry
+      if (pluginDescriptions.ContainsKey(pluginEntity)) pluginDescriptions.Remove(pluginEntity);
+
       pluginDescription.Id = pluginEntity.Id;
 
-      DeleteOldDependencies(pluginEntity);
+      DeleteOldDependencies(ctx, pluginEntity);
 
       foreach (var dependency in pluginDescription.Dependencies) {
-        var dependencyEntity = GetExistingPlugin(dependency.Name, dependency.Version);
+        var dependencyEntity = GetExistingPlugin(ctx, dependency.Name, dependency.Version);
         Dependency d = new Dependency();
         d.PluginId = pluginDescription.Id;
@@ -153,9 +157,9 @@
         ctx.Dependencies.InsertOnSubmit(d);
       }
-      return pluginEntity;
-
-    }
-
-    private void DeleteOldDependencies(Plugin pluginEntity) {
+    }
+
+
+
+    private void DeleteOldDependencies(PluginStoreClassesDataContext ctx, Plugin pluginEntity) {
       var oldDependencies = (from dep in ctx.Dependencies
                              where dep.PluginId == pluginEntity.Id
@@ -165,10 +169,32 @@
       ctx.SubmitChanges();
     }
-
-    private Plugin GetExistingPlugin(string name, Version version) {
-      return (from p in ctx.Plugins
-              where p.Name == name
-              where p.Version == version.ToString()
-              select p).Single();
+    #endregion
+
+    #region product <-> productDescription transformation
+    private ProductDescription MakeProductDescription(PluginStoreClassesDataContext ctx, Product p, IQueryable<Plugin> plugins) {
+      var desc = new ProductDescription(p.Id, p.Name, new Version(p.Version), from plugin in plugins
+                                                                              select MakePluginDescription(ctx, plugin));
+      return desc;
+    }
+    private Product MakeProductFromDescription(ProductDescription desc) {
+      var product = new Product();
+      product.Id = desc.Id;
+      product.Name = desc.Name;
+      product.Version = desc.Version.ToString();
+      return product;
+    }
+    #endregion
+
+    #region plugin <-> pluginDescription transformation
+    // cache for plugin descriptions
+    private Dictionary<Plugin, PluginDescription> pluginDescriptions = new Dictionary<Plugin, PluginDescription>();
+    private PluginDescription MakePluginDescription(PluginStoreClassesDataContext ctx, Plugin plugin) {
+      if (!pluginDescriptions.ContainsKey(plugin)) {
+        // no cached description -> create new
+        var desc = new PluginDescription(plugin.Id, plugin.Name, new Version(plugin.Version), from dep in GetDependencies(ctx, plugin)
+                                                                                              select MakePluginDescription(ctx, dep));
+        pluginDescriptions[plugin] = desc;
+      }
+      return pluginDescriptions[plugin];
     }
 
@@ -181,12 +207,4 @@
     }
 
-    private Product MakeProductFromDescription(ProductDescription desc) {
-      var product = new Product();
-      product.Id = desc.Id;
-      product.Name = desc.Name;
-      product.Version = desc.Version.ToString();
-      return product;
-    }
-
     private PluginPackage MakePluginPackage(PluginDescription pluginDescription, byte[] pluginPackage) {
       var package = new PluginPackage();
@@ -196,4 +214,23 @@
       return package;
     }
+
+    #endregion
+
+    #region helper queries
+    private Plugin GetExistingPlugin(PluginStoreClassesDataContext ctx, string name, Version version) {
+      return (from p in ctx.Plugins
+              where p.Name == name
+              where p.Version == version.ToString()
+              select p).Single();
+    }
+
+    private IEnumerable<Plugin> GetDependencies(PluginStoreClassesDataContext ctx, Plugin plugin) {
+      return from pair in ctx.Dependencies
+             from dependency in ctx.Plugins
+             where pair.PluginId == plugin.Id
+             where pair.DependencyId == dependency.Id
+             select dependency;
+    }
+    #endregion
   }
 }
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/AdminTest.cs
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/AdminTest.cs	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/AdminTest.cs	(revision 2771)
@@ -0,0 +1,340 @@
+﻿using HeuristicLab.Services.Deployment;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using HeuristicLab.Services.Deployment.DataAccess;
+using System;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+using System.Diagnostics;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Services.Deployment.Test {
+
+
+  /// <summary>
+  ///This is a test class for AdminTest and is intended
+  ///to contain all AdminTest Unit Tests
+  ///</summary>
+  [TestClass()]
+  public class AdminTest {
+
+    private Encoding enc = new ASCIIEncoding();
+    private TestContext testContextInstance;
+
+    /// <summary>
+    ///Gets or sets the test context which provides
+    ///information about and functionality for the current test run.
+    ///</summary>
+    public TestContext TestContext {
+      get {
+        return testContextInstance;
+      }
+      set {
+        testContextInstance = value;
+      }
+    }
+
+    #region Additional test attributes
+    // 
+    //You can use the following additional attributes as you write your tests:
+    //
+    //Use ClassInitialize to run code before running the first test in the class
+    //[ClassInitialize()]
+    //public static void MyClassInitialize(TestContext testContext)
+    //{
+    //}
+    //
+    //Use ClassCleanup to run code after all tests in a class have run
+    //[ClassCleanup()]
+    //public static void MyClassCleanup()
+    //{
+    //}
+    //
+    //Use TestInitialize to run code before running each test
+    //[TestInitialize()]
+    //public void MyTestInitialize()
+    //{
+    //}
+    //
+    //Use TestCleanup to run code after each test has run
+    //[TestCleanup()]
+    //public void MyTestCleanup()
+    //{
+    //}
+    //
+    #endregion
+
+
+    /// <summary>
+    ///A test for StoreProduct
+    ///</summary>
+    [TestMethod()]
+    public void DeployProductTest() {
+      var target = new HeuristicLab.Services.Deployment.Test.AdminService.AdminClient();
+      var update = new HeuristicLab.Services.Deployment.Test.UpdateService.UpdateClient();
+      int oldCount = update.GetProducts().Count();
+
+      string prodName = RandomName();
+      Version vers01 = new Version("0.0.0.1");
+      ProductDescription product = new ProductDescription(prodName, vers01);
+      target.DeployProduct(product);
+
+      int newCount = update.GetProducts().Count();
+      Assert.AreEqual(oldCount + 1, newCount);
+    }
+
+    /// <summary>
+    ///A test for DeployPlugin
+    ///</summary>
+    [TestMethod()]
+    public void DeployPluginTest() {
+      var target = new HeuristicLab.Services.Deployment.Test.AdminService.AdminClient();
+      var update = new HeuristicLab.Services.Deployment.Test.UpdateService.UpdateClient();
+
+      var vers01 = new Version(0, 1);
+
+      #region persist single plugin without dependencies
+      {
+        string name = RandomName();
+        int oldCount = update.GetPlugins().Count();
+        PluginDescription pluginDescription = new PluginDescription(name, vers01);
+        byte[] pluginPackage = enc.GetBytes("Zipped " + name);
+        target.DeployPlugin(pluginDescription, pluginPackage);
+        int newCount = update.GetPlugins().Count();
+        Assert.AreEqual(oldCount + 1, newCount);
+      }
+      #endregion
+
+      #region persist a product with same name and version as an existent product
+      {
+        string name = RandomName();
+        int oldCount = update.GetPlugins().Count();
+        PluginDescription pluginDescription = new PluginDescription(name, vers01);
+        byte[] pluginPackage = enc.GetBytes("Zipped " + name);
+        target.DeployPlugin(pluginDescription, pluginPackage);
+        int newCount = update.GetPlugins().Count();
+        Assert.AreEqual(oldCount + 1, newCount);
+
+        // insert same name and version
+        oldCount = update.GetPlugins().Count();
+        pluginDescription = new PluginDescription(name, vers01);
+        pluginPackage = enc.GetBytes("Zipped " + name);
+        target.DeployPlugin(pluginDescription, pluginPackage);
+        newCount = update.GetPlugins().Count();
+        // make sure old entry was updated
+        Assert.AreEqual(oldCount, newCount);
+
+        // insert new with different version
+        oldCount = update.GetPlugins().Count();
+        pluginDescription = new PluginDescription(name, new Version(0, 2));
+        pluginPackage = enc.GetBytes("Zipped " + name);
+        target.DeployPlugin(pluginDescription, pluginPackage);
+        newCount = update.GetPlugins().Count();
+        // make sure a new entry was created
+        Assert.AreEqual(oldCount + 1, newCount);
+      }
+      #endregion
+
+      #region persist a plugin with an already persisted dependency
+      {
+        string name = RandomName();
+        PluginDescription dependency = new PluginDescription(name, vers01);
+        // insert dependency first
+        target.DeployPlugin(dependency, enc.GetBytes("Zipped " + name));
+
+        // persist another plugin that has a dependency on the first plugin
+        string name2 = RandomName();
+        int oldCount = update.GetPlugins().Count();
+
+        PluginDescription newEntity = new PluginDescription(name2, vers01, Enumerable.Repeat(dependency, 1));
+        byte[] newEntityPackage = enc.GetBytes("Zipped " + name2);
+        target.DeployPlugin(newEntity, newEntityPackage);
+        int newCount = update.GetPlugins().Count();
+        Assert.AreEqual(oldCount + 1, newCount); // only one new plugin should be added
+
+        // retrieve second plugin and check dependencies
+        newEntity = update.GetPlugins().Where(p => p.Name == name2).Single();
+        Assert.AreEqual(newEntity.Dependencies.Count(), 1);
+        Assert.AreEqual(newEntity.Dependencies.First().Name, name);
+      }
+      #endregion
+
+      #region try to persist a new  plugin with a non-existant dependency and check the expected exception
+      {
+        // try to persist a new plugin with a non-existant dependency
+        try {
+          string pluginName = RandomName();
+          string dependencyName = RandomName();
+          var dependency = new PluginDescription(dependencyName, vers01);
+          var newEntity = new PluginDescription(pluginName, vers01, Enumerable.Repeat(dependency, 1));
+          target.DeployPlugin(newEntity, enc.GetBytes("Zipped " + pluginName));
+          Assert.Fail("persist should fail with ArgumentException");
+        }
+        catch (FaultException e) {
+          // this is expected
+          Assert.IsTrue(true, "expected exception");
+
+          // reconnect service
+          target = new HeuristicLab.Services.Deployment.Test.AdminService.AdminClient();
+        }
+      }
+      #endregion
+
+      #region update the plugin file of an existing plugin
+      {
+        // insert new plugin
+        string pluginName = RandomName();
+        var newPlugin = new PluginDescription(pluginName, vers01);
+        target.DeployPlugin(newPlugin, enc.GetBytes("Zipped " + pluginName));
+
+        // update the plugin file
+        byte[] expected = enc.GetBytes("Zipped2 " + pluginName);
+        target.DeployPlugin(newPlugin, expected);
+        // check if the updated file is returned
+        byte[] actual = update.GetPlugin(newPlugin);
+        // check retrieved file
+        Assert.AreEqual(expected.Length, actual.Length);
+        for (int i = 0; i < expected.Length; i++) {
+          Assert.AreEqual(expected[i], actual[i]);
+        }
+      }
+      #endregion
+
+      #region update the dependencies of an existing plugin
+      {
+        string dependency1Name = RandomName();
+        var newDependency1 = new PluginDescription(dependency1Name, vers01);
+        target.DeployPlugin(newDependency1, enc.GetBytes("Zipped " + dependency1Name));
+
+        string pluginName = RandomName();
+        var newPlugin = new PluginDescription(pluginName, vers01, Enumerable.Repeat(newDependency1, 1));
+        target.DeployPlugin(newPlugin, enc.GetBytes("Zipped " + pluginName));
+
+        // retrieve plugin
+        var dbPlugin = update.GetPlugins().Where(p => p.Name == pluginName).Single();
+        Assert.AreEqual(dbPlugin.Dependencies.Count(), 1);
+        Assert.AreEqual(dbPlugin.Dependencies.First().Name, dependency1Name);
+
+        // change dependencies 
+        string dependency2Name = RandomName();
+        var newDependency2 = new PluginDescription(dependency2Name, vers01);
+        target.DeployPlugin(newDependency2, enc.GetBytes("Zipped " + pluginName));
+
+        newPlugin = new PluginDescription(pluginName, vers01, new PluginDescription[] { newDependency1, newDependency2 });
+        target.DeployPlugin(newPlugin, enc.GetBytes("Zipped " + pluginName));
+        // retrieve plugin
+        dbPlugin = update.GetPlugins().Where(p => p.Name == pluginName).Single();
+        Assert.AreEqual(dbPlugin.Dependencies.Count(), 2);
+      }
+      #endregion
+
+      #region try to insert a plugin that references the same dependency twice and check if the correct exception is thrown
+      {
+        string depName = RandomName();
+        var depPlugin = new PluginDescription(depName, vers01);
+        target.DeployPlugin(depPlugin, enc.GetBytes("Zipped " + depName));
+
+        // insert new plugin
+        string pluginName = RandomName();
+        var plugin = new PluginDescription(pluginName, vers01, new PluginDescription[] { depPlugin, depPlugin });
+        try {
+          target.DeployPlugin(plugin, enc.GetBytes("Zipped " + depName));
+          Assert.Fail("Expected ArgumentException");
+        }
+        catch (FaultException) {
+          Assert.IsTrue(true, "Exception thrown as expected");
+          // reconnect
+          target = new HeuristicLab.Services.Deployment.Test.AdminService.AdminClient();
+        }
+      }
+      #endregion
+
+      #region try to insert a plugin that with a cyclic reference
+      {
+        string depName = RandomName();
+        var depPlugin = new PluginDescription(depName, vers01);
+        target.DeployPlugin(depPlugin, enc.GetBytes("Zipped " + depName));
+
+        // update the plugin so that it has a dependency on itself 
+        var plugin = new PluginDescription(depName, vers01, new PluginDescription[] { depPlugin });
+        try {
+          target.DeployPlugin(plugin, enc.GetBytes("Zipped " + depName));
+          Assert.Fail("Expected ArgumentException");
+        }
+        catch (FaultException) {
+          target = new HeuristicLab.Services.Deployment.Test.AdminService.AdminClient();
+          Assert.IsTrue(true, "Exception thrown as expected");
+        }
+      }
+      #endregion
+    }
+
+    [TestMethod]
+    public void DeployPluginPerformanceTest() {
+      int nPlugins = 100;
+      int maxDependencies = 10;
+      int avgZipFileLength = 32000;
+
+      var adminClient = new HeuristicLab.Services.Deployment.Test.AdminService.AdminClient();
+      var updateClient = new HeuristicLab.Services.Deployment.Test.UpdateService.UpdateClient();
+      Version vers01 = new Version(0, 1);
+      // create a random byte array to represent file length
+      byte[] zippedConstant = new byte[avgZipFileLength];
+      Random r = new Random();
+      r.NextBytes(zippedConstant);
+
+      Stopwatch stopWatch = new Stopwatch();
+      stopWatch.Start();
+      // create plugins
+      for (int i = 0; i < nPlugins; i++) {
+        string name = RandomName();
+        var allPlugins = updateClient.GetPlugins();
+        if (allPlugins.Length > maxDependencies) {
+          PluginDescription[] dependencies = new PluginDescription[maxDependencies];
+          for (int j = 0; j < maxDependencies; j++) {
+            dependencies[j] = allPlugins[j];
+          }
+          var plugin = new PluginDescription(name, vers01, dependencies);
+          adminClient.DeployPlugin(plugin, zippedConstant);
+        } else {
+          var plugin = new PluginDescription(name, vers01, allPlugins);
+          adminClient.DeployPlugin(plugin, zippedConstant);
+        }
+      }
+      stopWatch.Stop();
+      Assert.Inconclusive("Created " + nPlugins + " plugins in " + stopWatch.ElapsedMilliseconds +
+        " ms (" + (double)stopWatch.ElapsedMilliseconds / nPlugins + " ms / plugin )");
+    }
+    [TestMethod]
+    public void DeployProductPerformanceTest() {
+      int nProducts = 50;
+      int avgProductPlugins = 30;
+
+      var adminClient = new HeuristicLab.Services.Deployment.Test.AdminService.AdminClient();
+      var updateClient = new HeuristicLab.Services.Deployment.Test.UpdateService.UpdateClient();
+      Version vers01 = new Version(0, 1);
+      Stopwatch stopWatch = new Stopwatch();
+      Random r = new Random();
+      var plugins = updateClient.GetPlugins().ToList();
+      stopWatch.Start();
+      // create products
+      for (int i = 0; i < nProducts; i++) {
+        string name = RandomName();
+        List<PluginDescription> prodPlugins = new List<PluginDescription>();
+        for (int j = 0; j < avgProductPlugins; j++) {
+          var selectedPlugin = plugins[r.Next(0, plugins.Count)];
+          if (!prodPlugins.Contains(selectedPlugin)) prodPlugins.Add(selectedPlugin);
+        }
+        var prod = new ProductDescription(name, vers01, prodPlugins);
+        adminClient.DeployProduct(prod);
+      }
+      stopWatch.Stop();
+      Assert.Inconclusive("Created " + nProducts + " products in " + stopWatch.ElapsedMilliseconds +
+        " ms (" + (double)stopWatch.ElapsedMilliseconds / nProducts + " ms / product )");
+    }
+
+    private string RandomName() {
+      return Guid.NewGuid().ToString();
+    }
+  }
+}
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/HeuristicLab.Services.Deployment.Test.csproj
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/HeuristicLab.Services.Deployment.Test.csproj	(revision 2770)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/HeuristicLab.Services.Deployment.Test.csproj	(revision 2771)
@@ -47,4 +47,7 @@
       <RequiredTargetFramework>3.0</RequiredTargetFramework>
     </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
     <Reference Include="System.Xml" />
     <Reference Include="System.Xml.Linq">
@@ -53,9 +56,32 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="AdminTest.cs" />
     <Compile Include="PluginStoreTest.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Service References\AdminService\Reference.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </Compile>
+    <Compile Include="Service References\UpdateService\Reference.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </Compile>
   </ItemGroup>
   <ItemGroup>
     <Content Include="AuthoringTests.txt" />
+    <None Include="Service References\AdminService\Reference.svcmap">
+      <Generator>WCF Proxy Generator</Generator>
+      <LastGenOutput>Reference.cs</LastGenOutput>
+    </None>
+    <None Include="Service References\AdminService\configuration.svcinfo" />
+    <None Include="Service References\AdminService\configuration91.svcinfo" />
+    <None Include="Service References\UpdateService\Reference.svcmap">
+      <Generator>WCF Proxy Generator</Generator>
+      <LastGenOutput>Reference.cs</LastGenOutput>
+    </None>
+    <None Include="Service References\UpdateService\configuration.svcinfo" />
+    <None Include="Service References\UpdateService\configuration91.svcinfo" />
   </ItemGroup>
   <ItemGroup>
@@ -64,4 +90,30 @@
       <Name>HeuristicLab.Services.Deployment.DataAccess</Name>
     </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Services.Deployment\HeuristicLab.Services.Deployment.csproj">
+      <Project>{30D8C5F1-CD3A-4EC1-907F-430177A03FBE}</Project>
+      <Name>HeuristicLab.Services.Deployment</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Service References\" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="Properties\DataSources\HeuristicLab.Services.Deployment.DataAccess.PluginDescription.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Services.Deployment.DataAccess.ProductDescription.datasource" />
+    <None Include="Service References\AdminService\HeuristicLab.Services.Deployment.DataAccess.xsd" />
+    <None Include="Service References\AdminService\service.wsdl" />
+    <None Include="Service References\AdminService\service.xsd" />
+    <None Include="Service References\AdminService\service1.xsd" />
+    <None Include="Service References\AdminService\System.xsd" />
+    <None Include="Service References\UpdateService\HeuristicLab.Services.Deployment.DataAccess.xsd" />
+    <None Include="Service References\UpdateService\service.wsdl" />
+    <None Include="Service References\UpdateService\service.xsd" />
+    <None Include="Service References\UpdateService\service1.xsd" />
+    <None Include="Service References\UpdateService\System.xsd" />
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadataStorage Include="Service References\AdminService\" />
+    <WCFMetadataStorage Include="Service References\UpdateService\" />
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/PluginStoreTest.cs
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/PluginStoreTest.cs	(revision 2770)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/PluginStoreTest.cs	(revision 2771)
@@ -72,5 +72,5 @@
       int oldCount = target.Plugins.Count();
       // store a new entry in the db
-      string name = Guid.NewGuid().ToString();
+      string name = RandomName();
       target.Persist(new PluginDescription(name, new Version(0, 1)), enc.GetBytes("Zipped " + name));
       int newCount = target.Plugins.Count();
@@ -100,5 +100,5 @@
       #region persist single plugin without dependencies
       {
-        string name = Guid.NewGuid().ToString();
+        string name = RandomName();
         int oldCount = target.Plugins.Count();
         PluginDescription pluginDescription = new PluginDescription(name, vers01);
@@ -112,5 +112,5 @@
       #region persist a product with same name and version as an existent product
       {
-        string name = Guid.NewGuid().ToString();
+        string name = RandomName();
         int oldCount = target.Plugins.Count();
         PluginDescription pluginDescription = new PluginDescription(name, vers01);
@@ -142,5 +142,5 @@
       #region persist a plugin with an already persisted dependency
       {
-        string name = Guid.NewGuid().ToString();
+        string name = RandomName();
         PluginDescription dependency = new PluginDescription(name, vers01);
         // insert dependency first
@@ -148,5 +148,5 @@
 
         // persist another plugin that has a dependency on the first plugin
-        string name2 = Guid.NewGuid().ToString();
+        string name2 = RandomName();
         int oldCount = target.Plugins.Count();
 
@@ -168,6 +168,6 @@
         // try to persist a new plugin with a non-existant dependency
         try {
-          string pluginName = Guid.NewGuid().ToString();
-          string dependencyName = Guid.NewGuid().ToString();
+          string pluginName = RandomName();
+          string dependencyName = RandomName();
           var dependency = new PluginDescription(dependencyName, vers01);
           var newEntity = new PluginDescription(pluginName, vers01, Enumerable.Repeat(dependency, 1));
@@ -185,5 +185,5 @@
       {
         // insert new plugin
-        string pluginName = Guid.NewGuid().ToString();
+        string pluginName = RandomName();
         var newPlugin = new PluginDescription(pluginName, vers01);
         target.Persist(newPlugin, enc.GetBytes("Zipped " + pluginName));
@@ -204,9 +204,9 @@
       #region update the dependencies of an existing plugin
       {
-        string dependency1Name = Guid.NewGuid().ToString();
+        string dependency1Name = RandomName();
         var newDependency1 = new PluginDescription(dependency1Name, vers01);
         target.Persist(newDependency1, enc.GetBytes("Zipped " + dependency1Name));
 
-        string pluginName = Guid.NewGuid().ToString();
+        string pluginName = RandomName();
         var newPlugin = new PluginDescription(pluginName, vers01, Enumerable.Repeat(newDependency1, 1));
         target.Persist(newPlugin, enc.GetBytes("Zipped " + pluginName));
@@ -218,5 +218,5 @@
 
         // change dependencies 
-        string dependency2Name = Guid.NewGuid().ToString();
+        string dependency2Name = RandomName();
         var newDependency2 = new PluginDescription(dependency2Name, vers01);
         target.Persist(newDependency2, enc.GetBytes("Zipped " + pluginName));
@@ -232,10 +232,10 @@
       #region try to insert a plugin that references the same dependency twice and check if the correct exception is thrown
       {
-        string depName = Guid.NewGuid().ToString();
+        string depName = RandomName();
         var depPlugin = new PluginDescription(depName, vers01);
         target.Persist(depPlugin, enc.GetBytes("Zipped " + depName));
 
         // insert new plugin
-        string pluginName = Guid.NewGuid().ToString();
+        string pluginName = RandomName();
         var plugin = new PluginDescription(pluginName, vers01, new PluginDescription[] { depPlugin, depPlugin });
         try {
@@ -248,4 +248,23 @@
       }
       #endregion
+
+      #region try to insert a plugin that with a cyclic reference
+      {
+        string depName = RandomName();
+        var depPlugin = new PluginDescription(depName, vers01);
+        target.Persist(depPlugin, enc.GetBytes("Zipped " + depName));
+
+        // update the plugin so that it has a dependency on itself 
+        var plugin = new PluginDescription(depName, vers01, new PluginDescription[] { depPlugin });
+        try {
+          target.Persist(plugin, enc.GetBytes("Zipped " + depName));
+          Assert.Fail("Expected ArgumentException");
+        }
+        catch (ArgumentException) {
+          Assert.IsTrue(true, "Exception thrown as expected");
+        }
+      }
+      #endregion
+
     }
 
@@ -260,5 +279,5 @@
       #region persist a product without plugins to the db
       {
-        string prodName = Guid.NewGuid().ToString();
+        string prodName = RandomName();
         int oldCount = target.Products.Count();
         ProductDescription product = new ProductDescription(prodName, vers01);
@@ -271,5 +290,5 @@
       #region persist a product with the same name and version as an existant product
       {
-        string prodName = Guid.NewGuid().ToString();
+        string prodName = RandomName();
         int oldCount = target.Products.Count();
         ProductDescription product = new ProductDescription(prodName, vers01);
@@ -300,7 +319,7 @@
       #region try to persist a product referencing an non-existant plugin and check the expected exception
       {
-        // try to persist a product referencing an non-existant plugin
-        string prodName = Guid.NewGuid().ToString();
-        string pluginName = Guid.NewGuid().ToString();
+        // try to persist a product referencing a non-existant plugin
+        string prodName = RandomName();
+        string pluginName = RandomName();
         var plugin = new PluginDescription(pluginName, vers01);
         var product = new ProductDescription(prodName, vers01, Enumerable.Repeat(plugin, 1));
@@ -318,6 +337,6 @@
       #region persist a product with a single plugin reference
       {
-        string prodName = Guid.NewGuid().ToString();
-        string pluginName = Guid.NewGuid().ToString();
+        string prodName = RandomName();
+        string pluginName = RandomName();
         var plugin = new PluginDescription(pluginName, vers01);
         var product = new ProductDescription(prodName, vers01, Enumerable.Repeat(plugin, 1));
@@ -339,6 +358,6 @@
       #region update the plugin list of an existing product
       {
-        string prodName = Guid.NewGuid().ToString();
-        string plugin1Name = Guid.NewGuid().ToString();
+        string prodName = RandomName();
+        string plugin1Name = RandomName();
         var plugin1 = new PluginDescription(plugin1Name, vers01);
         var product = new ProductDescription(prodName, vers01, Enumerable.Repeat(plugin1, 1));
@@ -352,5 +371,5 @@
         Assert.AreEqual(oldCount + 1, newCount);
 
-        var plugin2Name = Guid.NewGuid().ToString();
+        var plugin2Name = RandomName();
         var plugin2 = new PluginDescription(plugin2Name, vers01);
         target.Persist(plugin2, enc.GetBytes("Zipped " + plugin2.Name));
@@ -370,6 +389,6 @@
       #region insert a product which references the same plugin twice and check if the correct exception is thrown
       {
-        string prodName = Guid.NewGuid().ToString();
-        string plugin1Name = Guid.NewGuid().ToString();
+        string prodName = RandomName();
+        string plugin1Name = RandomName();
         var plugin1 = new PluginDescription(plugin1Name, vers01);
         var product = new ProductDescription(prodName, vers01, Enumerable.Repeat(plugin1, 2));
@@ -406,5 +425,5 @@
       List<PluginDescription> plugins = new List<PluginDescription>();
       for (int i = 0; i < nPlugins; i++) {
-        string name = Guid.NewGuid().ToString();
+        string name = RandomName();
         var dependencies = store.Plugins;
         if (dependencies.Count() > maxDependencies) dependencies = dependencies.Take(maxDependencies);
@@ -430,8 +449,9 @@
       // create products
       for (int i = 0; i < nProducts; i++) {
-        string name = Guid.NewGuid().ToString();
+        string name = RandomName();
         List<PluginDescription> prodPlugins = new List<PluginDescription>();
         for (int j = 0; j < avgProductPlugins; j++) {
-          prodPlugins.Add(plugins[r.Next(0, plugins.Count)]);
+          var selectedPlugin = plugins[r.Next(0, plugins.Count)];
+          if (!prodPlugins.Contains(selectedPlugin)) prodPlugins.Add(selectedPlugin);
         }
         var prod = new ProductDescription(name, vers01, prodPlugins);
@@ -442,4 +462,8 @@
         " ms (" + (double)stopWatch.ElapsedMilliseconds / nProducts + " ms / product )");
     }
+
+    private string RandomName() {
+      return Guid.NewGuid().ToString();
+    }
   }
 }
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Properties/DataSources/HeuristicLab.Services.Deployment.DataAccess.PluginDescription.datasource
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Properties/DataSources/HeuristicLab.Services.Deployment.DataAccess.PluginDescription.datasource	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Properties/DataSources/HeuristicLab.Services.Deployment.DataAccess.PluginDescription.datasource	(revision 2771)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="PluginDescription" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Services.Deployment.DataAccess.PluginDescription, HeuristicLab.Services.Deployment.DataAccess, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Properties/DataSources/HeuristicLab.Services.Deployment.DataAccess.ProductDescription.datasource
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Properties/DataSources/HeuristicLab.Services.Deployment.DataAccess.ProductDescription.datasource	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Properties/DataSources/HeuristicLab.Services.Deployment.DataAccess.ProductDescription.datasource	(revision 2771)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ProductDescription" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Services.Deployment.DataAccess.ProductDescription, HeuristicLab.Services.Deployment.DataAccess, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/HeuristicLab.Services.Deployment.DataAccess.xsd
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/HeuristicLab.Services.Deployment.DataAccess.xsd	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/HeuristicLab.Services.Deployment.DataAccess.xsd	(revision 2771)
@@ -0,0 +1,28 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Deployment.DataAccess" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Deployment.DataAccess" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/System" />
+  <xs:complexType name="ProductDescription">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:long" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Plugins" nillable="true" type="tns:ArrayOfPluginDescription" />
+      <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/System" minOccurs="0" name="Version" nillable="true" type="q1:Version" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ProductDescription" nillable="true" type="tns:ProductDescription" />
+  <xs:complexType name="ArrayOfPluginDescription">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="PluginDescription" nillable="true" type="tns:PluginDescription" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfPluginDescription" nillable="true" type="tns:ArrayOfPluginDescription" />
+  <xs:complexType name="PluginDescription">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Dependencies" nillable="true" type="tns:ArrayOfPluginDescription" />
+      <xs:element minOccurs="0" name="Id" type="xs:long" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/System" minOccurs="0" name="Version" nillable="true" type="q2:Version" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="PluginDescription" nillable="true" type="tns:PluginDescription" />
+</xs:schema>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/Reference.cs
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/Reference.cs	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/Reference.cs	(revision 2771)
@@ -0,0 +1,60 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.4200
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Services.Deployment.Test.AdminService {
+    
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="AdminService.IAdmin")]
+    public interface IAdmin {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdmin/DeployProduct", ReplyAction="http://tempuri.org/IAdmin/DeployProductResponse")]
+        void DeployProduct(HeuristicLab.Services.Deployment.DataAccess.ProductDescription product);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdmin/DeployPlugin", ReplyAction="http://tempuri.org/IAdmin/DeployPluginResponse")]
+        void DeployPlugin(HeuristicLab.Services.Deployment.DataAccess.PluginDescription plugin, byte[] zipFile);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public interface IAdminChannel : HeuristicLab.Services.Deployment.Test.AdminService.IAdmin, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class AdminClient : System.ServiceModel.ClientBase<HeuristicLab.Services.Deployment.Test.AdminService.IAdmin>, HeuristicLab.Services.Deployment.Test.AdminService.IAdmin {
+        
+        public AdminClient() {
+        }
+        
+        public AdminClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public AdminClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public AdminClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public AdminClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public void DeployProduct(HeuristicLab.Services.Deployment.DataAccess.ProductDescription product) {
+            base.Channel.DeployProduct(product);
+        }
+        
+        public void DeployPlugin(HeuristicLab.Services.Deployment.DataAccess.PluginDescription plugin, byte[] zipFile) {
+            base.Channel.DeployPlugin(plugin, zipFile);
+        }
+    }
+}
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/Reference.svcmap
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/Reference.svcmap	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/Reference.svcmap	(revision 2771)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="e652d6cb-b9e4-4a0e-9b49-2160c4b40e1d" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings />
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Admin/mex" Protocol="mex" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="f9aa7841-9f78-43d9-9008-0decd3d12993" SourceId="1" SourceUrl="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Admin/mex" />
+    <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="c0d733c0-fa7a-4965-bf67-e04efdf79732" SourceId="1" SourceUrl="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Admin/mex" />
+    <MetadataFile FileName="service1.xsd" MetadataType="Schema" ID="8b323fa0-af4b-4db2-95c7-caf4621ded43" SourceId="1" SourceUrl="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Admin/mex" />
+    <MetadataFile FileName="HeuristicLab.Services.Deployment.DataAccess.xsd" MetadataType="Schema" ID="a04dde5e-6016-4f53-bdcc-3dc30e4867d7" SourceId="1" SourceUrl="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Admin/mex" />
+    <MetadataFile FileName="System.xsd" MetadataType="Schema" ID="de5b0b79-4ace-49d6-9d08-a352d353beef" SourceId="1" SourceUrl="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Admin/mex" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/System.xsd
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/System.xsd	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/System.xsd	(revision 2771)
@@ -0,0 +1,12 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="Version">
+    <xs:sequence>
+      <xs:element name="_Build" type="xs:int" />
+      <xs:element name="_Major" type="xs:int" />
+      <xs:element name="_Minor" type="xs:int" />
+      <xs:element name="_Revision" type="xs:int" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Version" nillable="true" type="tns:Version" />
+</xs:schema>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/configuration.svcinfo
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/configuration.svcinfo	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/configuration.svcinfo	(revision 2771)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.WSHttpBindingElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; messageEncoding=&quot;Text&quot; name=&quot;WSHttpBinding_IAdmin&quot; textEncoding=&quot;utf-8&quot; transactionFlow=&quot;false&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Message&quot;&gt;&lt;message algorithmSuite=&quot;Default&quot; clientCredentialType=&quot;Windows&quot; establishSecurityContext=&quot;true&quot; negotiateServiceCredential=&quot;true&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; proxyCredentialType=&quot;None&quot; realm=&quot;&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="wsHttpBinding" name="WSHttpBinding_IAdmin" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Admin/&quot; binding=&quot;wsHttpBinding&quot; bindingConfiguration=&quot;WSHttpBinding_IAdmin&quot; contract=&quot;AdminService.IAdmin&quot; name=&quot;WSHttpBinding_IAdmin&quot;&gt;&lt;identity&gt;&lt;dns value=&quot;localhost&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Admin/&quot; binding=&quot;wsHttpBinding&quot; bindingConfiguration=&quot;WSHttpBinding_IAdmin&quot; contract=&quot;AdminService.IAdmin&quot; name=&quot;WSHttpBinding_IAdmin&quot;&gt;&lt;identity&gt;&lt;dns value=&quot;localhost&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="AdminService.IAdmin" name="WSHttpBinding_IAdmin" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/configuration91.svcinfo
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/configuration91.svcinfo	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/configuration91.svcinfo	(revision 2771)
@@ -0,0 +1,198 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="LNue/oD5IMsfCgoXP3byqdtnfSk=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="wsHttpBinding" name="WSHttpBinding_IAdmin">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>WSHttpBinding_IAdmin</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/bypassProxyOnLocal" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/messageEncoding" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.WSMessageEncoding, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Text</serializedValue>
+        </property>
+        <property path="/proxyAddress" isComplexType="false" isExplicitlyDefined="false" clrType="System.Uri, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/textEncoding" isComplexType="false" isExplicitlyDefined="true" clrType="System.Text.Encoding, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Text.UTF8Encoding</serializedValue>
+        </property>
+        <property path="/useDefaultWebProxy" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/allowCookies" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.WSHttpSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.WSHttpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Message</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.WSHttpTransportSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.WSHttpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HttpClientCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/proxyCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HttpProxyCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>None</serializedValue>
+        </property>
+        <property path="/security/transport/realm" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NonDualMessageSecurityOverHttpElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NonDualMessageSecurityOverHttpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/message/negotiateServiceCredential" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Basic256</serializedValue>
+        </property>
+        <property path="/security/message/establishSecurityContext" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="WSHttpBinding_IAdmin" contract="AdminService.IAdmin" bindingType="wsHttpBinding" address="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Admin/" bindingConfiguration="WSHttpBinding_IAdmin">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Admin/</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>wsHttpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>WSHttpBinding_IAdmin</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>AdminService.IAdmin</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>localhost</serializedValue>
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>WSHttpBinding_IAdmin</serializedValue>
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/service.wsdl
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/service.wsdl	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/service.wsdl	(revision 2771)
@@ -0,0 +1,252 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:tns="http://tempuri.org/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" name="Admin" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="WSHttpBinding_IAdmin_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:ProtectionToken>
+              <wsp:Policy>
+                <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                  <wsp:Policy>
+                    <sp:RequireDerivedKeys />
+                    <sp:BootstrapPolicy>
+                      <wsp:Policy>
+                        <sp:SignedParts>
+                          <sp:Body />
+                          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                        </sp:SignedParts>
+                        <sp:EncryptedParts>
+                          <sp:Body />
+                        </sp:EncryptedParts>
+                        <sp:SymmetricBinding>
+                          <wsp:Policy>
+                            <sp:ProtectionToken>
+                              <wsp:Policy>
+                                <sp:SpnegoContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                                  <wsp:Policy>
+                                    <sp:RequireDerivedKeys />
+                                  </wsp:Policy>
+                                </sp:SpnegoContextToken>
+                              </wsp:Policy>
+                            </sp:ProtectionToken>
+                            <sp:AlgorithmSuite>
+                              <wsp:Policy>
+                                <sp:Basic256 />
+                              </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:Layout>
+                              <wsp:Policy>
+                                <sp:Strict />
+                              </wsp:Policy>
+                            </sp:Layout>
+                            <sp:IncludeTimestamp />
+                            <sp:EncryptSignature />
+                            <sp:OnlySignEntireHeadersAndBody />
+                          </wsp:Policy>
+                        </sp:SymmetricBinding>
+                        <sp:Wss11>
+                          <wsp:Policy>
+                            <sp:MustSupportRefKeyIdentifier />
+                            <sp:MustSupportRefIssuerSerial />
+                            <sp:MustSupportRefThumbprint />
+                            <sp:MustSupportRefEncryptedKey />
+                          </wsp:Policy>
+                        </sp:Wss11>
+                        <sp:Trust10>
+                          <wsp:Policy>
+                            <sp:MustSupportIssuedTokens />
+                            <sp:RequireClientEntropy />
+                            <sp:RequireServerEntropy />
+                          </wsp:Policy>
+                        </sp:Trust10>
+                      </wsp:Policy>
+                    </sp:BootstrapPolicy>
+                  </wsp:Policy>
+                </sp:SecureConversationToken>
+              </wsp:Policy>
+            </sp:ProtectionToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256 />
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict />
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp />
+            <sp:EncryptSignature />
+            <sp:OnlySignEntireHeadersAndBody />
+          </wsp:Policy>
+        </sp:SymmetricBinding>
+        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportRefKeyIdentifier />
+            <sp:MustSupportRefIssuerSerial />
+            <sp:MustSupportRefThumbprint />
+            <sp:MustSupportRefEncryptedKey />
+          </wsp:Policy>
+        </sp:Wss11>
+        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust10>
+        <wsaw:UsingAddressing />
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="WSHttpBinding_IAdmin_DeployProduct_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="WSHttpBinding_IAdmin_DeployProduct_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="WSHttpBinding_IAdmin_DeployPlugin_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="WSHttpBinding_IAdmin_DeployPlugin_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Deployment.DataAccess" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/System" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="IAdmin_DeployProduct_InputMessage">
+    <wsdl:part name="parameters" element="tns:DeployProduct" />
+  </wsdl:message>
+  <wsdl:message name="IAdmin_DeployProduct_OutputMessage">
+    <wsdl:part name="parameters" element="tns:DeployProductResponse" />
+  </wsdl:message>
+  <wsdl:message name="IAdmin_DeployPlugin_InputMessage">
+    <wsdl:part name="parameters" element="tns:DeployPlugin" />
+  </wsdl:message>
+  <wsdl:message name="IAdmin_DeployPlugin_OutputMessage">
+    <wsdl:part name="parameters" element="tns:DeployPluginResponse" />
+  </wsdl:message>
+  <wsdl:portType name="IAdmin">
+    <wsdl:operation name="DeployProduct">
+      <wsdl:input wsaw:Action="http://tempuri.org/IAdmin/DeployProduct" message="tns:IAdmin_DeployProduct_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IAdmin/DeployProductResponse" message="tns:IAdmin_DeployProduct_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="DeployPlugin">
+      <wsdl:input wsaw:Action="http://tempuri.org/IAdmin/DeployPlugin" message="tns:IAdmin_DeployPlugin_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IAdmin/DeployPluginResponse" message="tns:IAdmin_DeployPlugin_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="WSHttpBinding_IAdmin" type="tns:IAdmin">
+    <wsp:PolicyReference URI="#WSHttpBinding_IAdmin_policy" />
+    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
+    <wsdl:operation name="DeployProduct">
+      <soap12:operation soapAction="http://tempuri.org/IAdmin/DeployProduct" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#WSHttpBinding_IAdmin_DeployProduct_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#WSHttpBinding_IAdmin_DeployProduct_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="DeployPlugin">
+      <soap12:operation soapAction="http://tempuri.org/IAdmin/DeployPlugin" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#WSHttpBinding_IAdmin_DeployPlugin_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#WSHttpBinding_IAdmin_DeployPlugin_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="Admin">
+    <wsdl:port name="WSHttpBinding_IAdmin" binding="tns:WSHttpBinding_IAdmin">
+      <soap12:address location="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Admin/" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Admin/</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <Dns>localhost</Dns>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/service.xsd
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/service.xsd	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/service.xsd	(revision 2771)
@@ -0,0 +1,29 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Deployment.DataAccess" />
+  <xs:element name="DeployProduct">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Deployment.DataAccess" minOccurs="0" name="product" nillable="true" type="q1:ProductDescription" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="DeployProductResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="DeployPlugin">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Deployment.DataAccess" minOccurs="0" name="plugin" nillable="true" type="q2:PluginDescription" />
+        <xs:element minOccurs="0" name="zipFile" nillable="true" type="xs:base64Binary" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="DeployPluginResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/service1.xsd
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/service1.xsd	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/AdminService/service1.xsd	(revision 2771)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/HeuristicLab.Services.Deployment.DataAccess.xsd
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/HeuristicLab.Services.Deployment.DataAccess.xsd	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/HeuristicLab.Services.Deployment.DataAccess.xsd	(revision 2771)
@@ -0,0 +1,34 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Deployment.DataAccess" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Deployment.DataAccess" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/System" />
+  <xs:complexType name="PluginDescription">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Dependencies" nillable="true" type="tns:ArrayOfPluginDescription" />
+      <xs:element minOccurs="0" name="Id" type="xs:long" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/System" minOccurs="0" name="Version" nillable="true" type="q1:Version" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="PluginDescription" nillable="true" type="tns:PluginDescription" />
+  <xs:complexType name="ArrayOfPluginDescription">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="PluginDescription" nillable="true" type="tns:PluginDescription" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfPluginDescription" nillable="true" type="tns:ArrayOfPluginDescription" />
+  <xs:complexType name="ArrayOfProductDescription">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="ProductDescription" nillable="true" type="tns:ProductDescription" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfProductDescription" nillable="true" type="tns:ArrayOfProductDescription" />
+  <xs:complexType name="ProductDescription">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:long" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Plugins" nillable="true" type="tns:ArrayOfPluginDescription" />
+      <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/System" minOccurs="0" name="Version" nillable="true" type="q2:Version" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ProductDescription" nillable="true" type="tns:ProductDescription" />
+</xs:schema>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/Reference.cs
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/Reference.cs	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/Reference.cs	(revision 2771)
@@ -0,0 +1,67 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.4200
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Services.Deployment.Test.UpdateService {
+    
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="UpdateService.IUpdate")]
+    public interface IUpdate {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IUpdate/GetPlugin", ReplyAction="http://tempuri.org/IUpdate/GetPluginResponse")]
+        byte[] GetPlugin(HeuristicLab.Services.Deployment.DataAccess.PluginDescription description);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IUpdate/GetProducts", ReplyAction="http://tempuri.org/IUpdate/GetProductsResponse")]
+        HeuristicLab.Services.Deployment.DataAccess.ProductDescription[] GetProducts();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IUpdate/GetPlugins", ReplyAction="http://tempuri.org/IUpdate/GetPluginsResponse")]
+        HeuristicLab.Services.Deployment.DataAccess.PluginDescription[] GetPlugins();
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public interface IUpdateChannel : HeuristicLab.Services.Deployment.Test.UpdateService.IUpdate, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class UpdateClient : System.ServiceModel.ClientBase<HeuristicLab.Services.Deployment.Test.UpdateService.IUpdate>, HeuristicLab.Services.Deployment.Test.UpdateService.IUpdate {
+        
+        public UpdateClient() {
+        }
+        
+        public UpdateClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public UpdateClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public UpdateClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public UpdateClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public byte[] GetPlugin(HeuristicLab.Services.Deployment.DataAccess.PluginDescription description) {
+            return base.Channel.GetPlugin(description);
+        }
+        
+        public HeuristicLab.Services.Deployment.DataAccess.ProductDescription[] GetProducts() {
+            return base.Channel.GetProducts();
+        }
+        
+        public HeuristicLab.Services.Deployment.DataAccess.PluginDescription[] GetPlugins() {
+            return base.Channel.GetPlugins();
+        }
+    }
+}
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/Reference.svcmap
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/Reference.svcmap	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/Reference.svcmap	(revision 2771)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="386fd3ef-d9c4-43ed-85b3-503fe0681c8d" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings />
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Update/mex" Protocol="mex" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="8e5d7689-adea-4747-9a70-0ac7b6d53f45" SourceId="1" SourceUrl="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Update/mex" />
+    <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="3ecb07b5-a96d-4407-89dd-1e042527a912" SourceId="1" SourceUrl="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Update/mex" />
+    <MetadataFile FileName="service1.xsd" MetadataType="Schema" ID="a49c6318-2559-4c8b-901c-d677ebcea2cb" SourceId="1" SourceUrl="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Update/mex" />
+    <MetadataFile FileName="HeuristicLab.Services.Deployment.DataAccess.xsd" MetadataType="Schema" ID="390a81ca-a1a5-4510-ba1e-f4c3f7e93ebd" SourceId="1" SourceUrl="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Update/mex" />
+    <MetadataFile FileName="System.xsd" MetadataType="Schema" ID="c6636f98-e644-40dd-a862-3a38c2950f79" SourceId="1" SourceUrl="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Update/mex" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/System.xsd
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/System.xsd	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/System.xsd	(revision 2771)
@@ -0,0 +1,12 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="Version">
+    <xs:sequence>
+      <xs:element name="_Build" type="xs:int" />
+      <xs:element name="_Major" type="xs:int" />
+      <xs:element name="_Minor" type="xs:int" />
+      <xs:element name="_Revision" type="xs:int" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Version" nillable="true" type="tns:Version" />
+</xs:schema>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/configuration.svcinfo
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/configuration.svcinfo	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/configuration.svcinfo	(revision 2771)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.WSHttpBindingElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; messageEncoding=&quot;Text&quot; name=&quot;WSHttpBinding_IUpdate&quot; textEncoding=&quot;utf-8&quot; transactionFlow=&quot;false&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Message&quot;&gt;&lt;message algorithmSuite=&quot;Default&quot; clientCredentialType=&quot;Windows&quot; establishSecurityContext=&quot;true&quot; negotiateServiceCredential=&quot;true&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; proxyCredentialType=&quot;None&quot; realm=&quot;&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="wsHttpBinding" name="WSHttpBinding_IUpdate" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Update/&quot; binding=&quot;wsHttpBinding&quot; bindingConfiguration=&quot;WSHttpBinding_IUpdate&quot; contract=&quot;UpdateService.IUpdate&quot; name=&quot;WSHttpBinding_IUpdate&quot;&gt;&lt;identity&gt;&lt;dns value=&quot;localhost&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Update/&quot; binding=&quot;wsHttpBinding&quot; bindingConfiguration=&quot;WSHttpBinding_IUpdate&quot; contract=&quot;UpdateService.IUpdate&quot; name=&quot;WSHttpBinding_IUpdate&quot;&gt;&lt;identity&gt;&lt;dns value=&quot;localhost&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="UpdateService.IUpdate" name="WSHttpBinding_IUpdate" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/configuration91.svcinfo
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/configuration91.svcinfo	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/configuration91.svcinfo	(revision 2771)
@@ -0,0 +1,198 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="gVI/ZurkT1S+L3Ln9j34sdO/2KM=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="wsHttpBinding" name="WSHttpBinding_IUpdate">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>WSHttpBinding_IUpdate</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/bypassProxyOnLocal" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/messageEncoding" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.WSMessageEncoding, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Text</serializedValue>
+        </property>
+        <property path="/proxyAddress" isComplexType="false" isExplicitlyDefined="false" clrType="System.Uri, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/textEncoding" isComplexType="false" isExplicitlyDefined="true" clrType="System.Text.Encoding, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Text.UTF8Encoding</serializedValue>
+        </property>
+        <property path="/useDefaultWebProxy" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/allowCookies" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.WSHttpSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.WSHttpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Message</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.WSHttpTransportSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.WSHttpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HttpClientCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/proxyCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HttpProxyCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>None</serializedValue>
+        </property>
+        <property path="/security/transport/realm" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NonDualMessageSecurityOverHttpElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NonDualMessageSecurityOverHttpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/message/negotiateServiceCredential" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Basic256</serializedValue>
+        </property>
+        <property path="/security/message/establishSecurityContext" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="WSHttpBinding_IUpdate" contract="UpdateService.IUpdate" bindingType="wsHttpBinding" address="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Update/" bindingConfiguration="WSHttpBinding_IUpdate">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Update/</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>wsHttpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>WSHttpBinding_IUpdate</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>UpdateService.IUpdate</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>localhost</serializedValue>
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>WSHttpBinding_IUpdate</serializedValue>
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/service.wsdl
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/service.wsdl	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/service.wsdl	(revision 2771)
@@ -0,0 +1,311 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:tns="http://tempuri.org/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" name="Update" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="WSHttpBinding_IUpdate_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:ProtectionToken>
+              <wsp:Policy>
+                <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                  <wsp:Policy>
+                    <sp:RequireDerivedKeys />
+                    <sp:BootstrapPolicy>
+                      <wsp:Policy>
+                        <sp:SignedParts>
+                          <sp:Body />
+                          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                        </sp:SignedParts>
+                        <sp:EncryptedParts>
+                          <sp:Body />
+                        </sp:EncryptedParts>
+                        <sp:SymmetricBinding>
+                          <wsp:Policy>
+                            <sp:ProtectionToken>
+                              <wsp:Policy>
+                                <sp:SpnegoContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                                  <wsp:Policy>
+                                    <sp:RequireDerivedKeys />
+                                  </wsp:Policy>
+                                </sp:SpnegoContextToken>
+                              </wsp:Policy>
+                            </sp:ProtectionToken>
+                            <sp:AlgorithmSuite>
+                              <wsp:Policy>
+                                <sp:Basic256 />
+                              </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:Layout>
+                              <wsp:Policy>
+                                <sp:Strict />
+                              </wsp:Policy>
+                            </sp:Layout>
+                            <sp:IncludeTimestamp />
+                            <sp:EncryptSignature />
+                            <sp:OnlySignEntireHeadersAndBody />
+                          </wsp:Policy>
+                        </sp:SymmetricBinding>
+                        <sp:Wss11>
+                          <wsp:Policy>
+                            <sp:MustSupportRefKeyIdentifier />
+                            <sp:MustSupportRefIssuerSerial />
+                            <sp:MustSupportRefThumbprint />
+                            <sp:MustSupportRefEncryptedKey />
+                          </wsp:Policy>
+                        </sp:Wss11>
+                        <sp:Trust10>
+                          <wsp:Policy>
+                            <sp:MustSupportIssuedTokens />
+                            <sp:RequireClientEntropy />
+                            <sp:RequireServerEntropy />
+                          </wsp:Policy>
+                        </sp:Trust10>
+                      </wsp:Policy>
+                    </sp:BootstrapPolicy>
+                  </wsp:Policy>
+                </sp:SecureConversationToken>
+              </wsp:Policy>
+            </sp:ProtectionToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256 />
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict />
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp />
+            <sp:EncryptSignature />
+            <sp:OnlySignEntireHeadersAndBody />
+          </wsp:Policy>
+        </sp:SymmetricBinding>
+        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportRefKeyIdentifier />
+            <sp:MustSupportRefIssuerSerial />
+            <sp:MustSupportRefThumbprint />
+            <sp:MustSupportRefEncryptedKey />
+          </wsp:Policy>
+        </sp:Wss11>
+        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust10>
+        <wsaw:UsingAddressing />
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="WSHttpBinding_IUpdate_GetPlugin_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="WSHttpBinding_IUpdate_GetPlugin_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="WSHttpBinding_IUpdate_GetProducts_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="WSHttpBinding_IUpdate_GetProducts_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="WSHttpBinding_IUpdate_GetPlugins_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="WSHttpBinding_IUpdate_GetPlugins_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Deployment.DataAccess" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/System" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="IUpdate_GetPlugin_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetPlugin" />
+  </wsdl:message>
+  <wsdl:message name="IUpdate_GetPlugin_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetPluginResponse" />
+  </wsdl:message>
+  <wsdl:message name="IUpdate_GetProducts_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetProducts" />
+  </wsdl:message>
+  <wsdl:message name="IUpdate_GetProducts_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetProductsResponse" />
+  </wsdl:message>
+  <wsdl:message name="IUpdate_GetPlugins_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetPlugins" />
+  </wsdl:message>
+  <wsdl:message name="IUpdate_GetPlugins_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetPluginsResponse" />
+  </wsdl:message>
+  <wsdl:portType name="IUpdate">
+    <wsdl:operation name="GetPlugin">
+      <wsdl:input wsaw:Action="http://tempuri.org/IUpdate/GetPlugin" message="tns:IUpdate_GetPlugin_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IUpdate/GetPluginResponse" message="tns:IUpdate_GetPlugin_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetProducts">
+      <wsdl:input wsaw:Action="http://tempuri.org/IUpdate/GetProducts" message="tns:IUpdate_GetProducts_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IUpdate/GetProductsResponse" message="tns:IUpdate_GetProducts_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetPlugins">
+      <wsdl:input wsaw:Action="http://tempuri.org/IUpdate/GetPlugins" message="tns:IUpdate_GetPlugins_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IUpdate/GetPluginsResponse" message="tns:IUpdate_GetPlugins_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="WSHttpBinding_IUpdate" type="tns:IUpdate">
+    <wsp:PolicyReference URI="#WSHttpBinding_IUpdate_policy" />
+    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
+    <wsdl:operation name="GetPlugin">
+      <soap12:operation soapAction="http://tempuri.org/IUpdate/GetPlugin" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#WSHttpBinding_IUpdate_GetPlugin_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#WSHttpBinding_IUpdate_GetPlugin_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetProducts">
+      <soap12:operation soapAction="http://tempuri.org/IUpdate/GetProducts" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#WSHttpBinding_IUpdate_GetProducts_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#WSHttpBinding_IUpdate_GetProducts_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetPlugins">
+      <soap12:operation soapAction="http://tempuri.org/IUpdate/GetPlugins" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#WSHttpBinding_IUpdate_GetPlugins_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#WSHttpBinding_IUpdate_GetPlugins_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="Update">
+    <wsdl:port name="WSHttpBinding_IUpdate" binding="tns:WSHttpBinding_IUpdate">
+      <soap12:address location="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Update/" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Update/</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <Dns>localhost</Dns>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/service.xsd
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/service.xsd	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/service.xsd	(revision 2771)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Deployment.DataAccess" />
+  <xs:element name="GetPlugin">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Deployment.DataAccess" minOccurs="0" name="description" nillable="true" type="q1:PluginDescription" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetPluginResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="GetPluginResult" nillable="true" type="xs:base64Binary" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetProducts">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetProductsResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Deployment.DataAccess" minOccurs="0" name="GetProductsResult" nillable="true" type="q2:ArrayOfProductDescription" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetPlugins">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetPluginsResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Deployment.DataAccess" minOccurs="0" name="GetPluginsResult" nillable="true" type="q3:ArrayOfPluginDescription" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/service1.xsd
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/service1.xsd	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/Service References/UpdateService/service1.xsd	(revision 2771)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/app.config
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/app.config	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment.Test/app.config	(revision 2771)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <system.serviceModel>
+        <bindings>
+            <wsHttpBinding>
+                <binding name="WSHttpBinding_IUpdate" closeTimeout="00:01:00"
+                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
+                    maxBufferPoolSize="100000000" maxReceivedMessageSize="10000000"
+                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
+                    allowCookies="false">
+                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="10000000"
+                        maxBytesPerRead="10000000" maxNameTableCharCount="16384" />
+                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
+                        enabled="false" />
+                    <security mode="Message">
+                        <transport clientCredentialType="Windows" proxyCredentialType="None"
+                            realm="" />
+                        <message clientCredentialType="Windows" negotiateServiceCredential="true"
+                            algorithmSuite="Default" establishSecurityContext="true" />
+                    </security>
+                </binding>
+                <binding name="WSHttpBinding_IAdmin" closeTimeout="00:01:00"
+                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
+                    maxBufferPoolSize="100000000" maxReceivedMessageSize="10000000"
+                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
+                    allowCookies="false">
+                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="10000000"
+                        maxBytesPerRead="10000000" maxNameTableCharCount="16384" />
+                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
+                        enabled="false" />
+                    <security mode="Message">
+                        <transport clientCredentialType="Windows" proxyCredentialType="None"
+                            realm="" />
+                        <message clientCredentialType="Windows" negotiateServiceCredential="true"
+                            algorithmSuite="Default" establishSecurityContext="true" />
+                    </security>
+                </binding>
+            </wsHttpBinding>
+        </bindings>
+        <client>
+            <endpoint address="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Update/"
+                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IUpdate"
+                contract="UpdateService.IUpdate" name="WSHttpBinding_IUpdate">
+                <identity>
+                    <dns value="localhost" />
+                </identity>
+            </endpoint>
+            <endpoint address="http://localhost:8731/Design_Time_Addresses/HeuristicLab.Services.Deployment/Admin/"
+                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IAdmin"
+                contract="AdminService.IAdmin" name="WSHttpBinding_IAdmin">
+                <identity>
+                    <dns value="localhost" />
+                </identity>
+            </endpoint>
+        </client>
+    </system.serviceModel>
+</configuration>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment/Admin.cs
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment/Admin.cs	(revision 2770)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment/Admin.cs	(revision 2771)
@@ -12,5 +12,5 @@
     #region IAdmin Members
 
-    public void StoreProduct(ProductDescription product) {
+    public void DeployProduct(ProductDescription product) {
       var store = new PluginStore();
       store.Persist(product);
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment/App.config
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment/App.config	(revision 2770)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment/App.config	(revision 2771)
@@ -3,4 +3,41 @@
   <configSections>
   </configSections>
+  <system.diagnostics>
+    <sources>
+      <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
+        <listeners>
+          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
+            <filter type="" />
+          </add>
+          <add name="ServiceModelMessageLoggingListener">
+            <filter type="" />
+          </add>
+        </listeners>
+      </source>
+      <source name="System.ServiceModel" switchValue="Warning, ActivityTracing"
+        propagateActivity="true">
+        <listeners>
+          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
+            <filter type="" />
+          </add>
+          <add name="ServiceModelTraceListener">
+            <filter type="" />
+          </add>
+        </listeners>
+      </source>
+    </sources>
+    <sharedListeners>
+      <add initializeData="c:\users\p40086\documents\heuristiclab\hl3-core\branches\deploymentserver prototype\heuristiclab.services\heuristiclab.services.deployment\app_messages.svclog"
+        type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
+        name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
+        <filter type="" />
+      </add>
+      <add initializeData="c:\users\p40086\documents\heuristiclab\hl3-core\branches\deploymentserver prototype\heuristiclab.services\heuristiclab.services.deployment\app_tracelog.svclog"
+        type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
+        name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
+        <filter type="" />
+      </add>
+    </sharedListeners>
+  </system.diagnostics>
   <connectionStrings>
     <add name="HeuristicLab.Services.Deployment.Properties.Settings.HeuristicLab_PluginStoreConnectionString"
@@ -14,13 +51,30 @@
   app.config file. System.Configuration does not support config files for libraries. -->
   <system.serviceModel>
+    <bindings>
+      <wsHttpBinding>
+        <binding name="DefaultWsHttpBinding" maxBufferPoolSize="10000000"
+          maxReceivedMessageSize="1000000">
+          <readerQuotas maxDepth="1000" maxStringContentLength="16000"
+            maxArrayLength="10000000" maxBytesPerRead="10000000" maxNameTableCharCount="16000" />
+        </binding>
+      </wsHttpBinding>
+      <mexHttpBinding>
+        <binding name="DefaultMexHttpBinding" />
+      </mexHttpBinding>
+    </bindings>
+    <diagnostics performanceCounters="Default">
+      <messageLogging logMalformedMessages="true" logMessagesAtTransportLevel="true" />
+    </diagnostics>
     <services>
       <service behaviorConfiguration="HeuristicLab.Services.Deployment.UpdateBehavior"
         name="HeuristicLab.Services.Deployment.Update">
-        <endpoint address="" binding="wsHttpBinding" contract="HeuristicLab.Services.Deployment.IUpdate">
+        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultWsHttpBinding"
+          contract="HeuristicLab.Services.Deployment.IUpdate">
           <identity>
             <dns value="localhost" />
           </identity>
         </endpoint>
-        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
+        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="DefaultMexHttpBinding"
+          contract="IMetadataExchange" />
         <host>
           <baseAddresses>
@@ -31,10 +85,12 @@
       <service behaviorConfiguration="HeuristicLab.Services.Deployment.AdminBehavior"
         name="HeuristicLab.Services.Deployment.Admin">
-        <endpoint address="" binding="wsHttpBinding" contract="HeuristicLab.Services.Deployment.IAdmin">
+        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultWsHttpBinding"
+          contract="HeuristicLab.Services.Deployment.IAdmin">
           <identity>
             <dns value="localhost" />
           </identity>
         </endpoint>
-        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
+        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="DefaultMexHttpBinding"
+          contract="IMetadataExchange" />
         <host>
           <baseAddresses>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment/IAdmin.cs
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment/IAdmin.cs	(revision 2770)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment/IAdmin.cs	(revision 2771)
@@ -12,5 +12,5 @@
   public interface IAdmin {
     [OperationContract]
-    void StoreProduct(ProductDescription product);
+    void DeployProduct(ProductDescription product);
 
     [OperationContract]
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment/IUpdate.cs
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment/IUpdate.cs	(revision 2770)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment/IUpdate.cs	(revision 2771)
@@ -17,4 +17,6 @@
     IEnumerable<ProductDescription> GetProducts();
 
+    [OperationContract]
+    IEnumerable<PluginDescription> GetPlugins();
   }
 }
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment/Update.cs
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment/Update.cs	(revision 2770)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services.Deployment/Update.cs	(revision 2771)
@@ -23,4 +23,9 @@
     }
 
+    public IEnumerable<PluginDescription> GetPlugins() {
+      PluginStore store = new PluginStore();
+      return store.Plugins;
+    }
+
     #endregion
   }
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services/Web.config
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services/Web.config	(revision 2770)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.Services/Web.config	(revision 2771)
@@ -9,26 +9,21 @@
 -->
 <configuration>
-
-
-    <configSections>
-      <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
-        <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
-          <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
-          <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
-            <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
-            <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
-            <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
-            <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
-          </sectionGroup>
-        </sectionGroup>
-      </sectionGroup>
-    </configSections>  
-
-
-    <appSettings/>
-    <connectionStrings/>
-
-    <system.web>
-        <!--
+	<configSections>
+		<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
+			<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
+				<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
+				<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
+					<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
+					<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
+					<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
+					<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
+				</sectionGroup>
+			</sectionGroup>
+		</sectionGroup>
+	</configSections>
+	<appSettings/>
+	<connectionStrings/>
+	<system.web>
+		<!--
             Set compilation debug="true" to insert debugging 
             symbols into the compiled page. Because this 
@@ -36,19 +31,17 @@
             during development.
         -->
-        <compilation debug="false">
-
-          <assemblies>
-            <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
-            <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
-          </assemblies>
-
-        </compilation>
-        <!--
+		<compilation debug="true">
+			<assemblies>
+				<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
+				<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+			</assemblies>
+		</compilation>
+		<!--
             The <authentication> section enables configuration 
             of the security authentication mode used by 
             ASP.NET to identify an incoming user. 
         -->
-        <authentication mode="Windows" />
-        <!--
+		<authentication mode="Windows"/>
+		<!--
             The <customErrors> section enables configuration 
             of what to do if/when an unhandled error occurs 
@@ -62,101 +55,91 @@
         </customErrors>
         -->
-
-
-      <pages>
-        <controls>
-          <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
-        </controls>
-      </pages>
-
-      <httpHandlers>
-        <remove verb="*" path="*.asmx"/>
-        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
-        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
-        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
-      </httpHandlers>
-      <httpModules>
-        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
-      </httpModules>
-
-
-    </system.web>
-
-    <system.codedom>
-      <compilers>
-        <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"
-                  type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-          <providerOption name="CompilerVersion" value="v3.5"/>
-          <providerOption name="WarnAsError" value="false"/>
-        </compiler>
-      </compilers>
-    </system.codedom>
-
-    <!--
+		<pages>
+			<controls>
+				<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+			</controls>
+		</pages>
+		<httpHandlers>
+			<remove verb="*" path="*.asmx"/>
+			<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+			<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+			<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
+		</httpHandlers>
+		<httpModules>
+			<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+		</httpModules>
+	</system.web>
+	<system.codedom>
+		<compilers>
+			<compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+				<providerOption name="CompilerVersion" value="v3.5"/>
+				<providerOption name="WarnAsError" value="false"/>
+			</compiler>
+		</compilers>
+	</system.codedom>
+	<!--
         The system.webServer section is required for running ASP.NET AJAX under Internet
         Information Services 7.0.  It is not necessary for previous version of IIS.
     -->
-    <system.webServer>
-      <validation validateIntegratedModeConfiguration="false"/>
-      <modules>
-        <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
-      </modules>
-      <handlers>
-        <remove name="WebServiceHandlerFactory-Integrated"/>
-        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
-             type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
-        <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
-             type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
-        <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
-      </handlers>
-    </system.webServer>
-
-
-  <system.serviceModel>
-    <services>
-      <service behaviorConfiguration="HeuristicLab.Services.Service1Behavior"
-        name="HeuristicLab.Services.Service1">
-        <endpoint address="" binding="wsHttpBinding" contract="HeuristicLab.Services.IService1">
-          <identity>
-            <dns value="localhost" />
-          </identity>
-        </endpoint>
-        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
-      </service>
-      <service behaviorConfiguration="HeuristicLab.Services.UpdateBehavior"
-        name="HeuristicLab.Services.Update">
-        <endpoint address="" binding="wsHttpBinding" contract="HeuristicLab.Services.IUpdate">
-          <identity>
-            <dns value="localhost" />
-          </identity>
-        </endpoint>
-        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
-      </service>
-      <service behaviorConfiguration="HeuristicLab.Services.AdminBehavior"
-        name="HeuristicLab.Services.Admin">
-        <endpoint address="" binding="wsHttpBinding" contract="HeuristicLab.Services.IAdmin">
-          <identity>
-            <dns value="localhost" />
-          </identity>
-        </endpoint>
-        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
-      </service>
-    </services>
-    <behaviors>
-      <serviceBehaviors>
-        <behavior name="HeuristicLab.Services.Service1Behavior">
-          <serviceMetadata httpGetEnabled="true" />
-          <serviceDebug includeExceptionDetailInFaults="false" />
-        </behavior>
-        <behavior name="HeuristicLab.Services.UpdateBehavior">
-          <serviceMetadata httpGetEnabled="true" />
-          <serviceDebug includeExceptionDetailInFaults="false" />
-        </behavior>
-        <behavior name="HeuristicLab.Services.AdminBehavior">
-          <serviceMetadata httpGetEnabled="true" />
-          <serviceDebug includeExceptionDetailInFaults="false" />
-        </behavior>
-      </serviceBehaviors>
-    </behaviors>
-  </system.serviceModel>
+	<system.webServer>
+		<validation validateIntegratedModeConfiguration="false"/>
+		<modules>
+			<add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+		</modules>
+		<handlers>
+			<remove name="WebServiceHandlerFactory-Integrated"/>
+			<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+			<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+			<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+		</handlers>
+	</system.webServer>
+	<system.serviceModel>
+		<bindings>
+   <wsHttpBinding>
+    <binding name="DefaultWsBindingConfiguration">
+     <readerQuotas maxDepth="1000" maxStringContentLength="1000000"
+      maxArrayLength="1000" maxBytesPerRead="1000000" maxNameTableCharCount="1000" />
+    </binding>
+   </wsHttpBinding>
+   <mexHttpBinding>
+    <binding name="DefaultMexBindingConfiguration" />
+   </mexHttpBinding>
+  </bindings>
+  <services>
+   <service behaviorConfiguration="HeuristicLab.Services.UpdateBehavior"
+    name="HeuristicLab.Services.Update">
+    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultWsBindingConfiguration"
+     contract="HeuristicLab.Services.IUpdate">
+     <identity>
+      <dns value="localhost" />
+     </identity>
+    </endpoint>
+    <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="DefaultMexBindingConfiguration"
+     contract="IMetadataExchange" />
+   </service>
+   <service behaviorConfiguration="HeuristicLab.Services.AdminBehavior"
+    name="HeuristicLab.Services.Admin">
+    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultWsBindingConfiguration"
+     contract="HeuristicLab.Services.IAdmin">
+     <identity>
+      <dns value="localhost" />
+     </identity>
+    </endpoint>
+    <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="DefaultMexBindingConfiguration"
+     contract="IMetadataExchange" />
+   </service>
+  </services>
+		<behaviors>
+   <serviceBehaviors>
+    <behavior name="HeuristicLab.Services.UpdateBehavior">
+     <serviceMetadata httpGetEnabled="true" />
+     <serviceDebug includeExceptionDetailInFaults="false" />
+    </behavior>
+    <behavior name="HeuristicLab.Services.AdminBehavior">
+     <serviceMetadata httpGetEnabled="true" />
+     <serviceDebug includeExceptionDetailInFaults="false" />
+    </behavior>
+   </serviceBehaviors>
+  </behaviors>
+	</system.serviceModel>
 </configuration>
Index: /branches/DeploymentServer Prototype/HeuristicLab.Services/PreBuildEvent.cmd
===================================================================
--- /branches/DeploymentServer Prototype/HeuristicLab.Services/PreBuildEvent.cmd	(revision 2771)
+++ /branches/DeploymentServer Prototype/HeuristicLab.Services/PreBuildEvent.cmd	(revision 2771)
@@ -0,0 +1,1 @@
+SubWCRev "%ProjectDir%\" "%ProjectDir%\Properties\AssemblyInfo.frame" "%ProjectDir%\Properties\AssemblyInfo.cs"
