2011-10-14 63 views
1

我想在Windows服務上託管一個WCF服務。基本上WCF服務從同一臺機器上的後端數據庫讀取數據。現在從ASP.NET服務器在同一臺機器上,我想讀取WCF服務從數據庫中讀取的數據。任何人都可以提供正確的方法來執行此操作?而且還必須使用相同的綁定。ASP.net服務器連接與WCF服務託管在Windows服務

+0

只需從您的ASP.NET應用程序調用該服務!?!?! –

+1

默認情況下WCF是「每次通話」,例如,每次調用都將創建一個新的服務類,它將讀取一些數據,將其返回,然後進行處理。沒有「已經讀過的數據」在WCF運行時系統的任何地方徘徊...... –

+0

@marc_s我的意思是我想要將後端數據庫的記錄讀入asp.netweb頁面,以通過此WCF服務生成報告。 –

回答

1

從您的意見中可以看出,您的目標是讓相同的WCF後端擁有不同的用戶界面。下面是關於一些信息,以結合:

  • 對於同一臺機器上訪問WCF服務,最好的結合將是named pipe binding。但是,命名管道綁定不能從其他機器訪問。

  • 萬一您必須從其他機器訪問服務,您應該去TCP Binding。請注意,命名管道和TCP綁定將僅從.NET客戶端使用(這對您來說不應該是個問題)。最後,如果您不得不通過互聯網公開服務和/或他們需要互操作,您可以選擇BasicHttpBindingWSHttpBindingWSHttpBindingWSHttpBinding。但是,我會爲內部/私人消費和外部/公共消費提供不同的服務接口。

  • 最後,您可以通過配置輕鬆更改綁定,因此您可以選擇名稱管道,並可能將其更改爲tcp綁定。此外,它可能具有不同綁定的不同端點上的相同服務。

現在,在遠程託管WCF時,您可以將其託管在Windows服務或IIS中。 IIS的優勢在於您已經測試過可擴展的主機,可以通過UI提供很少的管理選項。另一方面,使用IIS(作爲Web服務器),您不能使用命名管道或tcp綁定。使用較新的Windows服務器,您甚至可以藉助WAS(Windows激活服務)消除這種不利因素。

最後,你有沒有考慮過使用常見的進程內層而不是像WCF這樣的進程外層?例如,您可以擁有一個通用庫(或一組庫),可以通過清晰的API提供業務邏輯/數據訪問。相同的庫可用於不同的UI,如ASP.NET和窗體 - UI必須使用接口和工廠(或DI框架)來訪問該層。優勢在於您可以通過進行中的調用獲得性能提升。另一方面,使用進程內層的桌面客戶端無法輕鬆縮放或無法通過互聯網使用。基於WCF的應用程序服務器解決了這些問題。我更喜歡創建將由基於服務器的UI(如ASP.NET)使用的進程內層,而基於客戶端的UI在同一進程內層使用WCF外觀。

1

從我瞭解你正在試圖做的會是這樣的:
ASP.Net應用程序 - > WCF服務 - > DB

應用程序調用的方法對WCF服務,它從數據庫讀取一些數據並創建一個報告並將其發送迴應用程序。如果這是意圖,應用程序和服務都在同一臺機器上,那麼你可以使用命名管道綁定,這是非常快的,並且是同一臺機器上系統的首選通信方式。你也可以使用更具擴展性的http綁定。但是WCF框架的巨大優勢在於,您可以輕鬆更改綁定而不影響功能。所以,我建議你使用命名管道(net.pipe://),然後在需要時切換到Http。

1

使用WCF只是爲了保持代碼分離的情況下,你希望或需要去另一個UI是不合邏輯的。你可以做的是將所有的邏輯寫入單獨的程序集。當你在WCF中實現它時,你最終會這樣做。 WCF只是一個託管框架,並將底層程序集託管在一個進程外主機中。如果您有一個服務使用者,並且您希望將其託管在同一臺計算機上(如後),則可能已在進程中使用它。您的代碼隱藏代碼可以引用單獨程序集中的數據訪問類。您通過代理訪問WCF服務時所做的同樣的事情。