2012-07-17 63 views
0

比方說,我們有2個項目與以下佈局我怎麼能一個IIS環境中編程註冊一個WCF服務

  • 工程「網絡」
    • Global.asax的(我認爲這個目標的登記內例如,void Application_Start(System.Object sender, System.EventArgs e
    • 的web.config
  • 工程 「WCF」
    • DemoService.cs
    • IDemoService.cs

web.config看起來像這樣

<configuration> 
    <system.serviceModel> 
     <behaviors> 
      <serviceBehaviors> 
       <behavior name="fooBehavior"> 
        <serviceMetadata httpGetEnabled="true" /> 
       </behavior> 
      </serviceBehaviors> 
     </behaviors> 
     <services> 
      <service name="wcf.DemoService" 
        behaviorConfiguration="fooBehavior"> 
       <endpoint address="mex" 
          binding="mexHttpBinding" 
          contract="IMetadataExchange" /> 
       <endpoint address="" 
          binding="wsHttpBinding" 
          contract="wcf.IDemoService" /> 
      </service> 
     </services> 
    </system.serviceModel> 
</configuration> 

所以...現在...某處(如上面提到我想到global.asax)我需要註冊,當瀏覽到URIwcf.DemoService得到解決和mex-請求wcf.IDemoService得到解決閱讀att用來獲取WSDL。

這通常通過創建.svc文件來實現,並把標頭中的第一行,例如:

<%@ ServiceHost Language="C#" Debug="true" Service="wcf.DemoService" %> 

在例如通過

var serviceHost = new ServiceHost(typeof (wcf.DemoService)); 
serviceHost.Open(); 

並與service元素內的host元素結合這一個控制檯應用程序指定URI - 或使用ServiceHost

另一個構造函數過載,但我寧願去一個靜態註冊(或任何web.config註冊適用於IIS 7.5) - 這可能嗎?如果是這樣,怎麼樣?

+0

你想達到什麼目的?你的問題的標題看起來與最後一段無關。 – 2012-07-17 13:55:43

+0

@LadislavMrnka不是真的:一個典型的WCF在IIS中的託管是通過使用一個.svc文件(我已經爲此添加了一個例子)來實現的,而不是通過a實現託管。svc-file我寧願去'global.asax'或'web.config'內註冊一個_static_(_URI_不能改變,除非例如重新編譯 - 與僅移動.svc文件相反)(例如,如果我添加一個'host'元素到'service'元素的一個地址,我會得到一個拒絕訪問的異常) – 2012-07-17 14:06:33

+0

.svc文件已經是靜態的了,因爲你必須和web服務器的管理員能夠重命名它如果您是Web服務器的管理員,則可以更改配置文件,有時甚至可以更改global.asax(如果內聯)。你可以使用.NET 4.0嗎?因爲它提供了你想要的,但是.NET 3.5沒有。 – 2012-07-17 15:03:17

回答

7

WCF 4(.NET 4.0)提供基於代碼的服務註冊和基於配置的服務註冊。基於

代碼的配置由新ServiceRoute通過ASP.NET路由來實現的:

RouteTable.Routes.Add(new ServiceRoute("DemoService", 
          new ServiceHostFactory(), typeof(wcf.DemoService)); 

路由通常與REST服務使用,但它適用於SOAP服務也是如此。

在配置中註冊服務稱爲configuration based activation。您將在web.config中定義虛擬.svc文件:

<serviceHostingEnvironment> 
    <serviceActivation> 
     <add relativeAddress="DemoService.svc" service="wcf.DemoService" /> 
    </serviceActivation> 
</serviceHostingEnvironment> 

在這兩種情況下,因爲基址總是由IIS中承載您的網站指定要定義你的服務只相對路徑。

+0

謝謝,這個很棒!即使它在.NET 4.0之前無法正常工作...... :( – 2012-07-17 18:26:22