diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/RemoteDesktopServicesProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/RemoteDesktopServicesProxy.cs
index bf847f10..de6146ef 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/RemoteDesktopServicesProxy.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/RemoteDesktopServicesProxy.cs
@@ -106,6 +106,14 @@ namespace WebsitePanel.EnterpriseServer {
private System.Threading.SendOrPostCallback GetRdsCollectionSessionHostsOperationCompleted;
+ private System.Threading.SendOrPostCallback GetRdsServerInfoOperationCompleted;
+
+ private System.Threading.SendOrPostCallback GetRdsServerStatusOperationCompleted;
+
+ private System.Threading.SendOrPostCallback ShutDownRdsServerOperationCompleted;
+
+ private System.Threading.SendOrPostCallback RestartRdsServerOperationCompleted;
+
///
public esRemoteDesktopServices() {
this.Url = "http://localhost:9002/esRemoteDesktopServices.asmx";
@@ -225,6 +233,18 @@ namespace WebsitePanel.EnterpriseServer {
///
public event GetRdsCollectionSessionHostsCompletedEventHandler GetRdsCollectionSessionHostsCompleted;
+ ///
+ public event GetRdsServerInfoCompletedEventHandler GetRdsServerInfoCompleted;
+
+ ///
+ public event GetRdsServerStatusCompletedEventHandler GetRdsServerStatusCompleted;
+
+ ///
+ public event ShutDownRdsServerCompletedEventHandler ShutDownRdsServerCompleted;
+
+ ///
+ public event RestartRdsServerCompletedEventHandler RestartRdsServerCompleted;
+
///
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetRdsCollection", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public RdsCollection GetRdsCollection(int collectionId) {
@@ -1944,6 +1964,182 @@ namespace WebsitePanel.EnterpriseServer {
}
}
+ ///
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetRdsServerInfo", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ public RdsServerInfo GetRdsServerInfo(int itemId, string fqdnName) {
+ object[] results = this.Invoke("GetRdsServerInfo", new object[] {
+ itemId,
+ fqdnName});
+ return ((RdsServerInfo)(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginGetRdsServerInfo(int itemId, string fqdnName, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("GetRdsServerInfo", new object[] {
+ itemId,
+ fqdnName}, callback, asyncState);
+ }
+
+ ///
+ public RdsServerInfo EndGetRdsServerInfo(System.IAsyncResult asyncResult) {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((RdsServerInfo)(results[0]));
+ }
+
+ ///
+ public void GetRdsServerInfoAsync(int itemId, string fqdnName) {
+ this.GetRdsServerInfoAsync(itemId, fqdnName, null);
+ }
+
+ ///
+ public void GetRdsServerInfoAsync(int itemId, string fqdnName, object userState) {
+ if ((this.GetRdsServerInfoOperationCompleted == null)) {
+ this.GetRdsServerInfoOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetRdsServerInfoOperationCompleted);
+ }
+ this.InvokeAsync("GetRdsServerInfo", new object[] {
+ itemId,
+ fqdnName}, this.GetRdsServerInfoOperationCompleted, userState);
+ }
+
+ private void OnGetRdsServerInfoOperationCompleted(object arg) {
+ if ((this.GetRdsServerInfoCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.GetRdsServerInfoCompleted(this, new GetRdsServerInfoCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
+ ///
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetRdsServerStatus", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ public string GetRdsServerStatus(int itemId, string fqdnName) {
+ object[] results = this.Invoke("GetRdsServerStatus", new object[] {
+ itemId,
+ fqdnName});
+ return ((string)(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginGetRdsServerStatus(int itemId, string fqdnName, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("GetRdsServerStatus", new object[] {
+ itemId,
+ fqdnName}, callback, asyncState);
+ }
+
+ ///
+ public string EndGetRdsServerStatus(System.IAsyncResult asyncResult) {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((string)(results[0]));
+ }
+
+ ///
+ public void GetRdsServerStatusAsync(int itemId, string fqdnName) {
+ this.GetRdsServerStatusAsync(itemId, fqdnName, null);
+ }
+
+ ///
+ public void GetRdsServerStatusAsync(int itemId, string fqdnName, object userState) {
+ if ((this.GetRdsServerStatusOperationCompleted == null)) {
+ this.GetRdsServerStatusOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetRdsServerStatusOperationCompleted);
+ }
+ this.InvokeAsync("GetRdsServerStatus", new object[] {
+ itemId,
+ fqdnName}, this.GetRdsServerStatusOperationCompleted, userState);
+ }
+
+ private void OnGetRdsServerStatusOperationCompleted(object arg) {
+ if ((this.GetRdsServerStatusCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.GetRdsServerStatusCompleted(this, new GetRdsServerStatusCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
+ ///
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/ShutDownRdsServer", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ public ResultObject ShutDownRdsServer(int itemId, string fqdnName) {
+ object[] results = this.Invoke("ShutDownRdsServer", new object[] {
+ itemId,
+ fqdnName});
+ return ((ResultObject)(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginShutDownRdsServer(int itemId, string fqdnName, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("ShutDownRdsServer", new object[] {
+ itemId,
+ fqdnName}, callback, asyncState);
+ }
+
+ ///
+ public ResultObject EndShutDownRdsServer(System.IAsyncResult asyncResult) {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((ResultObject)(results[0]));
+ }
+
+ ///
+ public void ShutDownRdsServerAsync(int itemId, string fqdnName) {
+ this.ShutDownRdsServerAsync(itemId, fqdnName, null);
+ }
+
+ ///
+ public void ShutDownRdsServerAsync(int itemId, string fqdnName, object userState) {
+ if ((this.ShutDownRdsServerOperationCompleted == null)) {
+ this.ShutDownRdsServerOperationCompleted = new System.Threading.SendOrPostCallback(this.OnShutDownRdsServerOperationCompleted);
+ }
+ this.InvokeAsync("ShutDownRdsServer", new object[] {
+ itemId,
+ fqdnName}, this.ShutDownRdsServerOperationCompleted, userState);
+ }
+
+ private void OnShutDownRdsServerOperationCompleted(object arg) {
+ if ((this.ShutDownRdsServerCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.ShutDownRdsServerCompleted(this, new ShutDownRdsServerCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
+ ///
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/RestartRdsServer", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ public ResultObject RestartRdsServer(int itemId, string fqdnName) {
+ object[] results = this.Invoke("RestartRdsServer", new object[] {
+ itemId,
+ fqdnName});
+ return ((ResultObject)(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginRestartRdsServer(int itemId, string fqdnName, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("RestartRdsServer", new object[] {
+ itemId,
+ fqdnName}, callback, asyncState);
+ }
+
+ ///
+ public ResultObject EndRestartRdsServer(System.IAsyncResult asyncResult) {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((ResultObject)(results[0]));
+ }
+
+ ///
+ public void RestartRdsServerAsync(int itemId, string fqdnName) {
+ this.RestartRdsServerAsync(itemId, fqdnName, null);
+ }
+
+ ///
+ public void RestartRdsServerAsync(int itemId, string fqdnName, object userState) {
+ if ((this.RestartRdsServerOperationCompleted == null)) {
+ this.RestartRdsServerOperationCompleted = new System.Threading.SendOrPostCallback(this.OnRestartRdsServerOperationCompleted);
+ }
+ this.InvokeAsync("RestartRdsServer", new object[] {
+ itemId,
+ fqdnName}, this.RestartRdsServerOperationCompleted, userState);
+ }
+
+ private void OnRestartRdsServerOperationCompleted(object arg) {
+ if ((this.RestartRdsServerCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.RestartRdsServerCompleted(this, new RestartRdsServerCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
///
public new void CancelAsync(object userState) {
base.CancelAsync(userState);
@@ -2937,4 +3133,108 @@ namespace WebsitePanel.EnterpriseServer {
}
}
}
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void GetRdsServerInfoCompletedEventHandler(object sender, GetRdsServerInfoCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class GetRdsServerInfoCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+ private object[] results;
+
+ internal GetRdsServerInfoCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState) {
+ this.results = results;
+ }
+
+ ///
+ public RdsServerInfo Result {
+ get {
+ this.RaiseExceptionIfNecessary();
+ return ((RdsServerInfo)(this.results[0]));
+ }
+ }
+ }
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void GetRdsServerStatusCompletedEventHandler(object sender, GetRdsServerStatusCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class GetRdsServerStatusCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+ private object[] results;
+
+ internal GetRdsServerStatusCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState) {
+ this.results = results;
+ }
+
+ ///
+ public string Result {
+ get {
+ this.RaiseExceptionIfNecessary();
+ return ((string)(this.results[0]));
+ }
+ }
+ }
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void ShutDownRdsServerCompletedEventHandler(object sender, ShutDownRdsServerCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class ShutDownRdsServerCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+ private object[] results;
+
+ internal ShutDownRdsServerCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState) {
+ this.results = results;
+ }
+
+ ///
+ public ResultObject Result {
+ get {
+ this.RaiseExceptionIfNecessary();
+ return ((ResultObject)(this.results[0]));
+ }
+ }
+ }
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void RestartRdsServerCompletedEventHandler(object sender, RestartRdsServerCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class RestartRdsServerCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+ private object[] results;
+
+ internal RestartRdsServerCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState) {
+ this.results = results;
+ }
+
+ ///
+ public ResultObject Result {
+ get {
+ this.RaiseExceptionIfNecessary();
+ return ((ResultObject)(this.results[0]));
+ }
+ }
+ }
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs
index 09b99f2c..84b73099 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/RemoteDesktopServices/RemoteDesktopServicesController.cs
@@ -248,6 +248,26 @@ namespace WebsitePanel.EnterpriseServer
return GetRdsCollectionSessionHostsInternal(collectionId);
}
+ public static RdsServerInfo GetRdsServerInfo(int itemId, string fqdnName)
+ {
+ return GetRdsServerInfoInternal(itemId, fqdnName);
+ }
+
+ public static string GetRdsServerStatus(int itemId, string fqdnName)
+ {
+ return GetRdsServerStatusInternal(itemId, fqdnName);
+ }
+
+ public static ResultObject ShutDownRdsServer(int itemId, string fqdnName)
+ {
+ return ShutDownRdsServerInternal(itemId, fqdnName);
+ }
+
+ public static ResultObject RestartRdsServer(int itemId, string fqdnName)
+ {
+ return RestartRdsServerInternal(itemId, fqdnName);
+ }
+
private static RdsCollection GetRdsCollectionInternal(int collectionId)
{
var collection = ObjectUtils.FillObjectFromDataReader(DataProvider.GetRDSCollectionById(collectionId));
@@ -586,7 +606,7 @@ namespace WebsitePanel.EnterpriseServer
foreach (var tmpServer in tmpServers)
{
- FillRdsServerData(tmpServer);
+ FillRdsServerData(tmpServer);
}
result.Servers = tmpServers.ToArray();
@@ -1235,6 +1255,118 @@ namespace WebsitePanel.EnterpriseServer
return result;
}
+ private static RdsServerInfo GetRdsServerInfoInternal(int itemId, string fqdnName)
+ {
+ Organization org = OrganizationController.GetOrganization(itemId);
+
+ if (org == null)
+ {
+ return new RdsServerInfo();
+ }
+
+ var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId));
+ var result = rds.GetRdsServerInfo(fqdnName);
+
+ return result;
+ }
+
+ private static string GetRdsServerStatusInternal(int itemId, string fqdnName)
+ {
+ Organization org = OrganizationController.GetOrganization(itemId);
+ var result = "Unavailable";
+
+ if (org == null)
+ {
+ return result;
+ }
+
+ var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId));
+
+ try
+ {
+ result = rds.GetRdsServerStatus(fqdnName);
+ }
+ catch
+ {
+ }
+
+ return result;
+ }
+
+ private static ResultObject ShutDownRdsServerInternal(int itemId, string fqdnName)
+ {
+ var result = TaskManager.StartResultTask("REMOTE_DESKTOP_SERVICES", "SHUTDOWN_RDS_SERVER");
+
+ try
+ {
+ Organization org = OrganizationController.GetOrganization(itemId);
+
+ if (org == null)
+ {
+ result.IsSuccess = false;
+ result.AddError("", new NullReferenceException("Organization not found"));
+ return result;
+ }
+
+ var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId));
+ rds.ShutDownRdsServer(fqdnName);
+ }
+ catch (Exception ex)
+ {
+ result.AddError("REMOTE_DESKTOP_SERVICES_SHUTDOWN_RDS_SERVER", ex);
+ }
+ finally
+ {
+ if (!result.IsSuccess)
+ {
+ TaskManager.CompleteResultTask(result);
+ }
+ else
+ {
+ TaskManager.CompleteResultTask();
+ }
+ }
+
+ return result;
+ }
+
+ private static ResultObject RestartRdsServerInternal(int itemId, string fqdnName)
+ {
+ var result = TaskManager.StartResultTask("REMOTE_DESKTOP_SERVICES", "RESTART_RDS_SERVER");
+
+ try
+ {
+ Organization org = OrganizationController.GetOrganization(itemId);
+
+ if (org == null)
+ {
+ result.IsSuccess = false;
+ result.AddError("", new NullReferenceException("Organization not found"));
+ return result;
+ }
+
+ var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId));
+ rds.RestartRdsServer(fqdnName);
+ }
+ catch (Exception ex)
+ {
+ result.AddError("REMOTE_DESKTOP_SERVICES_RESTART_RDS_SERVER", ex);
+ }
+ finally
+ {
+ if (!result.IsSuccess)
+ {
+ TaskManager.CompleteResultTask(result);
+ }
+ else
+ {
+ TaskManager.CompleteResultTask();
+ }
+ }
+
+ return result;
+ }
+
private static List GetCollectionRemoteApplicationsInternal(int itemId, string collectionName)
{
var result = new List();
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esRemoteDesktopServices.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esRemoteDesktopServices.asmx.cs
index 82127d09..e60b9cf0 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esRemoteDesktopServices.asmx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esRemoteDesktopServices.asmx.cs
@@ -289,5 +289,29 @@ namespace WebsitePanel.EnterpriseServer
{
return RemoteDesktopServicesController.GetRdsCollectionSessionHosts(collectionId);
}
+
+ [WebMethod]
+ public RdsServerInfo GetRdsServerInfo(int itemId, string fqdnName)
+ {
+ return RemoteDesktopServicesController.GetRdsServerInfo(itemId, fqdnName);
+ }
+
+ [WebMethod]
+ public string GetRdsServerStatus(int itemId, string fqdnName)
+ {
+ return RemoteDesktopServicesController.GetRdsServerStatus(itemId, fqdnName);
+ }
+
+ [WebMethod]
+ public ResultObject ShutDownRdsServer(int itemId, string fqdnName)
+ {
+ return RemoteDesktopServicesController.ShutDownRdsServer(itemId, fqdnName);
+ }
+
+ [WebMethod]
+ public ResultObject RestartRdsServer(int itemId, string fqdnName)
+ {
+ return RemoteDesktopServicesController.RestartRdsServer(itemId, fqdnName);
+ }
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs
index e434048d..807dabd6 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/IRemoteDesktopServices.cs
@@ -69,5 +69,9 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
List GetRdsUserSessions(string collectionName);
void LogOffRdsUser(string unifiedSessionId, string hostServer);
List GetRdsCollectionSessionHosts(string collectionName);
+ RdsServerInfo GetRdsServerInfo(string serverName);
+ string GetRdsServerStatus(string serverName);
+ void ShutDownRdsServer(string serverName);
+ void RestartRdsServer(string serverName);
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsServer.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsServer.cs
index 1f89e9b8..aa181ba7 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsServer.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsServer.cs
@@ -47,5 +47,6 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
public string ItemName { get; set; }
public int? RdsCollectionId { get; set; }
public bool ConnectionEnabled { get; set; }
+ public string Status { get; set; }
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsServerDriveInfo.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsServerDriveInfo.cs
new file mode 100644
index 00000000..1b29f46f
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsServerDriveInfo.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace WebsitePanel.Providers.RemoteDesktopServices
+{
+ public class RdsServerDriveInfo
+ {
+ public string DeviceId { get; set; }
+ public string VolumeName { get; set; }
+ public double SizeMb { get; set; }
+ public double FreeSpaceMb { get; set; }
+ }
+}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsServerInfo.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsServerInfo.cs
new file mode 100644
index 00000000..55056203
--- /dev/null
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/RemoteDesktopServices/RdsServerInfo.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace WebsitePanel.Providers.RemoteDesktopServices
+{
+ public class RdsServerInfo
+ {
+ public string Status { get; set; }
+ public int NumberOfCores { get; set; }
+ public int MaxClockSpeed { get; set; }
+ public int LoadPercentage { get; set; }
+ public double MemoryAllocatedMb { get; set; }
+ public double FreeMemoryMb { get; set; }
+ public RdsServerDriveInfo[] Drives { get; set; }
+ }
+}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj
index 6e8b7bd8..752209d3 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj
@@ -135,6 +135,8 @@
+
+
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs b/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs
index e6e8dba2..07cd3f64 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.TerminalServices.Windows2012/Windows2012.cs
@@ -63,7 +63,8 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
private const string Users = "users";
private const string RdsGroupFormat = "rds-{0}-{1}";
private const string RdsModuleName = "RemoteDesktopServices";
- private const string AddNpsString = "netsh nps add np name=\"\"{0}\"\" policysource=\"1\" processingorder=\"{1}\" conditionid=\"0x3d\" conditiondata=\"^5$\" conditionid=\"0x1fb5\" conditiondata=\"{2}\" conditionid=\"0x1e\" conditiondata=\"UserAuthType:(PW|CA)\" profileid=\"0x1005\" profiledata=\"TRUE\" profileid=\"0x100f\" profiledata=\"TRUE\" profileid=\"0x1009\" profiledata=\"0x7\" profileid=\"0x1fe6\" profiledata=\"0x40000000\"";
+ private const string AddNpsString = "netsh nps add np name=\"\"{0}\"\" policysource=\"1\" processingorder=\"{1}\" conditionid=\"0x3d\" conditiondata=\"^5$\" conditionid=\"0x1fb5\" conditiondata=\"{2}\" conditionid=\"0x1e\" conditiondata=\"UserAuthType:(PW|CA)\" profileid=\"0x1005\" profiledata=\"TRUE\" profileid=\"0x100f\" profiledata=\"TRUE\" profileid=\"0x1009\" profiledata=\"0x7\" profileid=\"0x1fe6\" profiledata=\"0x40000000\"";
+
#endregion
#region Properties
@@ -956,9 +957,7 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
cmd.Parameters.Add("ConnectionBroker", ConnectionBroker);
ExecuteShellCommand(runSpace, cmd, false);
- }
-
-
+ }
private bool ExistRdsServerInDeployment(Runspace runSpace, RdsServer server)
{
@@ -1835,6 +1834,238 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
}
#endregion
+
+ #region Server Info
+
+ public RdsServerInfo GetRdsServerInfo(string serverName)
+ {
+ var result = new RdsServerInfo();
+ Runspace runspace = null;
+
+ try
+ {
+ runspace = OpenRunspace();
+ result = GetServerInfo(runspace, serverName);
+ result.Status = GetRdsServerStatus(runspace, serverName);
+
+ }
+ finally
+ {
+ CloseRunspace(runspace);
+ }
+
+ return result;
+ }
+
+ public string GetRdsServerStatus(string serverName)
+ {
+ string result = "";
+ Runspace runspace = null;
+
+ try
+ {
+ runspace = OpenRunspace();
+ result = GetRdsServerStatus(runspace, serverName);
+
+ }
+ finally
+ {
+ CloseRunspace(runspace);
+ }
+
+ return result;
+ }
+
+ public void ShutDownRdsServer(string serverName)
+ {
+ Runspace runspace = null;
+
+ try
+ {
+ runspace = OpenRunspace();
+ var command = new Command("Stop-Computer");
+ command.Parameters.Add("ComputerName", serverName);
+ command.Parameters.Add("Force", true);
+ object[] errors = null;
+
+ ExecuteShellCommand(runspace, command, false, out errors);
+
+ if (errors.Any())
+ {
+ Log.WriteWarning(string.Join("\r\n", errors.Select(e => e.ToString()).ToArray()));
+ throw new Exception(string.Join("\r\n", errors.Select(e => e.ToString()).ToArray()));
+ }
+ }
+ finally
+ {
+ CloseRunspace(runspace);
+ }
+ }
+
+ public void RestartRdsServer(string serverName)
+ {
+ Runspace runspace = null;
+
+ try
+ {
+ runspace = OpenRunspace();
+ var command = new Command("Restart-Computer");
+ command.Parameters.Add("ComputerName", serverName);
+ command.Parameters.Add("Force", true);
+ object[] errors = null;
+
+ ExecuteShellCommand(runspace, command, false, out errors);
+
+ if (errors.Any())
+ {
+ Log.WriteWarning(string.Join("\r\n", errors.Select(e => e.ToString()).ToArray()));
+ throw new Exception(string.Join("\r\n", errors.Select(e => e.ToString()).ToArray()));
+ }
+ }
+ finally
+ {
+ CloseRunspace(runspace);
+ }
+ }
+
+ private RdsServerInfo GetServerInfo(Runspace runspace, string serverName)
+ {
+ var result = new RdsServerInfo();
+ Command cmd = new Command("Get-WmiObject");
+ cmd.Parameters.Add("Class", "Win32_Processor");
+ cmd.Parameters.Add("ComputerName", serverName);
+
+ object[] errors = null;
+ var psProcInfo = ExecuteShellCommand(runspace, cmd, false, out errors).First();
+
+ if (errors.Any())
+ {
+ Log.WriteWarning(string.Join("\r\n", errors.Select(e => e.ToString()).ToArray()));
+ return result;
+ }
+
+ cmd = new Command("Get-WmiObject");
+ cmd.Parameters.Add("Class", "Win32_OperatingSystem");
+ cmd.Parameters.Add("ComputerName", serverName);
+
+ var psMemoryInfo = ExecuteShellCommand(runspace, cmd, false, out errors).First();
+
+ if (errors.Any())
+ {
+ Log.WriteWarning(string.Join("\r\n", errors.Select(e => e.ToString()).ToArray()));
+ return result;
+ }
+
+ result.NumberOfCores = Convert.ToInt32(GetPSObjectProperty(psProcInfo, "NumberOfCores"));
+ result.MaxClockSpeed = Convert.ToInt32(GetPSObjectProperty(psProcInfo, "MaxClockSpeed"));
+ result.LoadPercentage = Convert.ToInt32(GetPSObjectProperty(psProcInfo, "LoadPercentage"));
+ result.MemoryAllocatedMb = Math.Round(Convert.ToDouble(GetPSObjectProperty(psMemoryInfo, "TotalVisibleMemorySize")) / 1024, 1);
+ result.FreeMemoryMb = Math.Round(Convert.ToDouble(GetPSObjectProperty(psMemoryInfo, "FreePhysicalMemory")) / 1024, 1);
+ result.Drives = GetRdsServerDriveInfo(runspace, serverName).ToArray();
+
+ return result;
+ }
+
+ private string GetRdsServerStatus (Runspace runspace, string serverName)
+ {
+ if (CheckServerAvailability(serverName))
+ {
+ if (CheckPendingReboot(runspace, serverName))
+ {
+ return "Online - Pending Reboot";
+ }
+
+ return "Online";
+ }
+ else
+ {
+ return "Unavailable";
+ }
+ }
+
+ private List GetRdsServerDriveInfo(Runspace runspace, string serverName)
+ {
+ var result = new List();
+ Command cmd = new Command("Get-WmiObject");
+ cmd.Parameters.Add("Class", "Win32_LogicalDisk");
+ cmd.Parameters.Add("Filter", "DriveType=3");
+ cmd.Parameters.Add("ComputerName", serverName);
+ object[] errors = null;
+ var psDrives = ExecuteShellCommand(runspace, cmd, false, out errors);
+
+ if (errors.Any())
+ {
+ Log.WriteWarning(string.Join("\r\n", errors.Select(e => e.ToString()).ToArray()));
+ return result;
+ }
+
+ foreach (var psDrive in psDrives)
+ {
+ var driveInfo = new RdsServerDriveInfo()
+ {
+ VolumeName = GetPSObjectProperty(psDrive, "VolumeName").ToString(),
+ DeviceId = GetPSObjectProperty(psDrive, "DeviceId").ToString(),
+ SizeMb = Math.Round(Convert.ToDouble(GetPSObjectProperty(psDrive, "Size"))/1024/1024, 1),
+ FreeSpaceMb = Math.Round(Convert.ToDouble(GetPSObjectProperty(psDrive, "FreeSpace"))/1024/1024, 1)
+ };
+
+ result.Add(driveInfo);
+ }
+
+ return result;
+ }
+
+ private bool CheckRDSServerAvaliability(string serverName)
+ {
+ var ping = new Ping();
+ var reply = ping.Send(serverName, 1000);
+
+ if (reply.Status == IPStatus.Success)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ private bool CheckPendingReboot(Runspace runspace, string serverName)
+ {
+ if (CheckPendingReboot(runspace, serverName, @"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing", "RebootPending"))
+ {
+ return true;
+ }
+
+ if (CheckPendingReboot(runspace, serverName, @"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update", "RebootRequired"))
+ {
+ return true;
+ }
+
+ if (CheckPendingReboot(runspace, serverName, @"HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager", "PendingFileRenameOperations"))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ private bool CheckPendingReboot(Runspace runspace, string serverName, string registryPath, string registryKey)
+ {
+ Command cmd = new Command("Get-ItemProperty");
+ cmd.Parameters.Add("Path", registryPath);
+ cmd.Parameters.Add("Name", registryKey);
+ cmd.Parameters.Add("ErrorAction", "SilentlyContinue");
+
+ var feature = ExecuteRemoteShellCommand(runspace, serverName, cmd).FirstOrDefault();
+
+ if (feature != null)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ #endregion
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs b/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs
index d32659ee..33b741df 100644
--- a/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Server.Client/RemoteDesktopServicesProxy.cs
@@ -81,6 +81,14 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
private System.Threading.SendOrPostCallback GetRdsCollectionSessionHostsOperationCompleted;
+ private System.Threading.SendOrPostCallback GetRdsServerInfoOperationCompleted;
+
+ private System.Threading.SendOrPostCallback GetRdsServerStatusOperationCompleted;
+
+ private System.Threading.SendOrPostCallback ShutDownRdsServerOperationCompleted;
+
+ private System.Threading.SendOrPostCallback RestartRdsServerOperationCompleted;
+
///
public RemoteDesktopServices() {
this.Url = "http://localhost:9003/RemoteDesktopServices.asmx";
@@ -164,6 +172,18 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
///
public event GetRdsCollectionSessionHostsCompletedEventHandler GetRdsCollectionSessionHostsCompleted;
+ ///
+ public event GetRdsServerInfoCompletedEventHandler GetRdsServerInfoCompleted;
+
+ ///
+ public event GetRdsServerStatusCompletedEventHandler GetRdsServerStatusCompleted;
+
+ ///
+ public event ShutDownRdsServerCompletedEventHandler ShutDownRdsServerCompleted;
+
+ ///
+ public event RestartRdsServerCompletedEventHandler RestartRdsServerCompleted;
+
///
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreateCollection", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
@@ -1299,6 +1319,170 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
}
}
+ ///
+ [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetRdsServerInfo", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ public RdsServerInfo GetRdsServerInfo(string serverName) {
+ object[] results = this.Invoke("GetRdsServerInfo", new object[] {
+ serverName});
+ return ((RdsServerInfo)(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginGetRdsServerInfo(string serverName, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("GetRdsServerInfo", new object[] {
+ serverName}, callback, asyncState);
+ }
+
+ ///
+ public RdsServerInfo EndGetRdsServerInfo(System.IAsyncResult asyncResult) {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((RdsServerInfo)(results[0]));
+ }
+
+ ///
+ public void GetRdsServerInfoAsync(string serverName) {
+ this.GetRdsServerInfoAsync(serverName, null);
+ }
+
+ ///
+ public void GetRdsServerInfoAsync(string serverName, object userState) {
+ if ((this.GetRdsServerInfoOperationCompleted == null)) {
+ this.GetRdsServerInfoOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetRdsServerInfoOperationCompleted);
+ }
+ this.InvokeAsync("GetRdsServerInfo", new object[] {
+ serverName}, this.GetRdsServerInfoOperationCompleted, userState);
+ }
+
+ private void OnGetRdsServerInfoOperationCompleted(object arg) {
+ if ((this.GetRdsServerInfoCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.GetRdsServerInfoCompleted(this, new GetRdsServerInfoCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
+ ///
+ [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetRdsServerStatus", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ public string GetRdsServerStatus(string serverName) {
+ object[] results = this.Invoke("GetRdsServerStatus", new object[] {
+ serverName});
+ return ((string)(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginGetRdsServerStatus(string serverName, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("GetRdsServerStatus", new object[] {
+ serverName}, callback, asyncState);
+ }
+
+ ///
+ public string EndGetRdsServerStatus(System.IAsyncResult asyncResult) {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((string)(results[0]));
+ }
+
+ ///
+ public void GetRdsServerStatusAsync(string serverName) {
+ this.GetRdsServerStatusAsync(serverName, null);
+ }
+
+ ///
+ public void GetRdsServerStatusAsync(string serverName, object userState) {
+ if ((this.GetRdsServerStatusOperationCompleted == null)) {
+ this.GetRdsServerStatusOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetRdsServerStatusOperationCompleted);
+ }
+ this.InvokeAsync("GetRdsServerStatus", new object[] {
+ serverName}, this.GetRdsServerStatusOperationCompleted, userState);
+ }
+
+ private void OnGetRdsServerStatusOperationCompleted(object arg) {
+ if ((this.GetRdsServerStatusCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.GetRdsServerStatusCompleted(this, new GetRdsServerStatusCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
+ ///
+ [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/ShutDownRdsServer", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ public void ShutDownRdsServer(string serverName) {
+ this.Invoke("ShutDownRdsServer", new object[] {
+ serverName});
+ }
+
+ ///
+ public System.IAsyncResult BeginShutDownRdsServer(string serverName, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("ShutDownRdsServer", new object[] {
+ serverName}, callback, asyncState);
+ }
+
+ ///
+ public void EndShutDownRdsServer(System.IAsyncResult asyncResult) {
+ this.EndInvoke(asyncResult);
+ }
+
+ ///
+ public void ShutDownRdsServerAsync(string serverName) {
+ this.ShutDownRdsServerAsync(serverName, null);
+ }
+
+ ///
+ public void ShutDownRdsServerAsync(string serverName, object userState) {
+ if ((this.ShutDownRdsServerOperationCompleted == null)) {
+ this.ShutDownRdsServerOperationCompleted = new System.Threading.SendOrPostCallback(this.OnShutDownRdsServerOperationCompleted);
+ }
+ this.InvokeAsync("ShutDownRdsServer", new object[] {
+ serverName}, this.ShutDownRdsServerOperationCompleted, userState);
+ }
+
+ private void OnShutDownRdsServerOperationCompleted(object arg) {
+ if ((this.ShutDownRdsServerCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.ShutDownRdsServerCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
+ ///
+ [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/RestartRdsServer", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ public void RestartRdsServer(string serverName) {
+ this.Invoke("RestartRdsServer", new object[] {
+ serverName});
+ }
+
+ ///
+ public System.IAsyncResult BeginRestartRdsServer(string serverName, System.AsyncCallback callback, object asyncState) {
+ return this.BeginInvoke("RestartRdsServer", new object[] {
+ serverName}, callback, asyncState);
+ }
+
+ ///
+ public void EndRestartRdsServer(System.IAsyncResult asyncResult) {
+ this.EndInvoke(asyncResult);
+ }
+
+ ///
+ public void RestartRdsServerAsync(string serverName) {
+ this.RestartRdsServerAsync(serverName, null);
+ }
+
+ ///
+ public void RestartRdsServerAsync(string serverName, object userState) {
+ if ((this.RestartRdsServerOperationCompleted == null)) {
+ this.RestartRdsServerOperationCompleted = new System.Threading.SendOrPostCallback(this.OnRestartRdsServerOperationCompleted);
+ }
+ this.InvokeAsync("RestartRdsServer", new object[] {
+ serverName}, this.RestartRdsServerOperationCompleted, userState);
+ }
+
+ private void OnRestartRdsServerOperationCompleted(object arg) {
+ if ((this.RestartRdsServerCompleted != null)) {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.RestartRdsServerCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
///
public new void CancelAsync(object userState) {
base.CancelAsync(userState);
@@ -1826,4 +2010,64 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
}
}
}
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void GetRdsServerInfoCompletedEventHandler(object sender, GetRdsServerInfoCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class GetRdsServerInfoCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+ private object[] results;
+
+ internal GetRdsServerInfoCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState) {
+ this.results = results;
+ }
+
+ ///
+ public RdsServerInfo Result {
+ get {
+ this.RaiseExceptionIfNecessary();
+ return ((RdsServerInfo)(this.results[0]));
+ }
+ }
+ }
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void GetRdsServerStatusCompletedEventHandler(object sender, GetRdsServerStatusCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class GetRdsServerStatusCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+ private object[] results;
+
+ internal GetRdsServerStatusCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState) {
+ this.results = results;
+ }
+
+ ///
+ public string Result {
+ get {
+ this.RaiseExceptionIfNecessary();
+ return ((string)(this.results[0]));
+ }
+ }
+ }
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void ShutDownRdsServerCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
+ public delegate void RestartRdsServerCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Server/RemoteDesktopServices.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/RemoteDesktopServices.asmx.cs
index cb3e79dd..33a76548 100644
--- a/WebsitePanel/Sources/WebsitePanel.Server/RemoteDesktopServices.asmx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Server/RemoteDesktopServices.asmx.cs
@@ -495,5 +495,73 @@ namespace WebsitePanel.Server
throw;
}
}
+
+ [WebMethod, SoapHeader("settings")]
+ public RdsServerInfo GetRdsServerInfo(string serverName)
+ {
+ try
+ {
+ Log.WriteStart("'{0}' GetRdsServerInfo", ProviderSettings.ProviderName);
+ var result = RDSProvider.GetRdsServerInfo(serverName);
+ Log.WriteEnd("'{0}' GetRdsServerInfo", ProviderSettings.ProviderName);
+
+ return result;
+ }
+ catch (Exception ex)
+ {
+ Log.WriteError(String.Format("'{0}' GetRdsServerInfo", ProviderSettings.ProviderName), ex);
+ throw;
+ }
+ }
+
+ [WebMethod, SoapHeader("settings")]
+ public string GetRdsServerStatus(string serverName)
+ {
+ try
+ {
+ Log.WriteStart("'{0}' GetRdsServerStatus", ProviderSettings.ProviderName);
+ var result = RDSProvider.GetRdsServerStatus(serverName);
+ Log.WriteEnd("'{0}' GetRdsServerStatus", ProviderSettings.ProviderName);
+
+ return result;
+ }
+ catch (Exception ex)
+ {
+ Log.WriteError(String.Format("'{0}' GetRdsServerStatus", ProviderSettings.ProviderName), ex);
+ throw;
+ }
+ }
+
+ [WebMethod, SoapHeader("settings")]
+ public void ShutDownRdsServer(string serverName)
+ {
+ try
+ {
+ Log.WriteStart("'{0}' ShutDownRdsServer", ProviderSettings.ProviderName);
+ RDSProvider.ShutDownRdsServer(serverName);
+ Log.WriteEnd("'{0}' ShutDownRdsServer", ProviderSettings.ProviderName);
+ }
+ catch (Exception ex)
+ {
+ Log.WriteError(String.Format("'{0}' ShutDownRdsServer", ProviderSettings.ProviderName), ex);
+ throw;
+ }
+ }
+
+ [WebMethod, SoapHeader("settings")]
+ public void RestartRdsServer(string serverName)
+ {
+ try
+ {
+ Log.WriteStart("'{0}' RestartRdsServer", ProviderSettings.ProviderName);
+ RDSProvider.RestartRdsServer(serverName);
+ Log.WriteEnd("'{0}' RestartRdsServer", ProviderSettings.ProviderName);
+ }
+ catch (Exception ex)
+ {
+ Log.WriteError(String.Format("'{0}' RestartRdsServer", ProviderSettings.ProviderName), ex);
+ throw;
+ }
+ }
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSCreateCollection.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSCreateCollection.ascx.cs
index 71db4b8c..5d16a9ba 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSCreateCollection.ascx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSCreateCollection.ascx.cs
@@ -43,7 +43,7 @@ namespace WebsitePanel.Portal.RDS
{
if (!IsPostBack)
{
-
+ servers.HideRefreshButton();
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollection.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollection.ascx.cs
index 12cbba33..9d0beca3 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollection.ascx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/RDSEditCollection.ascx.cs
@@ -26,6 +26,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+using AjaxControlToolkit;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -40,14 +41,31 @@ namespace WebsitePanel.Portal.RDS
{
protected void Page_Load(object sender, EventArgs e)
{
+ servers.Module = Module;
+ servers.OnRefreshClicked -= OnRefreshClicked;
+ servers.OnRefreshClicked += OnRefreshClicked;
+
if (!Page.IsPostBack)
{
var collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID);
- litCollectionName.Text = collection.DisplayName;
+ litCollectionName.Text = collection.DisplayName;
}
}
- private bool SaveRdsServers()
+ private void OnRefreshClicked(object sender, EventArgs e)
+ {
+ var rdsServers = (List)sender;
+
+ foreach (var rdsServer in rdsServers)
+ {
+ rdsServer.Status = ES.Services.RDS.GetRdsServerStatus(PanelRequest.ItemID, rdsServer.FqdName);
+ }
+
+ servers.BindServers(rdsServers.ToArray());
+ ((ModalPopupExtender)asyncTasks.FindControl("ModalPopupProperties")).Hide();
+ }
+
+ private bool SaveRdsServers(bool exit = false)
{
try
{
@@ -62,6 +80,15 @@ namespace WebsitePanel.Portal.RDS
ES.Services.RDS.EditRdsCollection(PanelRequest.ItemID, collection);
+ if (!exit)
+ {
+ foreach(var rdsServer in collection.Servers)
+ {
+ rdsServer.Status = ES.Services.RDS.GetRdsServerStatus(PanelRequest.ItemID, rdsServer.FqdName);
+ }
+
+ servers.BindServers(collection.Servers.ToArray());
+ }
}
catch(Exception ex)
{
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/App_LocalResources/RDSCollectionServers.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/App_LocalResources/RDSCollectionServers.ascx.resx
index 58c6ab6f..fc6a2efe 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/App_LocalResources/RDSCollectionServers.ascx.resx
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/App_LocalResources/RDSCollectionServers.ascx.resx
@@ -138,12 +138,21 @@
Delete
+
+ CloseProgressDialog();
+
+
+ Cancel
+
Server Name
No servers found.
+
+ Status
+
Server Name
@@ -153,4 +162,28 @@
Enabled Servers
+
+ Server Info
+
+
+ Restart
+
+
+ Shut Down
+
+
+ ShowProgressDialog('Getting Server Info ...');
+
+
+ View Info
+
+
+ Free Space:
+
+
+ Size:
+
+
+ Volume Name:
+
\ No newline at end of file
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSCollectionServers.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSCollectionServers.ascx
index 7a32c13f..146dbb51 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSCollectionServers.ascx
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/RDS/UserControls/RDSCollectionServers.ascx
@@ -1,15 +1,17 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RDSCollectionServers.ascx.cs" Inherits="WebsitePanel.Portal.RDS.UserControls.RDSCollectionServers" %>
<%@ Register Src="../../UserControls/PopupHeader.ascx" TagName="PopupHeader" TagPrefix="wsp" %>
+<%@ Register TagPrefix="wsp" TagName="CollapsiblePanel" Src="../../UserControls/CollapsiblePanel.ascx" %>
+ DataKeyNames="Id" OnRowCommand="gvServers_RowCommand">
@@ -21,18 +23,139 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+