C# WCF&x2B;MVC&x2B;WebAPI处理程序和路由
我最近将Visual Studio升级到2013,现在默认情况下它只使用IIS Express(而不是Cassini),并且发现我无法再访问我的WCF服务javascript端点:Myservice.svc/js或/jsdebug,但是直接访问.svc就可以了 我发现,如果删除web.config的部分(其中包括一些ExtensionlessUrlHandler项),脚本端点的功能就会恢复。我很好奇删除以下项目会产生什么影响,以及是否有替代解决方案 以下是我从Web.config中删除的块:C# WCF&x2B;MVC&x2B;WebAPI处理程序和路由,c#,asp.net-mvc,wcf,asp.net-web-api,asp.net-web-api-routing,C#,Asp.net Mvc,Wcf,Asp.net Web Api,Asp.net Web Api Routing,我最近将Visual Studio升级到2013,现在默认情况下它只使用IIS Express(而不是Cassini),并且发现我无法再访问我的WCF服务javascript端点:Myservice.svc/js或/jsdebug,但是直接访问.svc就可以了 我发现,如果删除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>
在某种背景下,我在一个项目中使用.NET4.5、MVC5.1、WebAPIv2.1和WCF。基本上是所有组件的最新版本
更新1:
我还注意到,任何WebAPI PUT都以404的形式出现,并且删除了这些处理程序;所以很明显有些东西不见了。另一个小启示是,当部署到实时服务器(IIS 7.5[Version 7.5.7600.16385])时,一切都很好。因此,Visual Studio 2013集成版IIS Express和完整的IIS 7.5设置的路由或处理程序映射必须有所不同
另外,如果我创建了一个全新的ASP.NET web应用程序并添加了WCF服务,那么在本地一切都会正常工作。如果我随后添加一个WebAPI控制器,下面的handlers部分将添加到web.config并中断所有WCF调用。当MVC、WCF和WebAPI都是一个应用程序的一部分时,这听起来更像是微软默认配置中的一个“bug”
更新2:
这是一个基本的测试用例,任何人都可以遵循它来重现我的错误
重新创建基本问题的过程:
(WebAPI工作,WCF*.svc/js结果为404)
这实际上是一个mvc路由问题。请如下修改~/App_Start/RouteConfig.cs。您需要保留ExtensionlessUrlHandler,以便mvc路由在无扩展URL上正常运行
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//This line is the addition.
routes.IgnoreRoute("{resource}.svc/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
IIS Express并没有真正执行IIS行为的正确复制,也没有提供比其他方法更多的好处。使用ASP.NET开发服务器会发生什么?我没有单独安装IIS Express,只是使用Visual Studio默认安装/运行的IIS Express。我理解,但您可以在项目的属性中更改它ies。这些是VS2013选项:哦,天哪,它们真的削弱了这一个。看,IIS Express有它的怪癖,但是如果你删除了处理程序,然后它就可以工作了,为什么不把它留在那里呢?嗯,我实际上在我的RouteConfig的开始就有这一行,处理程序就位后,我的*.svc/js仍然是404ing。而且,处理程序删除后,我的*.svc/js仍然是404inged,我也注意到任何WebAPI PUT都是404;所以我想你是对的,缺少了一些东西。你能举一个你使用web api的例子吗。你在使用属性路由吗?我正在尝试重新调整你的情况。根据对你问题的第一次编辑,我添加了一个带有简单get方法和eve的web api控制器rything对我仍然有效。感谢Kenneth-我在上面添加了“更新2”,以及我在一个空项目中使用的确切步骤,以重新创建我的问题”。我正在使用Windows8.1和VisualStudio2013以及内置的IIS Express,并且只执行所示的步骤。