访问WCF服务时获取安全性设置异常

时间:2011-01-18 08:15:27

标签: wcf wcf-binding wcf-security

以下是我的WCF服务的绑定配置。

  • 匿名访问:关闭
  • 基本身份验证:开启
  • 集成Windows身份验证:关闭!!

支持HTTP协议。

访问我的WCF服务时出现以下异常:

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

<system.serviceModel>

    <bindings>

          <basicHttpBinding>

                <binding name="MyBinding">

                      <security mode="TransportCredentialOnly">                           

                            <transport clientCredentialType ="Basic" />

                      </security>

                </binding>

          </basicHttpBinding>

    </bindings>

<services>

        <service behaviorConfiguration="WMWcfWebServiceLib.Service1Behavior"

          name="WMWcfWebServiceLib.WMWcfWebService">

              <endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyBinding"

                contract="WMWcfWebServiceLib.IWMWebService">                    



              </endpoint>

              <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

              <host>

                    <baseAddresses>

                          <add baseAddress="http://localhost:8731/Design_Time_Addresses/WMWcfWebServiceLib/Service1/" />

                    </baseAddresses>

              </host>

        </service>

  </services>

<behaviors>

  <serviceBehaviors>

    <behavior name="WMWcfWebServiceLib.Service1Behavior">

      <!-- To avoid disclosing metadata information, 

      set the value below to false and remove the metadata endpoint above before deployment -->

      <serviceMetadata httpGetEnabled="True"/>

      <!-- To receive exception details in faults for debugging purposes, 

      set the value below to true.  Set to false before deployment 

      to avoid disclosing exception information -->

      <serviceDebug includeExceptionDetailInFaults="False" />

    </behavior>

  </serviceBehaviors>

</behaviors>

请帮助!!

修改

我可以通过Web浏览器访问WCF服务,并进行以下更改:

将安全模式更改为TransportCredentialOnly并删除Mex端点,但现在很明显我无法在客户端创建代理。

请告诉我错误的地方?

1 个答案:

答案 0 :(得分:1)

如果您只想支持HTTP,则根本不使用您的配置,因为mode="Transport"需要HTTPS。首先找到为什么不使用config(可能在service元素中输入错误的类型名称)。接下来将安全模式更改为TransportCredentialOnly。但请注意TransportCredentialOnly +基本身份验证意味着HTTP请求将包含纯文本Windows用户名和密码。在大多数情况下,此类实施不会通过任何安全审核。

编辑:

如果您仍然支持服务元数据行为中的httpGetEnabled,则可以创建不带mex端点的代理。