Hi,
Web.config should be watched as well by recent stable releases.
See bug #78505: http://bugzilla.ximian.com/show_bug.cgi?id=78505
I suggest you to use the stable releases instead of maintenance releases.
Using Application events is just as good as creating a wrapper around an
other handler.
Also note that System.Web.Secrives uses a more complex code to determine
whether the request is a "Documentation" request. For the exact details have
a look at GuessProtocol in
mcs/class/System.Web.Services/System.Web.Services.Protocols/WebServiceHandlerFactory.cs
I think that disallowing GET methods without path info is safer. But in this
case you have to check whether it is a web service request. And I prefer
handler wrappers because that makes easier to catch all web service
requests.
I attached a sample implementation as well.
Kornél
----- Original Message -----
From: "Ben Clewett" <[EMAIL PROTECTED]>
To: "Kornél Pál" <[EMAIL PROTECTED]>
Cc: <mono-list@lists.ximian.com>
Sent: Wednesday, November 08, 2006 12:46 PM
Subject: Re: [Mono-list] Webservise Discovery Language
Kornél,
I am making progress. You code seems to work well, I've just got to tidy
it a bit.
You asked me to report a bug if a change in the Web.config is not
respected by mod_mono without a restart. I think I have a candidate for a
bug:
I have added this to Web.config:
<system.web>
<webServices>
<protocols>
<remove name="Documentation"/>
</protocols>
</webServices>
....
....
....
<system.web>
This is not respected without a restart. But otherwise works well.
-----------<>------------
Secondly.
For use of other members, I have found this great code snipit for
Global.asax:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
string requestPath = Request.RawUrl.Trim().ToLower();
if (!my_static_global_flag) {
if (requestPath.IndexOf("?wsdl") > 0 ||
requestPath.IndexOf("?disco") > 0)
throw new HttpException(404, "Access Denied.");
}
}
This also helps give me good control over visibility of my webservices.
-----------<>------------
Thanks for the help,
Ben
Kornél Pál wrote:
Hi,
I attached a reference implementation in
OptionalDiscoveryRequestHandler.cs.
You can control it using the internal
OptionalDiscoveryRequestHandler.EnableDiscovery field.
The only thing you have to do is to compile the handler to a DLL (don't
require it's own assembly, you can put into any existing assembly) and
reference this type in Web.config instead of
System.Web.Services.Discovery.DiscoveryRequestHandler.
Kornél
----- Original Message ----- From: "Ben Clewett" <[EMAIL PROTECTED]>
To: "Kornél Pál" <[EMAIL PROTECTED]>
Cc: <mono-list@lists.ximian.com>
Sent: Tuesday, November 07, 2006 7:05 PM
Subject: Re: [Mono-list] Webservise Discovery Language
Kornél,
I am very exited about your suggestion, I think this is exactly what I'm
looking for.
But this level of experience is way about my knowledge. If you could
share this, I would be interested.
Many thanks,
Ben
Kornél Pál wrote:
ASP.NET applications should reload automatically on Web.config change
so there should be no need for restarting mod-mono-server (if you mean
that on mono). If you have a problem like that please file a bug
report.
If you mean the Web.config modification described on
http://msdn2.microsoft.com/en-us/library/tewz1055.aspx in "To enable
dynamic discovery for a Web service" I suggest you to create your own
IHttpHandler implementation that wraps
System.Web.Services.Discovery.DiscoveryRequestHandler and that will
make you able to disable it based on static fields or your own
configuration files. If you use this method I can send you a simple
implementation of this.
You are using some other Web.config settings please let me know what
exactly do you use.
Kornél
----- Original Message ----- From: "Ben Clewett" <[EMAIL PROTECTED]>
To: "Kornél Pál" <[EMAIL PROTECTED]>
Cc: <mono-list@lists.ximian.com>
Sent: Tuesday, November 07, 2006 6:41 PM
Subject: Re: [Mono-list] Webservise Discovery Language
Kornél Pál wrote:
Web.config is intended to do configuration. What exactly is your
problem with that?
Hi Kornél,
Thanks for the reply.
I have six servers to manage. We sometimes release ten version of
code a day, which over-write the Web.config. Editing this file is
potentially dangerous. After an edit, I have to re-start the mono.
My feeling is that this file must be interoperated by some part of the
Mono suit (stop me if this is wrong.) It would be much better for me
if control could be administered by some simple flag. Or even a
static public variable in mono.
If this is not possible, it's not so important. I am just interested
to know if there is an alternate method.
I can't be the only member who would like better control of this.
Alternatively, do any members have scripts to toggle the Webservice
Discovery which are safe and fast?
Thanks again,
Ben
Kornél
----- Original Message ----- From: "Ben Clewett"
<[EMAIL PROTECTED]>
To: <mono-list@lists.ximian.com>
Sent: Tuesday, November 07, 2006 5:38 PM
Subject: [Mono-list] Webservise Discovery Language
Sorry if this has been asked many times before....
We develop ASP-Webservice code, which runs better than perfect on
Mono.
On our development system, we want the Webservice Discovery turned
on.
On our live systems, we want it optionally turned on.
The only way I know of doing this is to edit the Web.config file.
But this is messy, if done badly can crash the webservice, it has to
be
done on every release and every time we want to toggle this option.
Do any of your members know a simple and elegant method for toggling
the
Webservice Discovery visibility?
Thanks for your help,
Ben.
_______________________________________________
Mono-list maillist - Mono-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-list
using System.Web;
using System.Web.Services.Discovery;
namespace MyNamespace
{
public class OptionalDiscoveryRequestHandler : IHttpHandler
{
internal static bool EnableDiscovery;
public OptionalDiscoveryRequestHandler()
{
}
public void ProcessRequest(HttpContext context)
{
if (!EnableDiscovery)
throw new HttpException(403, "Forbidden");
new DiscoveryRequestHandler().ProcessRequest(context);
}
public bool IsReusable
{
get
{
return true;
}
}
}
}
------------------------------------------------------------------------
_______________________________________________
Mono-list maillist - Mono-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-list
using System.Web;
using System.Web.Services.Protocols;
namespace MyNamespace
{
public class OptionalDocumentationRequestHandlerFactory :
IHttpHandlerFactory
{
private class DocumentationForbiddenHandler : IHttpHandler
{
public DocumentationForbiddenHandler()
{
}
public void ProcessRequest(HttpContext context)
{
throw new HttpException(403, "Forbidden");
}
public bool IsReusable
{
get
{
return true;
}
}
}
internal static bool EnableDocumentation;
private WebServiceHandlerFactory webServiceHandlerFactory;
public OptionalDocumentationRequestHandlerFactory()
{
webServiceHandlerFactory = new
WebServiceHandlerFactory();
}
public IHttpHandler GetHandler(HttpContext context, string
verb, string url, string filePath)
{
string pathInfo = context.Request.PathInfo;
if (!EnableDocumentation && verb == "GET" && (pathInfo
== null || pathInfo.Length == 0))
return new DocumentationForbiddenHandler();
return webServiceHandlerFactory.GetHandler(context,
verb, url, filePath);
}
public void ReleaseHandler(IHttpHandler handler)
{
if (!(handler is DocumentationForbiddenHandler))
webServiceHandlerFactory.ReleaseHandler(handler);
}
}
}
_______________________________________________
Mono-list maillist - Mono-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-list