C# 您可以使用WCF配置更改BehaviorExtension吗?

C# 您可以使用WCF配置更改BehaviorExtension吗?,c#,.net,wcf,servicebehavior,C#,.net,Wcf,Servicebehavior,我的站点调用一个需要一组非常复杂的身份验证协议的服务(我们称之为FooService)。协议都封装在自定义ClientCredentials行为中,该行为在代码中声明如下: class FooServiceCredentialsBehavior : ClientCredentials { public FooServiceCredentialsBehavior() { //Set up service certificate var cert =

我的站点调用一个需要一组非常复杂的身份验证协议的服务(我们称之为FooService)。协议都封装在自定义ClientCredentials行为中,该行为在代码中声明如下:

class FooServiceCredentialsBehavior : ClientCredentials 
{
    public FooServiceCredentialsBehavior()
    {
        //Set up service certificate
        var cert = CertStore.FindBySerialNumber(certSerialNumber);
        base.ServiceCertificate.DefaultCertificate = cert;
    }
}
然后,我们注册行为扩展:

  <behaviorExtensions>
    <add name="FooServiceCredentials" type="MyProject.Namespace.FooService, MyProject" />
  </behaviorExtensions>
但我不能

我想知道是否可以添加应用于自定义凭据行为的WCF配置,以执行相同的操作。大概是这样的:

<endpointBehaviors>
    <behavior name="FooServiceCredentialsBehavior">
      <FooService>
          <ServiceCertificate>
              <authentication certificateValidationMode="None"/>
          </ServiceCertificate>
      </FooService>
    </behavior>
<behavior name="FooServiceCredentialsBehavior">
  <clientCredentials type="FooNamespace.FooServiceCredentialsBehavior, FooAssemblyName">
      <serviceCertificate>
        <authentication certificateValidationMode="None" revocationMode="NoCheck" />
      </serviceCertificate>
  </clientCredentials>
</behavior>

这个确切的XML不起作用(服务甚至不会启动),但我希望有一些神奇的方法来安排这些标记,以便仅从配置中禁用服务证书验证


可能吗?怎么做?

官方文件说这是可能的。请检查以下链接:

我认为对于behaviorExtension配置,您应该可以使用以下配置,因为您继承了ClientCredentials:

<behavior name="FooServiceCredentialsBehavior">
  <FooServiceCredentials>
      <serviceCertificate>
        <authentication certificateValidationMode="None" revocationMode="NoCheck" />
      </serviceCertificate>
  </FooServiceCredentials>
</behavior>

如果这不起作用,则有另一个可能的选项,无需使用behaviorExtension并直接在clientCredentials配置中指定您的类,如下所示:

<endpointBehaviors>
    <behavior name="FooServiceCredentialsBehavior">
      <FooService>
          <ServiceCertificate>
              <authentication certificateValidationMode="None"/>
          </ServiceCertificate>
      </FooService>
    </behavior>
<behavior name="FooServiceCredentialsBehavior">
  <clientCredentials type="FooNamespace.FooServiceCredentialsBehavior, FooAssemblyName">
      <serviceCertificate>
        <authentication certificateValidationMode="None" revocationMode="NoCheck" />
      </serviceCertificate>
  </clientCredentials>
</behavior>


根据我多年前对WCF的理解,在代码中完成的每件事都应该有一个配置等价物。读了一些标签,发现了。这些命名差异在你的示例打字错误中吗?第一个选项正是我所需要的,而且很有效!这是个奇迹!谢谢你@AlesD。
<behavior name="FooServiceCredentialsBehavior">
  <clientCredentials type="FooNamespace.FooServiceCredentialsBehavior, FooAssemblyName">
      <serviceCertificate>
        <authentication certificateValidationMode="None" revocationMode="NoCheck" />
      </serviceCertificate>
  </clientCredentials>
</behavior>