[Mono-list] Webservise Discovery Language
Kornél Pál
kornelpal at gmail.com
Wed Nov 8 10:42:25 EST 2006
Hi,
Mono 1.1.13 is the maintenance release that means that only fixes for
critical bugs are backported.
I suggest you to use the stable Mono 1.1.18 with mod_mono 1.1.18 because
that contains a lot of features missing from Mono 1.1.13 and contains a lot
of non-critical bug fixes.
Kornél
----- Original Message -----
From: "Ben Clewett" <ben at roadrunner.uk.com>
To: "Kornél Pál" <kornelpal at gmail.com>
Cc: <mono-list at lists.ximian.com>
Sent: Wednesday, November 08, 2006 4:32 PM
Subject: Re: [Mono-list] Webservise Discovery Language
> Kornél,
>
> Thanks for the info. I am using the default from SUSE 10.1:
> mono 1.1.13.8
> mod_mono 1.1.15.5
> There is no version number against this bug-fix so I don't know whether my
> version should work or not.
>
> Thanks for the extended code, I'll try to implement it.
>
> In my case our applications do not use the GET method. So this has
> provided me a very simple method of toggling the exposure to documentation
> and discovery.
>
> I have learnt a lot about mod_mono in the last two days :)
>
> Regards,
>
> Ben
>
>
>> 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" <ben at roadrunner.uk.com>
>> To: "Kornél Pál" <kornelpal at gmail.com>
>> Cc: <mono-list at 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"
>>>> <ben at roadrunner.uk.com>
>>>> To: "Kornél Pál" <kornelpal at gmail.com>
>>>> Cc: <mono-list at 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" <ben at clewett.org.uk>
>>>>>> To: "Kornél Pál" <kornelpal at gmail.com>
>>>>>> Cc: <mono-list at 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"
>>>>>>>> <ben at roadrunner.uk.com>
>>>>>>>> To: <mono-list at 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 at 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 at 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);
>> }
>> }
>> }
>
More information about the Mono-list
mailing list