2012-06-02 137 views
0

我們運行帶有許多(50+)WCF服務主機(用C#編寫,運行於Win 2008R2/IIS 7.5)的Web應用程序,以便與不同的外部供應商進行集成。我們希望爲這些主機添加另一項服務以進行管理。這個服務可以是通用的,我們有一個服務定義,我們可以在某個庫中定義,我們可以從集成項目中引用。但是有沒有一種只在配置中添加端點的方法?也就是說,我想避免添加.svc文件,並且只在web.config服務部分中添加一些行。WCF服務的僅配置部署

我嘗試添加該到web.config

<service name="Contracts.AdminService"> 
    <endpoint address="AdminService" contract="Contracts.IAdminService" binding="basicHttpBinding" /> 
</service> 

然而,這並不工作。如果我添加了一個簡單.svc文件中像下面它的工作原理

<%@ ServiceHost Language="C#" Debug="true" Service="Contracts.AdminService" CodeBehind="Contracts.AdminService.cs" %> 

不過,我真的想避免這種情況使得它不太可能建立一個新的主機時做錯了(我們已經做了一堆與配置文件自動的東西,所以添加一個新的服務將是微不足道的)。這可能嗎?有什麼缺點?

回答

1

過了一會兒,我自己找到了答案。解決方案是WCF 4的file-less activation。這讓我加入到我的web.config

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
    multipleSiteBindingsEnabled="true"> 
    <serviceActivations> 
    <add relativeAddress="AdminService.svc" service="Contracts.AdminService"/> 
    </serviceActivations> 
</serviceHostingEnvironment> 

這之後我可以去http://<hostname>/<path>/AdminService.svc訪問服務。

-1

WCF服務託管在ServiceHost

當您不在IIS/WAS中託管WCF時,必須手動創建ServiceHosts,因爲IIS/WAS都以您的名義與ServiceHost進行交互。

你基本上在IIS中的.svc文件中做什麼是實例化一個新的ServiceHost。

由於ServiceHost只能託管單一服務類型,因此如果您計劃爲管理員創建新類型的服務,則需要爲每種新類型提供服務主機。

所以,你的問題的簡短答案是,你不能只在你的web.config中添加一些信息來創建你要創建的新服務,你還需要一個實例化ServiceHost的機制。

+0

其實,似乎無文件激活可以做到這一點,看到我的文章。我們在討論不同的事情嗎? – carlpett

+0

沒有。我只是不知道無文件激活。謝謝 –