我需要为我的WCF客户端端点添加自定义行为扩展。我尝试通过配置执行此操作,但是被WFC配置无法正确解析类型名称时经常提到的错误所困扰。那么我可以以编程方式执行此操作吗?
我无法在运行时修改配置节,因为它们是只读的。我知道如果我得到客户端代理的实例(即ClientBase),我可以向其Endpoint.Behaviors添加我的自定义行为的实例。但是,我必须为每个实例执行此操作。
我可以全局访问端点并预先添加它们(例如在Global.asax中),还是将这些端点实例化并暂时丢弃?
答案 0 :(得分:14)
您应该能够使用以下代码将行为添加到客户端:
IMyEndpointBehavior behavior = client.Endpoint.Behaviors.Find<IMyEndpointBehavior>();
if(behavior == null)
{
client.Endpoint.Behaviors.Add(new MyEndpointBehaviorImplementation());
}
第一行将检查是否已应用该行为以避免两次应用它。如果它尚未应用(.Find()
调用返回null),则可以通过编程方式将该行为添加到客户端类。
显然,在发出对服务的第一次调用之前,您需要执行所有这些操作。完成后,您将无法再更改客户端。
马克