ASP.NET MVC 中應用Windows服務以及Webservice服務開發分佈式定時器
一:閒談一下:
1.如今任務跟蹤管理系統已經開發快要結束了,抽一點時間來寫一下,想想本身就有成就感啊!!
2.關於任務跟蹤管理系統項目中遇到的Windows服務以及Webservice的綜合應用的問題。web
你們好這是我第二次寫博客 ,寫的很差請你們多多諒解, 但願你們能夠多多指正。數據庫
二:我稍微的整理了一下關於這個分佈式定時器需求:
1.根據任務跟蹤管理系統中的數據庫的AnswerSheet 表格中找到客戶編號(CustomerID 爲空) ,電話號碼不爲空的記錄
2.第一種狀況:根據不爲空的電話號碼(從內部的過河兵系統的數據庫Customer表中查詢數據固然過河兵系統中要進行維護Phone電話號碼)則調用Webservice API 查詢客戶的CustomerGUID/CustomerID 並將這個字符串返回到任務跟蹤管理系統若是兩個不爲空則調用AnswerSheetEdit()方法更新對應的任務跟蹤管理系統的AnswerSheet中的CustomerGUID/CustomerID服務器
3.第二種狀況:根據不爲空的電話號碼則Webservice API 查詢不到客戶的CustomerGUID/CustomerID那麼須要在過河兵系統的Survey表格中插入AnswerSheetID 和SurveyID
並進行更新過河兵對應的Customer表中的CustomerGUID/CustomerID 數據app
4.天天夜裏23:30 定時更新任務跟蹤管理系統的數據以及添加刪除過河兵系統的數據分佈式
5.分佈式定時器的做用是定時更新任務跟蹤管理系統和過河兵系統的用戶以及問卷的數據。ide
6.Windows 定時器的源代碼性能
private static readonly SurveyHandle _surveyHandle = new SurveyHandle();
private static readonly WebServerInterFaceHandle _webServerInterFaceHandle = new WebServerInterFaceHandle();
public ServiceTime()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
//定義定時器
Timer myTimer = new Timer(1000);
myTimer.Elapsed += new ElapsedEventHandler(TaskTimeAction.ServiceTime);
myTimer.Enabled = true;
myTimer.AutoReset = true;
using (StreamWriter sw = new StreamWriter("D:\\任務跟蹤管理定時器日誌.txt", true))
{
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "定時器服務啓動");
}
}
protected override void OnStop()
{
using (StreamWriter sw = new StreamWriter("D:\\任務跟蹤管理定時器日誌.txt", true))
{
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Stop.");
}
}
/// <summary>
/// 定時器委託任務 調用的方法
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
public static void ServiceTime(object source, ElapsedEventArgs e)
{
SurveyController surveyController = new SurveyController();
if (DateTime.Now.ToString("HH:mm:ss") == "23:30:00")
{
Content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss" + "夜裏23:30");
List<AnswerSheet> answerSheetList = _surveyHandle.GetAnswerGuidList();
SurveyAndAnswerSheet surveyAndAnswer = new SurveyAndAnswerSheet();
foreach (var items in answerSheetList)
{
#region 定時同步更新任務跟蹤管理系統以及過河兵系統的用戶以及問卷的數據
AnswerSheet answerSheet = _surveyHandle.GetAnswerSheet(items.ID);
Survey survey = _surveyHandle.GetSurvey(answerSheet.SurveyID);
//進行查詢AnswerIndex中的詳細的內容
//AnswerSheet answerSheetModel= _surveyHandle.GetAnswerSheetDetail(items.ID);
string model = _webServerInterFaceHandle.GetCustomerJson(items.CustomerID, items.CustomerPhone);
using (StreamWriter sw = new StreamWriter("D:\\任務跟蹤管理系統定時器日誌.txt", true))
{
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "答卷編號:" + items.ID + "客戶編號:" + model);
}
if (model != null)
{
string[] getCustomerID = model.Split('|');
string Image = null;
if (answerSheet.AttachList != null)
{
foreach (var image in answerSheet.AttachList)
{
Image += image.imgURL.Split('|').Last();
}
}
answerSheet.CustomerGUID = getCustomerID[0];
answerSheet.CustomerID = getCustomerID[1];
surveyAndAnswer.AnswerSheet = answerSheet;
surveyAndAnswer.Survey = survey;
surveyController.AnswerSheetEdit(surveyAndAnswer, "/Uploads/" + Image);
}
#endregion
}
using (StreamWriter sw = new StreamWriter("D:\\任務跟蹤管理系統定時器日誌.txt", true))
{
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + ":" + "結束時間");
}
}
}
private SelectCusutomer.WebUseSevrices webServices = new SelectCusutomer.JieChuDianUseSevrices();//真實環境
private SelectCustomer2.WebUseSevrices _webServices = new SelectCustomer2.JieChuDianUseSevrices();//測試環境
三:爲何要寫Windows服務和Webservice 服務
1.經過產品經理和客戶的最終的肯定,最後讓我將這個新的功能添加進去,因此我也就積極的去作了。
用了半天的時間將定時器開發完成,最終放在ASP.NET MVC 的Global.asax 的文件中。
2.下一步我新建了一個項目Webservice API當我寫這個API 的時候老大讓我用Webservice而不是WCF!WCF 多好啊!!經過又是半天的學習開始寫Webservice API 的服務通過調試和最後發佈到測試的服務器上最終沒有問題了。
3.因而二者開始進行對接經過在任務跟蹤管理系統中進行調試徹底沒有問題對接也成功了,兩邊的數據庫中的數據也就行更新了。
4.經過最後我將任務跟蹤管理系統發佈到IIS 7.0上去到了指定的時間數據沒有更新找到了經過IIS閒置超時的時間爲1440分鐘以及修改應用程序池的配置搞了一天最終仍是沒有達到兩邊的系統的數據同步,
最終仍是應用程序池回收了內存資源以及上網查了一下關於IIS具備的不穩定性。
5.最後我決定用Windows 服務進行開發定時器緣由穩定性以及性能都很是好。
四:關於Windows服務的建立以及調用Webservice服務
五:經過修改Windows服務下面的
App.config:來進行修改數據庫的配置的文件鏈接數據庫字符串。學習
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="ContactPoint" value="server=;database=TaskTrackData;uid=sa;password=sa;multipleactiveresultsets=True" />
<add key="ClientSettingsProvider.ServiceUri" value="" />
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<system.web>
<membership defaultProvider="ClientAuthenticationMembershipProvider">
<providers>
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
</providers>
</membership>
<roleManager defaultProvider="ClientRoleProvider" enabled="true">
<providers>
<add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
</providers>
</roleManager>
</system.web>
</configuration> 六:安裝服務經過命令 CMD 以管理員身份打開而後執行就能夠了。 C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe D:\WindowsService\WindowsService.exe C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe -u D:\WindowsService\WindowsService.exe
以上內容均屬於原創,轉載請標明。謝謝! 測試