2013-07-03 95 views
0

我需要構建一個在後臺運行並在窗口啓動後立即啓動的應用程序。我需要第二個應用程序,它必須是一個Windows窗體,它提供了對主應用程序的狀態和一些控制的介紹。帶WCF的Windows服務

首先,我開始做一個Windows服務作爲主應用程序和Windows窗體作爲輔助,但我發現一個嚴重的問題。他們如何相互溝通。所以TCP是我的第一個想法,但防火牆阻止了我。

我研究並找到了WCF。顯然使用WCF我可以在兩個應用程序之間進行通信,而不會有太多令人頭疼的事情,但是我從來沒有使用過WCF,並且有兩件事讓我擔心。

WCF有防火牆的問題? 使用Windows服務< => WCF < => Windows Forms是一種很好的方法,我的意思是,這不是一個不好的做法?

請幫我我很迷茫。

+0

這不是一個真正的問題。你需要學習使用搜索。 – EkoostikMartin

+2

這兩個進程是否在同一臺機器上運行?如果是這樣,我不明白爲什麼防火牆會阻止連接。 – PoweredByOrange

+0

http://stackoverflow.com/questions/528652/what-is-the-simplest-method-of-inter-process-communication-between-2-c-sharp-pro – Jonesopolis

回答

4

使用WCF Windows服務和前端應用程序之間的通信是完全沒有問題的方法。過去,我曾用這種方法取得成功。

WCF基本上是傳輸機制周圍的抽象層。你定義了什麼數據需要交換; WCF負責如何來交換數據。 WCF的真正好處在於它將數據交換轉換爲形式化的方法調用。從您的角度來看,從Windows服務嚮應用程序發送狀態消息與進行方法調用一樣簡單。在幕後,WCF將消息序列化,將其發送到遠程端點,並在交換完成時將控制權返回給您。

WCF在同一臺機器上或跨機器運行良好。如果你在同一臺機器上,NetNamedPipeBinding可能是你想要使用的。對於跨機器通信,有多種選擇可供選擇,包括NetTcpBinding。我發現這個flow chart在選擇一個綁定時很有用。

WCF Binding Selection Flow Chart

在充分披露的利益,我已經變得沮喪與WCF的原因有三:與WCF相關

  1. 陡峭的學習曲線。
  2. 缺乏與Visual Studio IDE的無縫集成。
  3. 表現。

學習曲線是一次性成本,但它可能很大。當我大約3年前上次使用WCF時,Visual Studio並不便於使用,這隻會加劇我的學習曲線。 Visual Studio今天可能會讓它變得非常簡單;我只是不確定。然而,我真正的挫折是表現。根據我的經驗,在第一次調用某個方法時WCF速度很慢,並且在此之後幾乎是瞬間的。我的軟件的用戶不止一次地對性能進行了評論,所以我今天使用了基於TCP的解決方案,這已經緩解了這個問題。

至於你的問題,如果你的服務和應用程序運行在同一個系統上,防火牆應該不是問題。只要確保你使用本地主機地址(127.0.0.1)。如果他們在不同的系統上,WCF可以通過一個http綁定來幫助緩解防火牆問題。

我希望這會有所幫助。

+0

+1爲圖表 – PoweredByOrange