以编程方式全局添加自定义的WCF客户端终结点行为扩展。

14
我需要在我的WCF客户端端点中添加自定义行为扩展。我尝试通过配置实现这个目标,但是经常会遇到WFC配置无法正确解析类型名称的问题。那么,我能否通过编程方式来实现?
因为配置节是只读的,所以我不能在运行时修改它们。如果我得到一个客户端代理(比如ClientBase)的实例,我知道可以将我的自定义行为实例添加到它的Endpoint.Behaviors属性中。但是,我需要为每个实例都这样做。
我能够全局访问这些端点并预先添加它们吗(例如在Global.asax中),还是这些端点是瞬时实例化和丢弃的?

你能否发布一个关于无法正确解析类型名称的问题链接? - John Saunders
1个回答

15

你应该能够通过以下代码将行为添加到客户端:

IMyEndpointBehavior behavior = client.Endpoint.Behaviors.Find<IMyEndpointBehavior>();

if(behavior == null)
{
   client.Endpoint.Behaviors.Add(new MyEndpointBehaviorImplementation());
}

第一行会检查是否已经应用了该行为以避免重复应用。如果还没有应用(.Find()调用返回null),那么您可以在客户端类中编程添加该行为。

显然,在发出对服务的第一个调用之前,您需要完成所有这些操作。完成后,您将无法再更改客户端。

Marc


2
这是我们目前正在采用的解决方案之一。麻烦的部分在于我们正在进行懒惰初始化。我更喜欢更积极的方法,也许在Global.asax中实现。似乎我可以将其放在应用程序配置中(本质上是全局的),或者我可以在第一次使用时以编程方式进行配置,但我无法以编程方式全局配置它。 - Trinition

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接