2011-09-08 17 views
5

我能一個ServiceRoute添加到我的WCF .NET 4.0的服務與.svc擴展名:WCF通過以下帖子刪除.svc擴展

  1. Post 1
  2. Post 2

但是我該如何刪除「.svc」擴展名?

我的實際服務文件使用csw.svc稱爲Catalog.svc

而且下面那些帖子我能夠訪問相同的服務後

我的Global.asa的.cs:

protected void Application_Start(object sender, EventArgs e) 
{ 
    RegisterRoutes(RouteTable.Routes); 
} 

private void RegisterRoutes(RouteCollection routes) 
{ 
    routes.Add(new ServiceRoute("csw.svc", new WebServiceHostFactory(), typeof(CSW_ebRIM_WebService.Catalog))); 
} 

我的web.config:

... 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" > 
    <serviceActivations> 
     <add factory="System.ServiceModel.Activation.ServiceHostFactory" 
      relativeAddress="~/csw.svc" 
      service="CSW_ebRIM_WebService.Catalog"/> 
    </serviceActivations>   
</serviceHostingEnvironment> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    </modules> 
    <handlers> 
     <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd"/> 
    </handlers> 
</system.webServer> 

但是如果我來自全球和web.config我得到和錯誤消息,刪除.svc擴展:

第 註冊relativeAddress'〜/ CSW「system.serviceModel/serviceHostingEnvironment/ 配置文件中的serviceActivations'沒有擴展名。

如果我把後面的.svc擴展的web.config,只有從全局刪除它,我得到:

值不能爲空。 參數名稱:合同

描述:在執行當前Web請求時發生未處理的異常。請查看堆棧跟蹤以獲取有關 錯誤以及源代碼的更多信息。

異常詳細信息:System.ArgumentNullException:值不能爲空。 參數名稱:合同

什麼給?我怎樣才能刪除.svc擴展名?

+0

如果刪除.svc擴展名,IIS將如何知道要使用哪個處理程序請求? –

回答

5

羅恩·雅各布斯對這一主題的偉大的職位 - 你需要使用一個ServiceRoute來實現你在找什麼:

當他顯示了他的後續發佈,WCF Data Services and ServiceRoute,生成的服務文檔確實也反映了更改並顯示了服務URL,但不包含.svc擴展。

這東西需要ASP。NET路由支持,它完全存在於.NET 4中(如果需要,可以在.NET 3.5 SP1中插入)

+0

感謝帖子。這很棒,很簡單。我只是不明白我做錯了什麼,因爲我使用ServiceRoute,因爲他描述沒有成功。 – capdragon

+1

@capdragon:我在你的代碼中看到一個差異:在你的配置文件的節中,你爲'.svc'擴展名添加了'ServiceHostFactory' - 這將表明一個SOAP服務(例如'basicHttpBinding '或'wsHttpBinding'或類似的東西)。然而,在你的'global.asa.cs'中,你正在使用'webHttpBinding'註冊'WebServiceHostFactory',這是用於基於REST的服務的工廠......不幸的是,你沒有顯示相關的配置部分來顯示我們**什麼**綁定您的服務應該使用.... –

+2

感謝馬克......就是這樣,在全局文件中更改工廠以匹配web.config「ServiceHostFactory」中的工廠之後,它全部現在工作正常。再次感謝! – capdragon