2015-06-22 100 views
0

我有一個由Web應用程序和多重Windows服務組成的應用程序,根據使用的是哪個版本的後端軟件,只安裝一個Windows服務。WCF服務體系結構查詢

當前,數據由Web應用程序保存在數據庫中,然後安裝相關服務,然後將數據提取到已安裝的後端系統中。

我想改變這個使用WCF服務,所以結果數據直接返回到Web應用程序。

我以前沒有使用WCF服務,但我假設我可以做這樣的事情。

WebApp.Objects.Dll - 包含數據庫對象,例如PurchaseOrder的對象

WebApp.Service.Contracts.dll - 在這裏我可以描述的服務方法,這將參考WebApp.Objects.dll這樣我就可以拿了一個採購訂單對象作爲參數

WebApp.Service.2011.dll - 這將是2011年版的後端系統的實際服務,這將引用dll的WebApp.Service.Contracts

WebApp.Service .2012.dll - 這將是2012版後端系統的實際服務,這將引用因此,我的問題是,Web應用程序是否需要知道有關後端WCF服務的具體使用情況?我只想調用具有指定接口的服務,而不關心其實現方式或內部執行方式,而只是返回在後端系統中創建的採購訂單(無論它是返回接口還是具體的類)

我能否創建服務客戶端而無需知道其2011或2012年WCF服務是否正在使用?

回答

1

只要您能夠爲所有版本使用完全相同的合同,Web應用程序就不需要知道它正在訪問哪個版本的WCF服務。

在Web應用程序的配置中,指定URL和合同。但是,除了合同之外,這些服務之間可能還存在其他差異。在一個極端的例子中,這可能意味着v2011使用與後端的v2012不同的綁定 - 這不太可能來自您的描述。但是在配置文件中也應解決配置或服務行爲的細微差異。例如。如果v2011需要更長時間才能執行操作,則需要配置超時,以便v2012的更長時間不會導致到期。

+0

嗨,多數民衆贊成在此我非常感謝,有一個單一的dll來存儲合同,所有版本的服務引用這個以確保它們是相同的,多個後端服務都做同樣的事情,並且有相同的參數,他們只是使用一組不同的引用到後端軟件,這就是爲什麼我不希望網絡應用程序直接引用它們。如果所有的網絡應用程序的需求是一個合同和地址,將工作得很好! – WraithNath

+1

@WraithNath:我不知道所有的細節,但也許你根本不需要WCF(會降低部署和配置的複雜性,請求時間)。 WCF的一個原因是,如果你想將服務部署到不同的機器上。只需爲所有後端版本(合同)聲明一個通用接口。在每個版本的後端的獨立程序集中實現接口。在Web應用程序中,配置要使用的具體實例並使用Activator.CreateInstance創建它。 – Markus

+0

謝謝,我目前有一些dll,根據它是什麼版本進入bin目錄,如果它們在那裏,它會通過反射裝載它們。這確實工作得很好,但這確實意味着後端系統需要安裝在Web服務器上,而這有時並不是最終用戶想要的,我們的應用程序部署在跨服務器的某些情況下,已經可以公開訪問Web服務器,所以後端財務系統不希望理想地在同一個盒子上。謝謝! – WraithNath