除了使用Web服務之外,還有無法通過Windows應用程序調用Web應用程序中的方法嗎?兩者都在同一臺機器上運行。從Windows應用程序調用ASP.NET應用程序中的方法
我基本上想安排一個工作來運行一個Windows應用程序,它更新了一些文件(對於貝葉斯垃圾郵件過濾器),然後我想通知Web應用程序重新加載該文件。
我知道這可以通過其他方式完成,但我很想知道它是否有可能。
除了使用Web服務之外,還有無法通過Windows應用程序調用Web應用程序中的方法嗎?兩者都在同一臺機器上運行。從Windows應用程序調用ASP.NET應用程序中的方法
我基本上想安排一個工作來運行一個Windows應用程序,它更新了一些文件(對於貝葉斯垃圾郵件過濾器),然後我想通知Web應用程序重新加載該文件。
我知道這可以通過其他方式完成,但我很想知道它是否有可能。
您可以讓您的Windows應用程序連接到網絡應用程序,並在通過重新加載您的文件進行響應的頁面中執行GET操作,我不認爲使用Web服務是絕對必要的。這樣你也可以通過網絡瀏覽器來實現。
如果您希望它們直接進行通信,則Web服務是「正確」的方式。但是,我發現在某些情況下通過數據庫記錄進行協調更容易。例如,我的網絡應用程序具有批量電子郵件功能。爲了使其工作,Web應用程序只是在指定要發送的電子郵件後留下數據庫記錄。 WinApp會定期掃描這些記錄,當它找到一個具有「未處理」狀態的記錄時,它會採取適當的操作。這對於我在極高音量環境中的魅力非常有用。
僅僅因爲web應用程序通常不在一個定時循環中(有辦法解決這個問題,但他們不值得付出努力),你無法在另一個方向上做到這一點。因此,您需要某種類型的啓動操作才能讓Web應用知道何時重新加載文件。要做到這一點,你可以使用下面的代碼做一個頁面上的GET:
WebRequest wrContent = WebRequest.Create("http://www.yourUrl.com/yourpage.aspx");
Stream objStream = wrContent.GetResponse().GetResponseStream();
// I don't think you'll need the stream Reader but I include it for completeness
StreamReader objStreamReader = new StreamReader(objStream);
然後,您會重新加載該文件在pageLoad的方法,每當這個頁面被打開。
Web應用程序如何加載文件?如果您使用的是Cache對象的依賴關係,那麼只需更新文件就會使Cache條目無效,導致您的代碼在發現該條目爲空(或基於「無效」事件)時重新加載該條目。
否則,我不知道如何通知應用程序更新文件。
因此,您將在您的webapp中專門爲此創建一個頁面。使用Get請求並傳遞一個url參數。然後在page_load事件中檢查這個paremter。如果它存在然後做你的處理。通過傳入參數,您可以防止意外的頁面加載,導致文件在不需要時被上載和處理。
從Windows應用程序通過使用.Net HttpWebRequest使URL獲取請求。示例:http://www.codeproject.com/KB/webservices/HttpWebRequest_Response.aspx
爲什麼downvote?似乎是一個合理的方法 – Kev 2009-04-09 02:30:20