WCF删除.svc扩展名

cap*_*gon 6 .net wcf visual-studio-2010

我可以通过以下帖子将ServiceRoute添加到我的WCF .net 4.0服务,扩展名为.svc:

  1. 发布1
  2. 发布2

但是,如何删除".svc"扩展名?

我的实际服务文件名为Catalog.svc

在关注这些帖子后,我可以使用csw.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)));
}
Run Code Online (Sandbox Code Playgroud)

我的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>
Run Code Online (Sandbox Code Playgroud)

但是,如果我.svc从全局和web.config我得到的错误中删除扩展并且错误说:

配置文件中"system.serviceModel/serviceHostingEnvironment/serviceActivations"部分下的注册relativeAddress'〜/ csw'没有扩展名.

如果我把.svc扩展名放回去web.config并且只从全局删除它我得到:

值不能为空.参数名称:合同

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.ArgumentNullException:Value不能为null.参数名称:合同

是什么赋予了?如何删除.svc扩展程序?

mar*_*c_s 6

Ron Jacobs在这个主题上发表了一篇很棒的文章 - 你需要使用a ServiceRoute来实现你想要的东西:

正如他在后续帖子WCF数据服务和ServiceRoute中所显示的那样,生成的服务文档确实也反映了更改并显示了没有.svc扩展名的服务URL .

这个东西需要ASP.NET路由支持,它完全存在于.NET 4中(如果需要,可以在.NET 3.5 SP1中使用)

  • @capdragon:我看到你的代码中存在一个差异:在你的配置的`<serviceActivations>`部分,你要为`.svc`扩展添加`ServiceHostFactory` - 这表示一个SOAP服务(例如`basicHttpBinding`或者`wsHttpBinding`或类似的东西).然而,在你的`global.asa.cs`中,你正在注册`WebServiceHostFactory`,这是使用`webHttpBinding`的基于REST服务的工厂...不幸的是,你没有显示相关的配置部分来显示我们**你的服务应该使用什么**绑定.... (2认同)
  • 谢谢Mark ...就是这样,在更改全局文件中的工厂以匹配web.config"ServiceHostFactory"中的工厂之后,现在一切正常.再次感谢! (2认同)