添加路由以消除REST服务中的.SVC不起作用

时间:2011-03-25 18:37:10

标签: c# .net wcf rest

我正在构建虚拟WCF REST服务,目的是为了了解它是如何工作的(准备真正的服务构建)。我使用REST服务并使用JSON和POX格式进行响应。但是,我无法使路由解决方案工作,以消除“.svc”文件。我在Win Server 2008 R2上使用VS 2010,WCF 4.0和IIS 7.5。

现在URL的工作原理为:“/ api /rest / atrest.svc / json / myMethod”,但我想要“/ api / rest / json / myMethod”。我在SO和其他地方发现了许多文章声称删除了“.svc”文件。我相信我按照指示进行了设置,但由于Global.asax文件中的错误,项目无法构建。

它说要将以下内容添加到Application_Start函数中:

RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), 
    typeof(RestService)));

我还在web.config中添加了以下内容:

 <modules runAllManagedModulesForAllRequests="true">
     <add name="UrlRoutingModule"
          type="System.Web.Routing.UrlRoutingModule, 
      System.Web.Routing, Version=4.0.0.0, 
      Culture=neutral, 
      PublicKeyToken=31BF3856AD364E35" />

 </modules>
 <handlers>
     <add name="UrlRoutingHandler"
        preCondition="integratedMode"
        verb="*" path="UrlRouting.axd"
        type="System.Web.HttpForbiddenHandler, 
     System.Web, Version=4.0.0.0, Culture=neutral, 
     PublicKeyToken=b03f5f7f11d50a3a" />
 </handlers>

我还将aspNetCompatibility行添加到web.config和svc.cs文件中的类之上。

问题是我甚至无法建立项目。当我将RouteTable.Routes.Add行添加到global.asax并构建它时,我收到以下错误:

  

类型   'System.ServiceModel.Activation.ServiceHostFactory'   在一个不是的程序集中定义   引用。您必须添加引用   到装配   “System.ServiceModel.Activation,   版本= 4.0.0.0,文化=中立,   公钥= 31bf3856ad364e35' 。

     

类型或命名空间名称   无法找到'ServiceRoute'(是   你错过了使用指令或   装配参考?)

为什么会失败的任何想法?

1 个答案:

答案 0 :(得分:5)

确保在项目中引用“System.ServiceModel.Activation,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”,如果确保将其添加到web.config文件中。 - Joakim Mar 25 at 19:03