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