我最近将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