可以实现。我们使用双向证书认证进行类似的操作 - 服务证书和在某些情况下客户端证书是作为自动发现/单点登录机制的一部分从中央机构获取的。
不清楚证书将在什么上下文中使用,但在所有情况下,您需要做的是定义自己的行为和行为元素,派生自在System.ServiceModel.Description
命名空间中接受该证书的特定行为/元素。我暂时假设它是客户端凭据。首先,您需要编写以下行为:
public class MyCredentials : ClientCredentials
{
public override void ApplyClientBehavior(ServiceEndpoint endpoint,
ClientRuntime behavior)
{
ClientCertificate.Certificate = GetCertificateFromNetwork();
}
protected override ClientCredentials CloneCore()
{
}
}
现在,您需要创建一个可以放入XML配置文件中的元素:
public class MyCredentialsExtensionElement : ClientCredentialsElement
{
protected override object CreateBehavior()
{
return new MyCredentials();
}
public override Type BehaviorType
{
get { return typeof(MyCredentials); }
}
}
在此之后,您可以将该策略添加到WCF配置中:
<behaviors>
<endpointBehaviors>
<behavior name="MyEndpointBehavior">
<myCredentials/>
</behavior>
</endpointBehaviors>
</behaviors>
补充说明:几乎忘了提到,您需要注册扩展:
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="myCredentials"
type="MyAssembly.MyCredentialsExtensionElement, MyAssembly,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
</system.serviceModel>
希望这能有所帮助。如果需要更多关于所有这些类的排列以及背后发生的事情的细节,请阅读
使用自定义行为扩展WCF。
SetCertificate()
?有什么区别吗? - ashes999X509Certificate
。只有在您的证书已经在本地存储之一中时,它才有用,而这在此明确不是情况。 - Aaronaught