【问题标题】:Public WCF service requires authentication, despite no security being specified公共 WCF 服务需要身份验证,尽管没有指定安全性
【发布时间】:2009-12-03 11:10:23
【问题描述】:

我在一个名为 WebServices 的子文件夹中的 ASP.NET 站点上发布了 WCF 服务 (MyService.svc)。

在本地 ASP.NET Web 服务器上运行时,它可以正常工作。例如,当发布到 IIS 运行的站点并尝试访问 /WebServices/MyService.svc/jsdebug 时,我得到了 401 Unauthorized。网站的其他部分运行良好。

有人知道为什么吗?


这里是MyService.svc的内容:

<%@ServiceHost 
    Language="C#"
    Debug="true" 
    Service="MyApp.Core.MyService, MyApp.Core"
    Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"
%>

MyApp.Core.MyService 是一个实现IMyService 的类(它具有ServiceContract 属性和带有OperationContract 属性的方法声明)。

【问题讨论】:

    标签: asp.net wcf web-services


    【解决方案1】:

    默认情况下,WCF 服务将执行 Windows 身份验证,除非另有配置。我认为以下应该可以解决问题:

      <bindings>
        <wsHttpBinding>
          <binding name="wsHttp">
            <security mode="None"/>
          </binding>
        </wsHttpBinding>
      </bindings>
    

    ..并配置您的端点以使用此绑定配置。

    【讨论】:

      【解决方案2】:

      呼叫被阻止的可能有 3 个地方:

      • IIS 设置,检查匿名身份验证是否启用
      • NTFS 文件访问设置,检查作为应用程序池身份的用户是否具有读取访问权限。
      • web.config,检查验证模式是否为None。

      以上所有内容都是在 WCF 配置中可能阻止它之前。但从您对吹镖的评论看来,您还没有配置 WCF 安全性。

      还要检查您的 IIS 日志中是否存在 401 错误。并检查此post 是否相关。

      【讨论】:

        【解决方案3】:

        web.config 是怎么说的?您是否在服务本身或目录上进行了身份验证?交通安全是打开还是关闭?消息安全?

        svc 文件不配置安全性,这是配置文件的一部分

        【讨论】:

        • 在站点上任何地方都没有使用 HTTP 身份验证的配置。 Web.config 没有特定于服务的配置(.svc 文件使用 WCF 服务的“自动配置”方法)。
        猜你喜欢
        • 1970-01-01
        • 2010-09-16
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        • 2010-11-04
        • 2010-10-31
        • 1970-01-01
        • 2010-12-06
        相关资源
        最近更新 更多