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);
+ 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);
+ return new AspNetListenerManager (this, Source, SecurityTokenManager, ChannelDispatcher);
}
}
internal abstract class HttpChannelListenerBase<TChannel> : InternalChannelListenerBase<TChannel>
where TChannel : class, IChannel
{
- HttpTransportBindingElement source;
- BindingContext context;
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().
if (Uri != null && source.Scheme != Uri.Scheme)
}
if (encoder == null)
encoder = new TextMessageEncoder (MessageVersion.Default, Encoding.UTF8);
+
+ if (context.BindingParameters.Contains (typeof (ServiceCredentials)))
+ SecurityTokenManager = new ServiceCredentialsSecurityTokenManager ((ServiceCredentials) context.BindingParameters [typeof (ServiceCredentials)]);
}
+ internal ChannelDispatcher ChannelDispatcher { get; set; }
+
+ public HttpTransportBindingElement Source { get; private set; }
+
public HttpListenerManager ListenerManager {
get { return httpChannelManager; }
}
get { return encoder; }
}
+ public ServiceCredentialsSecurityTokenManager SecurityTokenManager { get; private set; }
+
protected override TChannel OnAcceptChannel (TimeSpan timeout)
{
TChannel ch = CreateChannel (timeout);