1

我有一个托管在 IIS 上的 WCF 服务。出于商业原因,我无法发布此实例的公共 URL,但我相信您会明白我的意思:

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

http://<domain>/<app-name>/Service.svc/<relative-path>

我怎样才能避免这种情况?我的意思是,我想通过以下方式访问我的服务:

http://<domain>/<app-name>/<relative-path>

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


最后,但这不是超验的,浏览到http://<domain>/<AppName>/Service.svcURL 会显示标准服务信息页面:

有没有办法我也可以防止它被访问?

在此处输入图像描述

4

4 回答 4

5

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

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

<serviceBehaviors>
    <behavior>
        <serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false"/>
    </behavior>
</serviceBehaviors>

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

于 2012-07-11T20:32:15.053 回答
3

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

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

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    
  2. 右键单击项目,单击“添加”->“新建项目”。找到“全球应用类”。这将自动生成一个 Global.asax 文件。

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

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

(更改MyServiceImplementation为 Service1.svc 中的任何类)

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

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

如果未找到这些并且您使用的是 .net 4.5 之前的版本,请确保您使用的是完整安装而不是客户端安装。还要确保您已经添加了这些包引用(右键单击项目,单击添加->引用,找到包名称并确保已选中)。

  1. 重新启动 IIS。现在应该隐藏 Service1.svc(或您的任何名称)文件。
于 2015-01-08T21:56:46.770 回答
1

您可以通过简单地不公开您的服务元数据来实现这一点 - 只需评论端点

 <endpoint address="mex" binding="mexHttpBinding" name="IMetadataExchange_mexHttpBinding" contract="IMetadataExchange" />

根据网址-我完全同意@Edmund Y-他提供了有用的链接

于 2012-07-11T20:19:10.607 回答
0

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

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

无论如何,我想我设法解决了我需要的问题,感谢您的帮助。

于 2012-07-11T23:35:38.703 回答