2012-08-23 78 views
0

我有一個要求,我需要能夠有一個獨立版本的應用程序,以及一個在線版本。這樣做的一種可能的方式是創建一個滿足獨立的WPF版本和一個MVC Web版本。如何完成功能是asp.net web api自託管?

顯然,這將需要兩個代碼庫(但無可否認他們應該是除了前端代碼相同)。 Web API自託管是否足夠穩定,如果需要,我可以在其中託管一個完整的Web應用程序?

+0

你可以使用WCF,這是成熟的和將允許一個統一的代碼庫 –

+0

@SimonHalsey這到底如何?如果應用程序沒有連接到網絡,我將無法使用WCF與服務器通信,除非我錯過了某些東西。 – Dan

+0

WCF服務可以託管在應用程序,IIS或Windows服務中。該服務不需要爲3個scenerios中的任何一個進行修改,您只需要一點基礎架構,具體取決於您選擇將其託管的方式。 –

回答

0

的Web API可以運行selfhosted但運行ASP.NET(MVC),你需要像IIS (Express)的服務器。

你可以做的是有一個機器上安裝IIS Express中,承載您的Web應用程序在和有如果需要的Web API自我主辦。當然,如果你已經安裝了IIS Express,你可能只想選擇運行其中的所有內容:Web應用程序和Web API。

0

只要你真行使用使用相同的數據庫/服務,您可以託管在IIS中的WebAPI服務器的單一版本,並簡單地將其用於API控制器內部/外部應用。

然後,您就可以使用兩個相同的ASP.Net MVC網站(而不是桌面&網絡),其撥打電話到您的WebAPI服務。一個託管在內聯網上,一個託管在互聯網上 - 兩個都會觸及WebAPI,以實現業務功能&數據持久性。

這裏的目標是減少維護的代碼量。實質上,它是兩個項目 - 您的WebAPI項目和一個ASP.Net MVC站點。

0

這種情況下不需要有兩個或更多的代碼庫。你需要的是一個爲你的應用程序提供API的庫。該庫可以直接在獨立應用程序中使用,我認爲它是一個桌面應用程序。

然後,您可以創建一個WCF或Web API,甚至兩者層究竟是不是任何比大約在同一庫的包裝等等。在WCF /網絡API的合同可以是與您的DTO所以WCF服務的實現將是這樣的:

SomeObject IMyService.DoStuff(string param) 
{ 
    var myLibrary = new MyLibrary(); 
    var someObject = myLibrary.DoStuff(param); 
    return someObject; 
} 

唯一的開銷將是,當庫的接口變化的變化都在重複服務接口,但是沒有實際的業務邏輯會被重複。 您甚至可以共享這些接口,即如果您不介意在庫接口上擁有合同屬性,則API將公開由WCF服務實現的相同接口。