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的分步说明:
-
打开
Web.config
文件并确保aspNetCompatibilityEnabled
设置为true: -
右键单击该项目,单击Add-> New Item。 找到“全球应用程序类”。 这将自动生成Global.asax文件。
-
打开Global.asax文件并确保
Application_Start
方法如下所示:protected void Application_Start(object sender, EventArgs e) { RouteTable.Routes.Add(new ServiceRoute("", new ServiceHostFactory(), typeof(MyServiceImplementation))); }
(使用Service1.svc中调用的任何类更改MyServiceImplementation
)
-
确保您已添加以下参考:
using System.ServiceModel.Activation; using System.Web.Routing;
如果找不到这些并且您使用的是早于.net 4.5的内容,请确保使用完整安装而不是客户端安装。 还要确保已添加这些软件包引用(右键单击项目,单击添加 – >引用,找到软件包名称并确保已选中)。
- 重启IIS。 现在应该隐藏Service1.svc(或任何你的名字)文件。
您只需不公开您的服务元数据即可达到此目的 – 只需注释端点即可
根据url – 我只是同意@Edmund Y–他提供了有用的链接
我只是想知道我所做的实施@ carlosfigueira的建议是否是最干净的事情:
我最终使用Global.asax文件并在Application_Start
处理程序中添加了一个带有routePrefix的ServiceRoute
。 我不太清楚为什么我正在使用WebServiceHostFactory
vs ServiceHostFactory
正如我在@Edmund Y共享的文章中所读到的那样: ServiceRoute + WebServiceHostFactory杀死了WSDL生成? 如何使用?wsdl创建无扩展的WCF服务 。
无论如何,我想我设法解决了我需要的东西,感谢你的帮助。
- 你能在一个项目中混合使用.net语言吗?
- 用于创建工作项模板的TFS客户端API?
- 如何设置测试TCP连接超时?
- 在LINQ to SQL中搜索两列?
- MemoryStream.WriteTo(Stream destinationStream)与Stream.CopyTo(Stream destinationStream)
- “DataBinding:’index + NewsItem’不包含名为’Link’的属性,但属性存在(不是错字)
- ObservableCollection比ObjectSet更好
- 通过PInvoke传递托管byte 数组以由Win32填充时,是否需要固定?
- .NET Start Process具有更高的权限