2010-09-15 45 views
2

我想根据客户端应用程序配置文件中的自定义信息动态更改从客户端调用的WCF服务的地址。使用行为动态更改WCF端点地址

我第一次尝试是创建一个终结点行为,并实施IEndpointBehavior.Validate方法,实现类似如下:

void IEndpointBehavior.Validate(ServiceEndpoint endpoint) 
{ 
    ... endpoint.Address = new EndpointAddress(...); 
} 

客户端试图连接之前,并出现成功改变这种方法被称为端点地址。但是,WCF基础结构似乎仍尝试使用原始地址进行连接。

有什么方法可以使用端点行为或其他WCF扩展点来实现这一点?

+0

为什么不直接使用带有'EndPointAddress'的代理类构造函数? – 2010-09-15 18:28:34

+0

我不能实现我想要的使用代理类构造函数(实际上在我的情况下是ChannelFactory 构造函数),因为那时我还不知道要使用哪个地址。 – Joe 2010-09-15 18:39:34

+1

如何在创建代理时不知道地址? – 2010-09-15 19:11:44

回答

2

我认为问题是CommunicationObject的基本功能。当通信对象移动到打开状态时,它不能改变任何东西。因此,如果您的通信对象(Channel或ChannelFactory)已处于打开状态,则无法更改地址。

+0

这听起来似乎合理。在打开ChannelFactory之后,推测IEndpointBehavior.Validate执行得太晚。我想知道是否有任何其他扩展点允许我在打开ChannelFactory之前将行为附加到端点,以便实现我的目标。 – Joe 2010-09-15 19:47:34