簡體   English   中英

與Windows服務上托管的WCF服務的ASP.net服務器連接

[英]ASP.net server connection with WCF service hosted on windows service

我正在嘗試在Windows服務上托管WCF服務。基本上WCF服務從同一計算機上的后端數據庫讀取數據。現在從同一計算機上的ASP.NET服務器讀取數據,我想讀取WCF服務的數據已從數據庫中讀取。任何人都建議我采取正確的方法來做到這一點? 還有必須用於相同的綁定。

從我的理解,你要做的事情將是這樣的:
ASP.Net App - > WCF服務 - > DB

該應用程序在WCF服務上調用一個方法,該方法從DB讀取一些數據並創建報告並將其發送回該應用程序。 如果這是意圖並且app和service都在同一台機器上,那么你可以使用命名管道綁定,這是非常快的,並且是同一台機器上系統的首選通信方式。 您還可以使用更具可伸縮性的http綁定。 但是WCF框架的巨大優勢在於您可以輕松地更改綁定而不會影響功能。 因此,我建議您使用命名管道(net.pipe://),然后根據需要切換到Http。

從您的評論中可以看出,您的目標是讓相同的WCF后端提供不同的UI。 以下是關於綁定的一些信息:

  • 為了在同一台機器上訪問WCF服務,最好的綁定將被命名為pipe binding 但是,無法從其他計算機訪問命名管道綁定。

  • 如果您必須從其他計算機訪問該服務,則應該使用TCP Binding 請注意,命名管道和TCP綁定都將僅從.NET客戶端使用(這對您來說應該不是問題)。

  • 最后,如果您必須通過Internet公開服務和/或它們需要互操作,則可以選擇BasicHttpBindingWSHttpBinding 但是,對於內部/私人使用和外部/公共使用,我將具有不同的服務接口。

  • 最后,您可以通過配置輕松更改綁定,因此您可以選擇要開始的名稱管道,並可能在將來將其更改為tcp綁定。 此外,有可能使相同的服務在具有不同綁定的不同端點上公開。

現在,就托管WCF而言,您可以將其托管在Windows Service或IIS中。 IIS的優點是您已經測試了可伸縮的主機,該主機提供了很少的UI管理選項。 另一方面,使用IIS(作為Web服務器),您不能使用命名管道或tcp綁定。 使用較新的Windows服務器,您甚至可以借助WAS(Windows激活服務)消除這種不利影響。

最后,您是否考慮過使用常見的進程內層而不是WCF之外的進程外層? 例如,您可以擁有一個公共庫(或一組庫),它們可以提供具有清晰API的業務邏輯/數據訪問。 相同的庫可以在不同的UI中使用,例如ASP.NET和窗體 - UI必須使用接口和工廠(或DI框架)來訪問該層。 優點是,您可以通過進程內調用獲得性能提升。 另一方面,使用進程內層的桌面客戶端無法輕松擴展或無法通過Internet使用。 基於WCF的應用服務器解決了這些問題。 我更喜歡創建將在基於服務器的UI(如ASP.NET)中使用的進程內層,而基於客戶端的UI在同一進程內層使用WCF外觀。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM