以编程方式全局添加自定义WCF客户端端点行为扩展
我需要向WCF客户端端点添加自定义行为扩展。我试着通过配置来实现这一点,但是经常提到的一个错误让我感到痛苦,即WFC配置无法正确解析类型名。那么我可以用程序来代替吗 我无法在运行时修改配置部分,因为它们是只读的。我知道如果我获得了客户端代理的实例(即ClientBase),我可以向其Endpoint.Behaviors添加自定义行为的实例。但是,我必须为每个实例都这样做以编程方式全局添加自定义WCF客户端端点行为扩展,wcf,behavior,Wcf,Behavior,我需要向WCF客户端端点添加自定义行为扩展。我试着通过配置来实现这一点,但是经常提到的一个错误让我感到痛苦,即WFC配置无法正确解析类型名。那么我可以用程序来代替吗 我无法在运行时修改配置部分,因为它们是只读的。我知道如果我获得了客户端代理的实例(即ClientBase),我可以向其Endpoint.Behaviors添加自定义行为的实例。但是,我必须为每个实例都这样做 我可以全局地访问端点并预先添加它们(例如,在Global.asax中),还是这些端点被实例化并暂时丢弃?您应该能够在代码中将行
我可以全局地访问端点并预先添加它们(例如,在Global.asax中),还是这些端点被实例化并暂时丢弃?您应该能够在代码中将行为添加到客户端,如下所示:
IMyEndpointBehavior behavior = client.Endpoint.Behaviors.Find<IMyEndpointBehavior>();
if(behavior == null)
{
client.Endpoint.Behaviors.Add(new MyEndpointBehaviorImplementation());
}
IMyEndpointBehavior=client.Endpoint.Behaviors.Find();
if(行为==null)
{
client.Endpoint.Behaviors.Add(new MyEndpointBehaviorImplementation());
}
第一行将检查是否已经应用了该行为,以避免应用两次。如果尚未应用该行为(.Find()
调用返回null),则可以通过编程方式将该行为添加到客户端类中
显然,在发出对服务的第一个调用之前,您需要执行所有这些操作。一旦你这样做了,你就不能再改变客户了
Marc你能发布一个链接,指向没有正确解析类型名的问题吗?这是我们目前采用的解决方案之一。麻烦的是我们正在懒洋洋地初始化它。我更喜欢一种更积极主动的方法,也许是在Global.asax中。似乎我可以把它放在应用程序配置中(固有的全局),或者我可以在第一次使用时通过编程对它进行配置,但我不能通过编程全局配置它。