尽管未指定安全性,但公共WCF服务需要身份验证

时间:2009-12-03 11:10:23

标签: asp.net wcf web-services

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

在本地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的方法声明)。

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

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

以上所有内容都是在WCF配置中阻止它之前。但是从你的评论到blowdart,看起来你还没有配置WCF安全性。

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

答案 2 :(得分:0)

web.config说什么?您是否在服务本身或目录中进行了身份验证?运输安全是开启还是关闭?消息安全性?

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