[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