我正在开发部署在iis7下的ERP asp.net mvc 5 Web应用程序。现在我想实现一种新的扫描服务,主要使用powercli和power shell脚本,并扫描我们的网络以获取服务器和服务器。 vms并获得他们的规格和他们的雕像。
所以我在考虑以下方法: -
1.由于扫描应仅由特定用户访问,并且要求托管服务器安装powercli和其他工具,因此我想创建一个新的asp.net mvc 5 Web应用程序,并在iis7 instread下部署它修改我目前的ERP系统。新应用程序将使用以下操作方法进行扫描: -
public ActionResult ScanServer(string token)
{
// do the scan
//send n email with scanning result
}
2.现在在我当前的ERP系统中,我可以通过调用上述操作方法手动启动扫描,如下所示: -
[HttpPost]
[CheckUserPermissions(Action = "", Model = "Admin")]
public ActionResult Scan()
{
try
{
string currentURL = System.Web.Configuration.WebConfigurationManager.AppSettings["scanningURL"];
using (WebClient wc = new WebClient())
{
string url = currentURL + "home/scanserver?token=*******" ;
var json = wc.DownloadString(url);
TempData["messagePartial"] = string.Format("Scan has been completed. Scan reported generated");
}
}
catch (WebException ex)
{
TempData["messageDangerPartial"] = string.Format("scanningservice can not be accessed");
}
catch (Exception e)
{
TempData["messageDangerPartial"] = string.Format("scan can not be completed");
}
现在我做了一个快速测试,我从ERP手动启动扫描,并且在iis下部署的扫描服务运行良好。
但我有这些问题: -
扫描服务可能需要20-30分钟才能完成。那么从架构的角度来看,我目前的方法是否有效?我的意思是通过从另一个应用程序调用一个动作方法来启动扫描?
现在我可以在扫描服务Web应用程序内部,强制它在时间基础上调用其动作方法(例如每4小时一次)吗?
由于
答案 0 :(得分:1)
您最好的选择是编写一个Windows服务,以便在Web应用程序旁边的Web服务器上安装。此Windows服务可以使用线程或计时器以指定的时间间隔执行长时间运行的任务(例如扫描您的网络),并在完成后发送电子邮件。
您可以使用数据库,配置文件或甚至注册表项从应用程序与您的服务进行通信。
如果这对您不起作用,您可以查看一些任务调度应用程序,例如Quartz.NET。如果您使用的是Windows服务,我建议使用优秀的TopShelf,这样可以轻松创建和部署。这是nice blog post I found by Scott Hanselman,可能会有所帮助。