【问题标题】:Getting an Security setting exception while accessing a WCF service访问 WCF 服务时获取安全设置异常
【发布时间】:2011-01-18 08:15:26
【问题描述】:

以下是我的 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 端点,但现在很明显我无法在客户端创建代理。

请让我知道我哪里错了?

【问题讨论】:

  • 服务是否托管在 IIS 中?
  • 您如何访问该服务?如果使用你的配置,它应该只支持 HTTPS。
  • 我只想支持 HTTP,那我应该改变我的配置吗?

标签: wcf wcf-binding wcf-security


【解决方案1】:

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

编辑:

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

【讨论】:

  • 我已经完成了上述更改。就像将模式设置为 TansportCredentialOnly 并且我正在使用基本身份验证。 httpGetEnable 标志设置为 True。但是我仍然无法访问该服务。但是,如果我删除 Mex 端点,则可以访问 WCF 服务,但我无法公开元数据,因此客户端将无法创建代理!我想知道哪个选项只允许通过 HTTP 检索元数据。
  • 如果你有 httpGetEnabled,你可以写 WMWebService.svc?wsdl,你会得到元数据。
  • 有什么方法可以让我的 wcf 服务公开元数据,而无需删除具有相同或任何其他配置的 mex 端点?
  • 我想这里的问题是托管在 IIS 中的 WCF 不喜欢一个基于 HTTP 的端点是安全的,一个是不安全的。我现在不能检查这个。如果我是对的,那么解决方案也是要求对 mex 端点进行基本身份验证,但这意味着自定义绑定。
  • 感谢 Ladislav,在我对 mex 端点使用相同的绑定后,我的问题得到了解决。感谢您的帮助!!
猜你喜欢
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多