C# 有时才可能应用TransportWithMessageCredential?

C# 有时才可能应用TransportWithMessageCredential?,c#,wcf,C#,Wcf,我有一个WCF服务,其定义如下: <behaviors> <serviceBehaviors> <behavior name="MyServiceBehaviour"> <serviceCredentials> <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorTy

我有一个WCF服务,其定义如下:

<behaviors>
  <serviceBehaviors>
    <behavior name="MyServiceBehaviour">
      <serviceCredentials>
        <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="MyNamespace.MyUserNamePasswordValidator, MyAssembly" />
      </serviceCredentials>
      <serviceAuthorization principalPermissionMode="Custom" serviceAuthorizationManagerType="MyNamespace.MyServiceAuthorizationManager, MyAssembly">
        <authorizationPolicies>
          <add policyType="MyNamespace.MyAuthorizationPolicy, MyAssembly" />
        </authorizationPolicies>
      </serviceAuthorization>
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <basicHttpBinding>
    <binding name="MyServiceBinding">
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service name="MyNamespace.Service" behaviorConfiguration="MyServiceBehaviour">
    <endpoint address="" contract="MyNamespace.Service" binding="basicHttpBinding" bindingConfiguration="MyServiceBinding" />
  </service>
</services>

这使用
TransportWithMessageCredential
要求每个服务操作请求都提供用户名/密码组合。然而,服务的用户需要能够在不提供凭据的情况下访问一个操作,我一辈子都不知道如何实现这个功能

我们有一个自定义用户名和密码验证器,以及一个自定义授权策略,但是当凭据头中没有提供用户名或密码时,这些类上的任何方法都不会被命中;服务器立即返回错误500错误,文本为“验证消息安全性时出错”


在使用
TransportWithMessageCredential
时,是否可以采用“大部分但不是全部”的方法,如果可以,我应该在哪里实现这一点?

我认为处理像您这样的场景的正常方法是为不安全的操作设置一个单独的端点。@500 InternalServerError不幸的是,由于业务需求,不可能实现。