【问题标题】:WCF Web service Anonymous AuthenticationWCF Web 服务匿名身份验证
【发布时间】:2013-07-03 18:06:37
【问题描述】:

我在我们的站点上有一个托管在 IIS 7.0 上的实用程序 Web 服务。该服务由桌面客户端使用,由于它是一个实用服务,用户应该能够在不输入凭据的情况下访问它,因此在 IIS 中将身份验证类型设置为Anonymous

现在的问题是服务 URL 可以被公众访问,并且在 Web 浏览器中输入它会将用户定向到此页面:

即使这不会为用户提供任何可能具有潜在危险的有用信息,但如果我可以隐藏该页面以防止公众访问,那仍然会很好。那么有没有办法阻止用户访问此页面,但仍然将服务本身公开?我知道 IIS 7 启用 URL 重定向,但我不知道添加时从 VS 发送的请求是否服务引用实际上与输入 URL 时从 Web 浏览器发送的请求有任何不同。任何帮助表示赞赏。

编辑

如 cmets 部分所述,一个选项是通过在运行时创建 ChannelFactory 来访问服务,但这需要将合约暴露给客户端,这是我试图避免的。

【问题讨论】:

  • @Jonesy 感谢您的链接,但该问题的答案基本上关闭了服务检测,我仍然需要能够从 Visual Studio 中引用它。
  • 您需要服务参考吗?可以动态添加吗?
  • @Jonesy “动态”是指创建ChannelFactory?但在那种情况下,我必须向客户公开合同,对吧?
  • 是的,你需要

标签: c# wcf web-services iis-7


【解决方案1】:

我猜你想禁用的是 HTML 页面。使用ServiceDebug 元素来实现。

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior>
                <serviceDebug httpHelpPageEnabled="false" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

编辑:禁用 WSDL:

<serviceMetadata httpGetEnabled="false" />

【讨论】:

  • 这仍然暴露了服务的结构......但绝对比看到那个页面更好。暂时 +1,如果没有人想出一种完全阻止用户看到该页面的方法,将其标记为答案
  • @PoweredByOrange: This still exposes the structure of the service though - 你想放弃add service reference 的能力吗?
  • 就是这样,我不想失去那个选项。
  • @PoweredByOrange:那你说的exposes the structure是什么意思?只有当服务通过WSDLmex 端点公开元数据时,客户端才能add service reference。你想做什么?
  • 这是我最初的问题:有没有办法告诉 IIS 仅在请求来自“Visual Studio 参考”源时才公开元数据,而忽略从 Web 浏览器发送的请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 2013-01-31
相关资源
最近更新 更多