为什么,当定义从ClientBase<TChannel>
继承的类时,服务接口是"嵌入的";两次,一次通过组合(<TChannel>
中的泛型),另一次通过继承,而不仅仅是一个(像组合)?
在另一件事上,我们成功地调用了一个自定义客户端代理方法,该方法调用了base.channel
接口指针的方法,并且我们遇到了一个问题,在接下来调用另一个客户端代理函数(也重定向到另一个base.channel
)时,base.channel
属性变成了null
(因此到函数调用的时候),最终引发了NullReferenceException
。为什么会发生这种情况?(我们创建ClientBase
代理使用默认构造函数,不提供任何绑定信息)。编辑:问题不在于base.channel
指针在第一次函数调用后被设置为null
,而是每次调用都创建一个自定义服务的新实例。如何确保相同的对象是通过使用?
我找到了第二个问题的答案。解决方案(至少在我们的例子中)是建立以下属性:[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
,见这里。
尽管如此,任何人都可以自由地回答我的第一个语义问题,我将相应地奖励。