是否有任何通用方法可以为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));
答案 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
语句用于选择要创建的绑定类型。
希望这能让你朝着正确的方向前进。请注意,上述代码未经过测试。