IIS上的WCF服务。 如何摆脱URL路径中的“Service.svc”组件?

我在IIS上托管了WCF服务。 出于商业原因,我不能发布此实例的公共URL,但我相信你会得到我的意思:

问题是,为了到达我的端点,似乎我已将Service.svc作为路径段的一部分包含在内 ,即我必须使用这样的URL:

http:////Service.svc/

我怎么能避免这个? 我的意思是,我想通过以下方式访问我的服务:

http:////

当我在开发过程中自我托管服务时,我完全能够做到这一点。


最后,但这不是那么超然,浏览到http:////Service.svc URL会显示标准服务信息页面:

有没有办法可以防止这种情况发生?

在此处输入图像描述

第一部分:没有URL的“service.svc”部分,您可以使用ASP.NET路由function,而ServiceRoute类 – 路由的前缀将是空字符串。 http://blogs.msdn.com/b/endpoint/archive/2010/01/25/using-routes-to-compose-wcf-webhttp-services.aspx上的post展示了如何做到这一点。

第二部分:为了防止显示“帮助”页面,您可以通过配置(或使用自定义服务主机工厂的代码)禁用它。 以下是通过配置完成的方法:

      

该行为没有“name”属性,这意味着它将用作服务的默认行为。

像我这样的.net newbs的分步说明:

  1. 打开Web.config文件并确保aspNetCompatibilityEnabled设置为true:

      
  2. 右键单击该项目,单击Add-> New Item。 找到“全球应用程序类”。 这将自动生成Global.asax文件。

  3. 打开Global.asax文件并确保Application_Start方法如下所示:

     protected void Application_Start(object sender, EventArgs e) { RouteTable.Routes.Add(new ServiceRoute("", new ServiceHostFactory(), typeof(MyServiceImplementation))); } 

(使用Service1.svc中调用的任何类更改MyServiceImplementation

  1. 确保您已添加以下参考:

     using System.ServiceModel.Activation; using System.Web.Routing; 

如果找不到这些并且您使用的是早于.net 4.5的内容,请确保使用完整安装而不是客户端安装。 还要确保已添加这些软件包引用(右键单击项目,单击添加 – >引用,找到软件包名称并确保已选中)。

  1. 重启IIS。 现在应该隐藏Service1.svc(或任何你的名字)文件。

您只需不公开您的服务元数据即可达到此目的 – 只需注释端点即可

   

根据url – 我只是同意@Edmund Y–他提供了有用的链接

我只是想知道我所做的实施@ carlosfigueira的建议是否是最干净的事情:

我最终使用Global.asax文件并在Application_Start处理程序中添加了一个带有routePrefixServiceRoute 。 我不太清楚为什么我正在使用WebServiceHostFactory vs ServiceHostFactory正如我在@Edmund Y共享的文章中所读到的那样: ServiceRoute + WebServiceHostFactory杀死了WSDL生成? 如何使用?wsdl创建无扩展的WCF服务 。

无论如何,我想我设法解决了我需要的东西,感谢你的帮助。