【问题标题】:Programmatically and globally adding a custom WCF client endpoint behavior extension以编程方式和全局添加自定义 WCF 客户端终结点行为扩展
【发布时间】:2026-01-07 05:55:01
【问题描述】:

我需要向我的 WCF 客户端端点添加自定义行为扩展。我尝试通过配置来做到这一点,但被经常提到的 WFC 配置无法正确解析类型名称的错误所困扰。那么我可以改为以编程方式执行此操作吗?

我无法在运行时修改配置部分,因为它们是只读的。我知道如果我获得了客户端代理的实例(即 ClientBase),我可以将我的自定义行为的实例添加到它的 Endpoint.Behaviors 中。但是,我必须为每个实例都这样做。

我可以全局访问端点并预先添加它们(例如在 Global.asax 中),还是这些端点被实例化并暂时丢弃?

【问题讨论】:

  • 您能否发布有关未正确解析类型名称的问题的链接?

标签: wcf behavior


【解决方案1】:

您应该能够在如下代码中将行为添加到客户端:

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

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

第一行将检查该行为是否已被应用以避免应用它两次。如果尚未应用(.Find() 调用返回 null),那么您可以以编程方式将该行为添加到您的客户端类。

显然,您需要在首次调用服务之前完成所有这些操作。完成此操作后,您将无法再更改客户端。

马克

【讨论】:

  • 这是我们目前采用的解决方案之一。麻烦的部分是我们懒惰地初始化它。我更喜欢更积极主动的方法,也许在 Global.asax 中。看来我可以把它放在应用程序配置中(本质上是全局的),或者我可以在第一次使用时以编程方式配置它,但我不能以编程方式全局配置它。
最近更新 更多