C# WCF Web服务匿名身份验证

C# WCF Web服务匿名身份验证,c#,wcf,web-services,iis-7,C#,Wcf,Web Services,Iis 7,我在我们的网站上有一个托管在IIS7.0上的实用Web服务。此服务由桌面客户端使用,并且由于它是一个实用程序服务,用户应该能够访问它而无需输入凭据,因此在IIS中将身份验证类型设置为Anonymous 现在的问题是,公共用户可以访问服务URL,在Web浏览器中输入该URL将引导用户访问此页面: 尽管这不会给用户提供任何可能有潜在危险的有用信息,但如果我能将页面隐藏起来,不让公众访问,那就太好了。那么,有没有办法阻止用户访问此页面,但仍然公开服务本身?我知道IIS 7启用URL重定向,但我不知道

我在我们的网站上有一个托管在IIS7.0上的实用Web服务。此服务由桌面客户端使用,并且由于它是一个实用程序服务,用户应该能够访问它而无需输入凭据,因此在IIS中将身份验证类型设置为
Anonymous

现在的问题是,公共用户可以访问服务URL,在Web浏览器中输入该URL将引导用户访问此页面:

尽管这不会给用户提供任何可能有潜在危险的有用信息,但如果我能将页面隐藏起来,不让公众访问,那就太好了。那么,有没有办法阻止用户访问此页面,但仍然公开服务本身?我知道IIS 7启用URL重定向,但我不知道添加服务引用时从VS发送的请求是否与输入URL时从Web浏览器发送的请求有任何不同。感谢您的帮助

编辑
注释部分讨论的一个选项是,在运行时通过创建一个
通道工厂来访问服务,但这需要将合同公开给客户端,这正是我试图避免的。

我想您想要禁用的是HTML页面。使用
ServiceDebug
元素执行此操作

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

编辑:要禁用WSDL:

<serviceMetadata httpGetEnabled="false" />


@Jonesy感谢您的链接,但是这个问题的答案基本上关闭了服务检测,我仍然需要能够从Visual Studio中引用它。您需要服务引用吗?你能动态添加它吗?@Jonesy所说的“动态”是指创建一个
通道工厂
?但在这种情况下,我必须向客户公开合同,对吗?是的,您需要这样做,但这仍然会公开服务的结构。。。但肯定比看到那一页要好+1目前,如果没有人能想出一个方法来完全阻止用户看到这个问题,我会把它标记为答案page@PoweredByOrange:
这仍然暴露了服务的结构,尽管
-您想失去添加服务引用的功能吗?
,我不想失去这个选项。@PoweredByOrange:那么你所说的
是什么意思呢?只有当服务通过
WSDL
mex
端点公开元数据时,客户端才能
添加服务引用。您想做什么?这是我最初的问题:是否有一种方法可以告诉IIS仅在请求来自“visual studio引用”源时公开元数据,而忽略从Web浏览器发送的请求。