此服务的安全设置需要“匿名”身份验证,但不会为承载此服务的IIS应用程序启用它

时间:2009-09-01 08:53:46

标签: wcf wcf-binding wcf-security wcf-client

我正在使用IIS V5.1。集成的Windows身份验证

我有以下网络配置:

<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="wsHttpEndpointBinding">
          <security mode="Transport" />
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="DXDirectory.Service1Behavior"
        name="DXDirectory.DXDirectoryService">
        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="wsHttpEndpointBinding"
          name="wsHttpEndpoint" contract="DXDirectory.IDXDirectoryService" />
        <endpoint address="mex" binding="mexHttpsBinding" bindingConfiguration=""
          name="MexHttpsBindingEndpoint" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DXDirectory.Service1Behavior">
          <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

当我选择在浏览器中查看svc文件时,它将显示以下错误:

例外:
此服务的安全设置需要“匿名”身份验证,但不会为承载此服务的IIS应用程序启用它。

删除Mex端点时会删除此错误。

但是当我尝试在客户端应用程序中添加服务引用时,它会出现以下错误:

网址http://localhost/DXDirectory/DXDirectoryService.svc处的文档未被识别为已知文档类型。

每种已知类型的错误消息可以帮助您解决问题:

HTTP请求未经授权,客户端身份验证方案为“匿名”。从服务器收到的身份验证标头是“Negotiate,NTLM”。

远程服务器返回错误:(401)未经授权。

如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。

1 个答案:

答案 0 :(得分:1)

指定传输安全模式时,WCF需要https。尝试修复它,看看你得到了什么错误。

另请检查您的system.web标记。

你回复“text / html”的回复可能是一个错误页面,所以如果你有可能弄错它,你会得到一个更好的错误信息。