2009-04-09 41 views
1

除了使用Web服務之外,還有無法通過Windows應用程序調用Web應用程序中的方法嗎?兩者都在同一臺機器上運行。從Windows應用程序調用ASP.NET應用程序中的方法

我基本上想安排一個工作來運行一個Windows應用程序,它更新了一些文件(對於貝葉斯垃圾郵件過濾器),然後我想通知Web應用程序重新加載該文件。

我知道這可以通過其他方式完成,但我很想知道它是否有可能。

回答

2

您可以讓您的Windows應用程序連接到網絡應用程序,並在通過重新加載您的文件進行響應的頁面中執行GET操作,我不認爲使用Web服務是絕對必要的。這樣你也可以通過網絡瀏覽器來實現。

1

如果您希望它們直接進行通信,則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的方法,每當這個頁面被打開。

0

Web應用程序如何加載文件?如果您使用的是Cache對象的依賴關係,那麼只需更新文件就會使Cache條目無效,導致您的代碼在發現該條目爲空(或基於「無效」事件)時重新加載該條目。

否則,我不知道如何通知應用程序更新文件。

+0

爲什麼downvote?似乎是一個合理的方法 – Kev 2009-04-09 02:30:20

0

ASP.NET應用程序只存在作爲實例來提供請求。這就是爲什麼Web服務是一種簡單的方法來處理這個問題 - 應用程序已被實例化以服務於服務請求。如果您可以確定該實例存在並已掌握該實例,則可以使用remoting。但是,如果沒有對應用程序實例的具體處理,則無法直接調用該方法。

還有很多其他的溝通方式。您可以使用數據庫或其他類型的列表,這兩個應用程序都會定期輪詢和更新。那裏有很多異步的MQ解決方案。

0

因此,您將在您的webapp中專門爲此創建一個頁面。使用Get請求並傳遞一個url參數。然後在page_load事件中檢查這個paremter。如果它存在然後做你的處理。通過傳入參數,您可以防止意外的頁面加載,導致文件在不需要時被上載和處理。

從Windows應用程序通過使用.Net HttpWebRequest使URL獲取請求。示例:http://www.codeproject.com/KB/webservices/HttpWebRequest_Response.aspx

相關問題