用于在WCF中将传输安全性动态添加到客户端端点绑定的通用代码

时间:2015-11-11 21:19:11

标签: wcf wcf-binding wcf-security

是否有任何通用方法可以为WCF服务动态地为客户端端点绑定添加传输安全性?

可以使用proxyObject.Endpoint.Binding属性访问绑定。每个绑定的Security属性特定于每个绑定。

修改:

如果在创建代理后无法更新绑定,是否存在使用传输安全性配置代理绑定的任何通用方法。我使用下面的重载来创建代理。需要根据配置文件中定义的客户端端点和绑定配置创建绑定。

protected ClientBase(绑定绑定,EndpointAddress remoteAddress);

我的代码:

Binding binding;

// Code to create binding using details from configuration file goes here...  

// For example, if configuration uses BasicHttpBinding,  
// then here we will create object of "BasicHttpBinding" and
// set its Security mode as Transport

TServiceProxyInterface serviceProxy = (TServiceProxyInterface)Activator.CreateInstance(
                                         TServiceProxyClass,
                                         binding,
                                         new EndpointAddress(serviceAddress));

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,您希望从配置文件加载配置数据,然后设置安全性。我想你可以这样做:

BasicHttpBinding binding = new BasicHttpBinding("BindingConfigurationName");
binding.Security.Mode = BasicHttpSecurity.Transport;
TServiceProxyInterface serviceProxy = (TServiceProxyInterface)Activator.CreateInstance(
                                     TServiceProxyClass,
                                     binding,
                                     new EndpointAddress(serviceAddress));

此示例使用从配置文件中获取绑定配置名称的BasicHttpSecurity的重载。您应该可以设置安全性,因为您还没有创建代理。

如果你有不同的绑定协议,它会变得有点棘手。在工作中,我们的核心框架在自定义配置部分中使用客户端定义,该部分指定绑定类型以及绑定配置名称(以及其他内容),然后我们使用ChannelFactory<T>创建工厂(或获取它)从缓存(如果已创建)并根据需要生成通道。 switch语句用于选择要创建的绑定类型。

希望这能让你朝着正确的方向前进。请注意,上述代码未经过测试。