2010-04-19 98 views
2

我已經創建了一個windows服務來監視網絡的某些特定流量。我現在需要爲服務製作一個用戶界面,以便實時觀看流量,並且可以更改服務的設置。通過WCF公開Windows服務

不幸的是,我堅持我如何把我的工作服務,並揭露它通過/將其轉換爲WCF。

我甚至不知道從哪裏開始。

感謝

編輯:嗯,我已經暴露通過WCF的一些方法,這一切看起來像它將作爲必要的工作。

這真的是不難的,一旦我意識到ServiceHost的構造函數可以採取一個實例,而不僅僅是一個類型,因爲我的類,它所做的工作,沒有一個參數的構造函數。

+0

MSDN總是一個很好的開始:http://msdn.microsoft.com/en-us/netframework/aa663324.aspx當你有一個特定的問題stackoverflow.com是一個很好的地方。 – 2010-04-19 19:46:33

+0

更具體地說,我需要做的是通過UI改變服務監聽的端口。我目前有一個小的UI應用程序,可以使用ServiceController啓動/停止服務。我現在需要一種方法來使用新的端口號在服務中調用方法。它不一定是WCF,但它必須是將數據傳遞給服務的一種手段。 – CaffGeek 2010-04-20 14:10:22

回答

2

好,坦白地說,我不會通過WCF走「暴露」你的服務的路徑。

我的建議是:

  • 留下您當前的服務,收集並監控流量,因爲它是
  • 存儲中的數據,你可能希望暴露給其他到合適的持續性存儲(如數據庫)
  • 創建一個單獨的WCF服務(在第二個Windows NT服務託管,或在IIS),這將允許外部消費者得到你所收集的數據

鑑於ÿ我們目前的數據,你將不得不分析你有什麼樣的數據,然後你需要決定什麼以及如何將這些數據公開給其他可能對這些數據感興趣的人。

  • 如果你選擇基於SOAP的WCF服務,你必須拿出一套服務方法(沿GetDataForToday線的東西,GetDataForHour或不管它是你要提供)。在這種情況下,這是您的第一個任務 - 定義服務方法(您的服務合同,以WCF的名義發言),並定義涉及的數據類型 - 作爲服務方法的參數,以及來自這些方法的返回值你的數據合同

  • 如果你更喜歡REST,那麼你通常不會談論方法,而是將數據視爲資源 - 例如您可以將小時數據集公開爲資源並使用類似http://yourserver/YourService/YYYYMMDD/Hour之類的URL導航到它 - 如何定義這些URL(統一資源標識符 - URI)完全取決於您。每個這樣的資源需要有一個代表 - 一組字段和屬性的 - 你通常會揭露那些如XML和/或JSON

隨着WCF的靈活性,你實際上可以連做兩個 - 如果你希望。SOAP是更傳統的做事方式 - 專業人員是一個記錄良好的界面(您可以獲得WSDL - Web服務描述,以及少量XSD - 用於描述數據的XML模式),這些界面可以被「發現」並由人類和電腦解釋。不利的一面是,SOAP往往有點「沉重」,您需要一個特殊的SOAP客戶端/您自己的應用程序才能真正獲取數據。

REST是一種比較流行和現代的做事方式 - 您瀏覽到一個URL並且吐出一大堆尖括號(或JSON文檔)。它很快,很容易,很好 - 但它不太正式,你沒有得到任何機器可讀的服務描述,真的 - 有點了解你知道/找出/閱讀文檔以瞭解你是什麼真的回來了,如何解釋它。

唷,這已經成爲一個很長的帖子!基本上 - 我會保留當前的數據收集服務並讓它按原樣運行,並考慮如何使用單獨的WCF服務公開/提供收集的數據。

良好的介紹站點是基於SOAP的WCF方面的MSDN WCF Developer Center,以及WCF的基於REST的方面的MSDN WCF REST Developer Center