if (http_context == null)
return;
try {
- listener.HttpHandler.EndRequest (listener, http_context);
+ ((AspNetListenerManager) listener.ListenerManager).HttpHandler.EndRequest (listener, http_context);
} finally {
http_context = null;
}
lock (waiting)
foreach (HttpContext ctx in waiting)
try {
- listener.HttpHandler.EndRequest (listener, ctx);
+ ((AspNetListenerManager) listener.ListenerManager).HttpHandler.EndRequest (listener, ctx);
} catch {
}
}
+2010-03-17 Atsushi Enomoto <atsushi@ximian.com>
+
+ * SvcHttpHandler.cs, AspNetReplyChannel.cs, HttpChannelListener.cs,
+ HttpListenerManager.cs : refactoring on acquiring SvcHttpHandler
+ to not raise "not found" error (see bug #573795).
+
2010-03-16 Jb Evain <jbevain@novell.com>
* HttpRequestChannel.cs, HttpTransportBindingElement.cs: use
{
}
- internal SvcHttpHandler HttpHandler {
- get { return ((AspNetListenerManager) ListenerManager).Source; }
- }
-
protected override TChannel CreateChannel (TimeSpan timeout)
{
if (typeof (TChannel) == typeof (IReplyChannel))
public AspNetListenerManager (IChannelListener channelListener, HttpTransportBindingElement source, ServiceCredentialsSecurityTokenManager securityTokenManager)
: base (channelListener, source, securityTokenManager)
{
- http_handler = SvcHttpHandlerFactory.GetHandlerForListener (channelListener);
+ http_handler = SvcHttpHandler.Current;
}
- public SvcHttpHandler Source {
- get { return http_handler; }
- }
+ internal SvcHttpHandler HttpHandler { get { return http_handler; } }
protected override void OnRegister (IChannelListener channelListener, TimeSpan timeout)
{
internal class SvcHttpHandler : IHttpHandler
{
+ internal static SvcHttpHandler Current;
+
static object type_lock = new object ();
Type type;
if (best == null)
best = l;
}
- return best;
+ if (best != null)
+ return best;
+ throw new InvalidOperationException (String.Format ("The argument HTTP context did not match any of the registered listener manager (could be mismatch in URL, method etc.) {0}", ctx.Request.Url));
/*
var actx = new AspNetHttpContextInfo (ctx);
foreach (var i in listeners)
void EnsureServiceHost ()
{
lock (type_lock) {
+ Current = this;
+ try {
+ EnsureServiceHostCore ();
+ } finally {
+ Current = null;
+ }
+ }
+ }
+ void EnsureServiceHostCore ()
+ {
if (host != null)
return;
// Not precise, but it needs some wait time to have all channels start requesting. And it is somehow required.
Thread.Sleep (500);
-
- }
}
}
}