2013-05-28 17 views
1

我有一個通常是典型的GUI文檔編輯應用程序的應用程序。它具有「批處理模式」,因此用戶可以使用一些參數運行它並獲取生成的文檔。問題是,即使以批處理模式運行,應用程序也會顯示UI(它會顯示,執行某些操作,然後退出本身)。IIS可以託管WCF服務運行應用程序,顯示UI

問題是 - 我可以託管一個WCF服務,該服務在服務器上的IIS中以批處理模式運行此應用程序?

我花了兩天試圖做到這一點沒有成功。我看到該進程在服務器上的任務資源管理器中運行,但它什麼都不做,不會產生任何結果,也不會正常退出。

對於使用IIS託管的WCF服務的UI runnig的應用程序是否有任何限制?

回答

1

@CodeCaster是對的。 WCF服務不會公開自己的UI。正如你所說,你的應用程序能夠以批處理模式運行;在這種模式下,它仍然顯示一個用戶界面。

可能有辦法讓WCF服務以批處理模式啓動並運行這個GUI程序。您需要創建一個Windows用戶帳戶,在該帳戶下運行該服務。在創建WCF服務並將服務安裝爲Windows服務後,從管理工具中打開服務小程序。右鍵單擊該服務並選擇屬性。然後單擊登錄選項卡並指定爲該服務創建的Windows用戶帳戶的用戶名和密碼。 (當然,在Windows Server 2008 R2和2012年有新的服務帳戶,這也將這樣的伎倆。)

這個方案的前提條件是,你必須給你的桌面正確創建的交互的用戶帳戶。這是一個安全問題,因爲您可能擁有一個管理員級別的帳戶(取決於您的設置方式)自主運行,並有權與桌面進行交互。

此方法的另一個問題是,如果GUI程序需要任何類型的用戶輸入(即發生錯誤或顯示對話框),服務帳戶將無法單擊任何按鈕或確認任何內容無論如何。這就是爲什麼這種方法不鼓勵。

如果程序是用.NET編寫的並且是公司的內部代碼,那麼可以嘗試將ILDASM加入程序二進制文件或使用ILSpy或Red Gate的.NET Reflector之類的工具,並對該程序進行逆向工程並將其拆分爲組成部分(假設代碼未被模糊處理)—提供批處理的服務DLL,以及您想要交互式運行程序的GUI。然後可以重新使用服務DLL(如@CodeCaster所述)通過您創建的WCF服務在「批處理」模式下運行邏輯,同時避免討厭的與桌面交互正確運行所需的權限當前程序的GUI。

這不是一個完美的答案(如果有答案),但我希望它有幫助。

1

是的,服務在與桌面交互方面存在限制。

將您的業務邏輯放在單獨的庫中,將您的服務提取到單獨的項目中,最後將您的GUI連接到兩者。現在您已經重建了您已有的應用程序,並且還有一個額外的功能:您現在可以創建一個新庫或Windows Service項目,並引用業務邏輯和服務代碼。這個最終的項目可以託管在IIS或Windows服務中,而不需要顯示任何GUI。

+0

問題是 - 我從WCF運行的應用程序是已經構建的應用程序,我無法訪問代碼。 –

相關問題