我最近將Visual Studio升級到2013,現在默認情況下只使用IIS Express(而不是Cassini),並且發現我不能再打我的WCF服務了javascript端點:Myservice.svc/js或/ jsdebug,但直接點擊.svc會正常工作。WCF + MVC + WebAPI處理程序和路由
我發現,如果我刪除我的web.config(其中包含一些ExtensionlessUrlHandler項目)的<處理程序>部分,則會恢復腳本端點的功能。我很好奇除去下列項目會產生什麼影響,以及是否有其他解決方案。
這是我從我的Web.config文件刪除塊:
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
有些情況下,我使用.NET 4.5,MVC 5.1的WebAPI V2.1和WCF都在同一個項目中。基本上是所有組件的最新版本。
更新1: 我也注意到,所有的WebAPI PUT的都回來了,與這些處理器去掉404;所以有些東西顯然缺失。另一個小小的頓悟是,當部署到活動服務器(IIS 7.5 [7.5.7600.16385版))時,一切都很好。因此,Visual Studio 2013集成版本的IIS Express和完整的IIS 7.5安裝程序的路由或處理程序映射必須有所不同。
此外,如果我創建一個全新的ASP.NET Web應用程序並添加一個WCF服務,一切工作正常本地。如果我然後添加一個WebAPI控制器,下面的處理程序部分被添加到web.config並打破所有的WCF調用。當MVC,WCF和WebAPI都是一個應用程序的一部分時,這聽起來更像是微軟默認配置中的一個'bug'。
更新2: 這裏有一個基本的測試用例,任何人都可以重現我遇到的錯誤。
過程重新基地問題: (的WebAPI工作,WCF * .SVC/JS導致404)
- 新建項目 - > Asp.NET Web應用程序,使用Web API模板(包括MVC和Web API參考)
- 添加新的「WCF服務(支持Ajax)項目名爲root 「TestService的」
- 啓動項目。
- 驗證/幫助路工程MVC(呈現幫助頁)
- 驗證GET/API /值的WebAPI(返回值)/ 1作品
- *驗證PUT/API /價值/ 1作品的WebAPI(沒有返回 - 空法)*
- 驗證TestService的。 svc可以擊中WCF(顯示元數據頁面)
- *驗證TestService.svc/js FAILS與404爲WCF - 路由問題!*
部分修復: (PUT的WebAPI打破,WCF可以使JS請求)
- 從上面繼續...
- 更新Web.config文件,並註釋掉<處理>部分
- 啓動項目。
- 驗證/幫助路工程MVC(呈現幫助頁)
- 驗證GET/API /價值/ 1作品的WebAPI(返回值)
- *驗證PUT/API /價值/ 1失敗與404A WebApi - 路由問題! *
- 驗證TestService.svc可以命中WCF(元數據顯示頁)
- *驗證TestService.svc/JS渲染所需的JavaScript的WCF *
IIS Express並沒有真正執行IIS行爲的正確再現,也沒有爲替代方案提供許多好處。使用ASP.NET開發服務器會發生什麼? – CodeCaster
我沒有單獨安裝IIS Express,只是Visual Studio默認安裝/運行的一個。 – bmherold
我明白,但你可以改變你的項目屬性。 – CodeCaster