using System.Net.Security;
using System.ServiceModel;
using System.ServiceModel.Description;
+using System.ServiceModel.Dispatcher;
using System.ServiceModel.Security;
using System.Text;
protected override HttpListenerManager CreateListenerManager ()
{
- return new HttpSimpleListenerManager (this, Source, SecurityTokenManager);
+ return new HttpSimpleListenerManager (this, Source, SecurityTokenManager, ChannelDispatcher);
}
}
{
}
- internal SvcHttpHandler HttpHandler {
- get { return ((AspNetListenerManager) ListenerManager).Source; }
- }
-
protected override TChannel CreateChannel (TimeSpan timeout)
{
if (typeof (TChannel) == typeof (IReplyChannel))
protected override HttpListenerManager CreateListenerManager ()
{
- return new AspNetListenerManager (this, Source, SecurityTokenManager);
+ return new AspNetListenerManager (this, Source, SecurityTokenManager, ChannelDispatcher);
}
}
- internal abstract class HttpChannelListenerBase<TChannel> : InternalChannelListenerBase<TChannel>
+ internal interface IChannelDispatcherBoundListener
+ {
+ ChannelDispatcher ChannelDispatcher { get; set; }
+ }
+
+ internal abstract class HttpChannelListenerBase<TChannel> : InternalChannelListenerBase<TChannel>, IChannelDispatcherBoundListener
where TChannel : class, IChannel
{
List<TChannel> channels = new List<TChannel> ();
MessageEncoder encoder;
HttpListenerManager httpChannelManager;
+ internal static HttpChannelListenerBase<TChannel>CurrentHttpChannelListener;
+
public HttpChannelListenerBase (HttpTransportBindingElement source,
BindingContext context)
: base (context)
{
+ if (ServiceHostBase.CurrentServiceHostHack != null)
+ DispatcherBuilder.ChannelDispatcherSetter = delegate (ChannelDispatcher cd) { this.ChannelDispatcher = cd; };
+
this.Source = source;
// The null Uri check looks weird, but it seems the listener can be built without it.
// See HttpTransportBindingElementTest.BuildChannelListenerWithoutListenUri().
SecurityTokenManager = new ServiceCredentialsSecurityTokenManager ((ServiceCredentials) context.BindingParameters [typeof (ServiceCredentials)]);
}
+ public ChannelDispatcher ChannelDispatcher { get; set; }
+
public HttpTransportBindingElement Source { get; private set; }
public HttpListenerManager ListenerManager {