提交 0bb7a5de 编写于 作者: A Atsushi Eno

Prepare for HostNameComparisonMode support (i.e. incomplete).

This is for bugfix #687580.
上级 8a8df838
......@@ -120,7 +120,7 @@ namespace System.ServiceModel.Channels.Http
protected HttpListenerManager GetOrCreateListenerManager ()
{
var table = HttpListenerManagerTable.GetOrCreate (ChannelDispatcher != null ? ChannelDispatcher.Host : null);
return table.GetOrCreateManager (Uri);
return table.GetOrCreateManager (Uri, Source);
}
protected override void OnOpen (TimeSpan timeout)
......
......@@ -107,11 +107,15 @@ namespace System.ServiceModel.Channels.Http
internal class HttpStandaloneListenerManager : HttpListenerManager
{
public HttpStandaloneListenerManager (Uri uri)
public HttpStandaloneListenerManager (Uri uri, HttpTransportBindingElement element)
{
var l = new HttpListener ();
#if false // FIXME: enable this once we found out why this causes problem
string uriString = element.HostNameComparisonMode == HostNameComparisonMode.Exact ? uri.ToString () : uri.Scheme + "://*" + uri.GetComponents (UriComponents.Port | UriComponents.Path, UriFormat.SafeUnescaped);
#else
string uriString = uri.ToString ();
#endif
if (!uriString.EndsWith ("/", StringComparison.Ordinal))
uriString += "/"; // HttpListener requires this mess.
......
......@@ -70,7 +70,7 @@ namespace System.ServiceModel.Channels.Http
public object ServiceHostKey { get; private set; }
public HttpListenerManager GetOrCreateManager (Uri uri)
public HttpListenerManager GetOrCreateManager (Uri uri, HttpTransportBindingElement element)
{
var m = listeners.FirstOrDefault (p => p.Key.Equals (uri)).Value;
if (m == null) {
......@@ -78,7 +78,7 @@ namespace System.ServiceModel.Channels.Http
string absolutePath = uri.AbsolutePath;
if (absolutePath.EndsWith ("/js", StringComparison.Ordinal) ||
absolutePath.EndsWith ("/jsdebug", StringComparison.Ordinal))
return CreateListenerManager (uri);
return CreateListenerManager (uri, element);
// Try without the query, if any
UriBuilder ub = null;
......@@ -110,19 +110,19 @@ namespace System.ServiceModel.Channels.Http
}
if (m == null)
return CreateListenerManager (uri);
return CreateListenerManager (uri, element);
return m;
}
HttpListenerManager CreateListenerManager (Uri uri)
HttpListenerManager CreateListenerManager (Uri uri, HttpTransportBindingElement element)
{
HttpListenerManager m;
if (ServiceHostingEnvironment.InAspNet)
m = new AspNetHttpListenerManager (uri);
else
m = new HttpStandaloneListenerManager (uri);
m = new HttpStandaloneListenerManager (uri, element);
listeners [uri] = m;
return m;
......
......@@ -75,9 +75,9 @@ namespace System.ServiceModel.Channels
EnsureServiceHost ();
var table = HttpListenerManagerTable.GetOrCreate (host);
var manager = table.GetOrCreateManager (context.Request.Url);
var manager = table.GetOrCreateManager (context.Request.Url, null);
if (manager == null)
manager = table.GetOrCreateManager (host.BaseAddresses [0]);
manager = table.GetOrCreateManager (host.BaseAddresses [0], null);
var wait = new ManualResetEvent (false);
wcf_wait_handles [context] = wait;
manager.ProcessNewContext (new System.ServiceModel.Channels.Http.AspNetHttpContextInfo (this, context));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册