4

我有一個用C#編寫的網站(MVC)和用C#編寫的Windows服務。兩者都在同一臺機器上運行。想法是讓他們共享相同的數據庫。網站和Windows服務之間的通信

Windows服務充當引擎,網站更像是顯示引擎執行計算結果的前端。通信由從Web服務器到windows服務的少量數據的命令組成。很少有命令/秒是可以預料的。

什麼是他們溝通的好方法?

+0

哪種溝通?多少交易/消息?數據量? – sll

+1

是不是一個網站和Web服務共享相同的數據庫類型的無意義?爲什麼在可以直接訪問數據時使用服務? –

回答

0

這一切都取決於你想要做什麼。有許多選項可供選擇:您可以在Windows服務中託管(安靜或不安全)Web服務,可以使用Remoting或WCF等。

但是,這一切都始於一個問題:爲什麼您需要它們兩個?什麼阻止您將Windows服務的功能移到Web應用程序中?

+4

通常,人們可能會使用Windows服務進行長時間運行的計算,或者需要做的工作與網站的用戶輸入沒有直接關係。 –

2

通常,Windows端最快的就是LRPC。根據您的需求,WCF可能是一個真正的問題。我們使用Win32 LRPC + protobuffers從Web服務器到後臺服務的吞吐量提高了約40倍。只取決於你的需求。

(見Benchmarking WCF compared to Protocol Buffers + RpcLibrary

protobuf-csharp-port有你最需要什麼定義服務和信息。然後使用protobuf-csharp-rpc通過Win32 LRPC transport layer提供消息序列化。

一旦你在protobuffers中定義了協議,這真的很容易。它只需要客戶端/服務器上的幾行代碼來創建連接和代理類。

同樣,這一切都取決於你在找什麼;但是,恕我直言,目前還沒有一個更好的.NET框架的RPC體系結構。當然,我的觀點偏向於我的觀點,但自從2003年以來我們一直在使用這些變體,它只是起作用。 PS:如果你從頭開始構建服務,你可以看看我的指南Building a Windows Service Project Template。它將幫助您快速啓動並運行事件記錄,安裝和命令行測試。

0

您可以一直這樣做'另一種方式' - 讓您的網站運行Web偵聽器並讓Windows服務連接到它。