已经找到HttpTransportBindingElement重写了BindingElement的BuildChannelFactory方法,创建了自己的信道工厂:
public override IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context)
{
if (context == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
}
if (!this.CanBuildChannelFactory<TChannel>(context))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("TChannel", SR.GetString("CouldnTCreateChannelForChannelType2", new object[] { context.Binding.Name, typeof(TChannel) }));
}
return (IChannelFactory<TChannel>) new HttpChannelFactory(this, context);//这个就是
}
但是其它的绑定元素,比如说TextMessageEncodingBindingElement 绑定元素,我看了它的创建信道工厂的反编译方法:
public override IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context)
{
return base.InternalBuildChannelFactory<TChannel>(context);
}
internal IChannelFactory<TChannel> InternalBuildChannelFactory<TChannel>(BindingContext context)
{
if (context == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("context"));
}
context.BindingParameters.Add(this);
return context.BuildInnerChannelFactory<TChannel>();
}
它也要依赖自己的信道工厂创建自己的信道,那么这个绑定元素创建自己的信道工厂是什么时候创建的呢?我在反编译代码里没有找到相关创建的代码,还有就是,这个信道完成自己的工作后,应该会将消息转交给下一个信道继续处理,这个转交机制相关的机制和代码是怎样呢?
同求该问题