2011-12-13 110 views
1

我有一個窗口桌面應用程序,用C#.NET(.NET框架4.0)開發,但現在我想將它轉換成窗口服務。桌面應用程序中有一個窗體窗體。這怎麼可能?任何代碼或幫助鏈接都歡迎。轉換窗口桌面應用程序到窗口服務

謝謝

+1

您如何想象用戶在作爲服務運行並且沒有UI時與應用程序進行交互?或者你想解耦並完全重寫UI或UI <->服務端通信層? –

+0

用戶如果使用應用程序是一種服務,該如何使用?你想用這個表格做什麼?如果你仍然想保持這種形式,爲什麼你想要的應用程序是一個服務? – shambulator

回答

3

它完全取決於應用程序的功能。你必須記住的主要事情是,當一個應用程序作爲一個服務運行時,它不能有任何用戶交互,因爲它在無人值守的情況下運行。

看看本作的更多背景:

Introduction to Windows Service Applications

還是看使用SrvStart(一個免費的實用程序)來運行現有的應用程序作爲服務:

Using SrvStart to Run Any Application as a Windows Service

還有一些商業工具可以將Windows應用程序轉換爲服務運行,例如:

FireDaemon

AlwaysUp

0

一旦應用程序正在運行的服務seprate UI演示應用程序之間的所有交際是跨進程 - 所以你需要來管理。根據你的技能組合,今天最簡單的方法可能是WCF。您的第一步是定義GUI客戶端應用程序與服務之間的接口(GUI需要在服務器上進行哪些調用,它們是單向還是雙向(返回數據),服務是否需要觸發事件客戶端(需要一個回調接口)?等)。
一旦決定了,你可以繼續開始構建你的WCF服務。這是一個需要託管的DLL - 在服務主機的情況下 - 這是非常直接的,有很多關於這方面的信息(基本上只有幾行鍋爐板代碼,然後運行一個實用程序來註冊服務)。使用命令行主機代替服務主機(更容易調試等)來測試您的服務器非常有用 - 在設置2個主機項目(一個服務,一個cmd行)時非常有用。
我個人從未嘗試使用WCF服務的表單客戶端 - 如果您的表單很簡單,您可能會發現在WPF中開發您的客戶端更容易。客戶端使用您定義的接口在服務器上進行調用,並且WCF生成的代理代碼使接口管理跨進程(或機器)的tranport。 WCF通過關於要使用的傳輸的配置文件(namedpipes,tcp,http等)非常靈活。 Bon勇氣!

1

Ricibob的回答是正確的。我開始按照他的建議。我需要WCF數據服務,因爲我必須在數據庫中編輯一些數據。當我發現WCF數據服務不支持枚舉時,我就陷入了困境。我的業務對象廣泛使用枚舉,現在我不知道該怎麼做。