Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以编程方式全局添加自定义WCF客户端端点行为扩展_Wcf_Behavior - Fatal编程技术网

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

以编程方式全局添加自定义WCF客户端端点行为扩展,wcf,behavior,Wcf,Behavior,我需要向WCF客户端端点添加自定义行为扩展。我试着通过配置来实现这一点,但是经常提到的一个错误让我感到痛苦,即WFC配置无法正确解析类型名。那么我可以用程序来代替吗 我无法在运行时修改配置部分,因为它们是只读的。我知道如果我获得了客户端代理的实例(即ClientBase),我可以向其Endpoint.Behaviors添加自定义行为的实例。但是,我必须为每个实例都这样做 我可以全局地访问端点并预先添加它们(例如,在Global.asax中),还是这些端点被实例化并暂时丢弃?您应该能够在代码中将行

我需要向WCF客户端端点添加自定义行为扩展。我试着通过配置来实现这一点,但是经常提到的一个错误让我感到痛苦,即WFC配置无法正确解析类型名。那么我可以用程序来代替吗

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


我可以全局地访问端点并预先添加它们(例如,在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中。似乎我可以把它放在应用程序配置中(固有的全局),或者我可以在第一次使用时通过编程对它进行配置,但我不能通过编程全局配置它。