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

Tri*_*ion 13 wcf behavior

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

我无法在运行时修改配置节,因为它们是只读的.我知道如果我得到客户端代理的实例(即ClientBase),我可以向其Endpoint.Behaviors添加我的自定义行为的实例.但是,我必须为每个实例执行此操作.

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

mar*_*c_s 14

您应该能够使用以下代码将行为添加到客户端:

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

if(behavior == null)
{
   client.Endpoint.Behaviors.Add(new MyEndpointBehaviorImplementation());
}
Run Code Online (Sandbox Code Playgroud)

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

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

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