【发布时间】:2019-03-11 11:38:06
【问题描述】:
我的站点调用一个需要一组非常复杂的身份验证协议的服务(我们称之为 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>
配置一个endpointBehavior来使用它:
<endpointBehaviors>
<behavior name="FooServiceCredentialsBehavior">
<FooServiceCredentials />
</behavior>
并设置端点以使用它:
<endpoint address="https://fooservice.com/bar"
behaviorConfiguration="FooServiceCredentialsBehavior"
contract="FooService_PortType" />
以上所有功能都完美无缺,多年来一直为许多客户服务。
我现在将这些东西部署到无法访问 CRL 服务器的系统中,并且自定义行为包括启用了验证的服务证书。所以我需要关闭验证。但是我无法修改 FooServiceCredentials 类。如果可以,我会这样做:
base.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
但我做不到。
我想知道是否可以添加应用于自定义凭据行为的 WCF 配置来执行相同的操作。像这样的:
<endpointBehaviors>
<behavior name="FooServiceCredentialsBehavior">
<FooService>
<ServiceCertificate>
<authentication certificateValidationMode="None"/>
</ServiceCertificate>
</FooService>
</behavior>
这个确切的 XML 不起作用(服务甚至不会启动),但我希望有一些神奇的方法可以安排这些标签以仅从配置中禁用服务证书验证。
有可能吗?怎么样?
【问题讨论】:
-
根据我多年前对 WCF 的理解,在代码中完成的所有操作都应该具有等效的配置。阅读了一些标签,发现了docs.microsoft.com/en-us/dotnet/framework/configure-apps/…。
-
您的示例拼写错误是否存在命名差异?
标签: c# .net wcf servicebehavior