在 Windows 服务中使用静态方法在不创建新对象的情况下调用 webform 中的数据
use of a static method inside a Windows service to call data in webform without creating a new object
我正在创建一个 Windows 网络表单页面,需要一个后台服务来跟踪数据,即使网络应用程序已关闭。我刚开始使用 Windows 服务,有一个问题。当我从网络表单页面内的服务调用静态方法时,它会在服务器上工作吗
我做到了,所以服务一直在接收数据。当我打开 webform 页面时,我做到了,因此该页面以字符串形式获取所需的数据,而无需创建接收数据的 class 的新实例。这一切都在本地 IIS 中工作,但我的问题是它是否可以在安装了服务的服务器上工作 运行ning 24/7 用户仍然在自己的机器上接收来自它的所有数据。
两个项目都在同一个 VS 解决方案中,Asp.net 项目通过引用与服务连接
服务基础class。数据来源方法:
public static string LoadStatus()
{
//Receive data
...
//Return data
List<string> streamString = new List<string>();
foreach (var str in InstanceStreams)
{
streamString.Add(str.Name + "," + str.Stream + "+");
}
result = String.Join("", streamString);
return strHTMLProd + "|" + strHTMLTest + "|" + errors + "|" + result;
}
Web 表单页面。获取数据然后在屏幕上打印出来的方法:
public void setLabel()
{
string[] labels = AzureMonitor.LoadStatus().Split('|');
if (labels != null && labels.Count() == 4)
{
lblStatusProd.Text = labels[0];
lblStatusTest.Text = labels[1];
alarm = labels[2];
array = labels[3].TrimEnd('+');
if (array != "" && array != null)
{
string[] Streams = array.Split('+');
...
}
...
}
lblUpdate.Text = "Last update: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
当我 运行 它在服务器上时,我希望返回的数据永远不会为 null 并且与服务中的数据相同 class 这就是为什么我制作了一个静态方法并避免制作新的实例。
但它是 100% 保存吗?如果不是,有什么方法可以改进设置并在它们之间获取数据而无需复制 class.
不太清楚你要做什么。这些是否分为两个单独的应用程序(Windows 服务和 Forms 桌面应用程序)?如果不是,那么它很可能在此刻起作用,而不是设计使然。
您混合使用了不同的技术。我建议您最好将监控逻辑放入 ASP.NET MVC 应用程序(它托管在 IIS 服务中并一直运行)并且可能使用 SignalR 获取实时数据流而不是依赖不断轮询更新。桌面应用程序可以使用 Forms 或 WPF 和 C# SignalR 客户端来接收数据。或者,您可以编写一个基于 Web 的客户端(使用 Angular 之类的东西)来显示数据。
我通过向我的数据库添加 table 并将监控存储在其中并使网页接收存储在 table 中的信息以用于 asp:labels 然后将更新并在屏幕上显示监控,而不直接与两者建立任何联系。
我正在创建一个 Windows 网络表单页面,需要一个后台服务来跟踪数据,即使网络应用程序已关闭。我刚开始使用 Windows 服务,有一个问题。当我从网络表单页面内的服务调用静态方法时,它会在服务器上工作吗
我做到了,所以服务一直在接收数据。当我打开 webform 页面时,我做到了,因此该页面以字符串形式获取所需的数据,而无需创建接收数据的 class 的新实例。这一切都在本地 IIS 中工作,但我的问题是它是否可以在安装了服务的服务器上工作 运行ning 24/7 用户仍然在自己的机器上接收来自它的所有数据。
两个项目都在同一个 VS 解决方案中,Asp.net 项目通过引用与服务连接
服务基础class。数据来源方法:
public static string LoadStatus()
{
//Receive data
...
//Return data
List<string> streamString = new List<string>();
foreach (var str in InstanceStreams)
{
streamString.Add(str.Name + "," + str.Stream + "+");
}
result = String.Join("", streamString);
return strHTMLProd + "|" + strHTMLTest + "|" + errors + "|" + result;
}
Web 表单页面。获取数据然后在屏幕上打印出来的方法:
public void setLabel()
{
string[] labels = AzureMonitor.LoadStatus().Split('|');
if (labels != null && labels.Count() == 4)
{
lblStatusProd.Text = labels[0];
lblStatusTest.Text = labels[1];
alarm = labels[2];
array = labels[3].TrimEnd('+');
if (array != "" && array != null)
{
string[] Streams = array.Split('+');
...
}
...
}
lblUpdate.Text = "Last update: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
当我 运行 它在服务器上时,我希望返回的数据永远不会为 null 并且与服务中的数据相同 class 这就是为什么我制作了一个静态方法并避免制作新的实例。 但它是 100% 保存吗?如果不是,有什么方法可以改进设置并在它们之间获取数据而无需复制 class.
不太清楚你要做什么。这些是否分为两个单独的应用程序(Windows 服务和 Forms 桌面应用程序)?如果不是,那么它很可能在此刻起作用,而不是设计使然。
您混合使用了不同的技术。我建议您最好将监控逻辑放入 ASP.NET MVC 应用程序(它托管在 IIS 服务中并一直运行)并且可能使用 SignalR 获取实时数据流而不是依赖不断轮询更新。桌面应用程序可以使用 Forms 或 WPF 和 C# SignalR 客户端来接收数据。或者,您可以编写一个基于 Web 的客户端(使用 Angular 之类的东西)来显示数据。
我通过向我的数据库添加 table 并将监控存储在其中并使网页接收存储在 table 中的信息以用于 asp:labels 然后将更新并在屏幕上显示监控,而不直接与两者建立任何联系。