Chris,

        All you have to do is create a new AppDomain properly and marshal the 
call into that app domain.

        You'll need a wrapper that derives from MarshalByRefObject so the call 
is marshaled; it's in the marshaled call that you do your test work and then 
marshal the results for comparison (or just a Boolean value, it's in the return 
value you can serialize things and send them across the app domain boundary by 
value).

        See here for greater detail on how to do this:

http://stackoverflow.com/q/987332/50776

                - Nick

-----Original Message-----
From: Christopher Currens [mailto:currens.ch...@gmail.com] 
Sent: Tuesday, August 14, 2012 12:16 PM
To: lucene-net-dev@lucene.apache.org
Subject: Re: Lucene.Net 3.0.3 and medium trust

We should probably try and have unit tests that will spin up medium trust app 
domains and run some basic tests in them, so we don't accidentally ship with 
something big like this.  That is what I initially tried to do to reproduce 
this bug on my end, but the code that I would which should have created a 
medium trust app domain wasn't working.  I had to create an ASP.NET project and 
give it medium trust to repro.  I'm sure there's a way to do it, though.


Thanks,
Christopher

On Tue, Aug 14, 2012 at 9:08 AM, Christopher Currens <currens.ch...@gmail.com> 
wrote:
> Inheriting from WeakReference was the problem.  I'm just going to 
> remove the wrapper entirely, it doesn't give us any real benefit.  The 
> code has already been pushed.
>
>
> Thanks,
> Christopher
>
> On Tue, Aug 14, 2012 at 8:46 AM, Prescott Nasser <geobmx...@hotmail.com> 
> wrote:
>> It'd be nice to understand where this issue is coming from as it 
>> wasn't in 2.9.4 rather than jumping to a quick fix imo. I'll dig a 
>> bit myself ~P
>>
>>> Date: Tue, 14 Aug 2012 17:32:29 +0200
>>> From: si...@devhost.se
>>> To: lucene-net-dev@lucene.apache.org
>>> Subject: Re: Lucene.Net 3.0.3 and medium trust
>>>
>>> Hi,
>>>
>>> It got worse. Building a custom AttributeFactory can only handle a 
>>> few cases, I needed to subclass _every_ TokenStream/TokenFilter to 
>>> override all attribute-handling methods (AddAttribute, GetAttribute, 
>>> etc), and all analyzers to use these streams, to use a dictionary 
>>> with strong references just for medium trust... I gave up before 
>>> doing that. ;)
>>>
>>> Is there any use cases where we need to garbage collect attributes 
>>> before the stream/attribute source is closed? Changing to a normal 
>>> dictionary seems like a quick fix.
>>>
>>> // Simon
>>>
>>>
>>> On 2012-08-14 17:21, Christopher Currens wrote:
>>> > It must be something we've missed, as we want to target medium 
>>> > trust locations in the future.  I can't think of anything off the 
>>> > top of my head that would require medium trust, though, let alone 
>>> > unmanaged code.  I'll dive into this.
>>> >
>>> >
>>> > Thanks,
>>> > Christopher
>>> >
>>> > On Mon, Aug 13, 2012 at 10:01 PM, Simon Svensson <si...@devhost.se> wrote:
>>> >> Hi,
>>> >>
>>> >> I'm having trouble upgrading a web application running under 
>>> >> medium trust from 2.9.4 to 3.0.3. Code that previously worked now 
>>> >> throws a SecurityException.
>>> >>
>>> >> [SecurityException: Request for the permission of type 
>>> >> 'System.Security.Permissions.SecurityPermission, mscorlib, 
>>> >> Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 
>>> >> failed.]
>>> >>     Lucene.Net.Support.WeakKey`1..ctor(T key) +0
>>> >>     Lucene.Net.Support.WeakDictionary`2.get_Item(TKey key) +113
>>> >>     Lucene.Net.Util.DefaultAttributeFactory.GetClassForInterface() +178
>>> >>     Lucene.Net.Util.DefaultAttributeFactory.CreateAttributeInstance() +95
>>> >>     Lucene.Net.Util.AttributeSource.AddAttribute() +375
>>> >>     Lucene.Net.Analysis.CharTokenizer..ctor(TextReader input) +126
>>> >>     Lucene.Net.Analysis.WhitespaceTokenizer..ctor(TextReader in) 
>>> >> +37
>>> >>
>>> >>
>>> >> The DefaultAttributeFactory, via WeakReference, requires 
>>> >> SecurityPermissionFlag.UnmanagedCode which is not present under 
>>> >> medium trust. There's an 
>>> >> AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY which I could to 
>>> >> replace the DefaultAttributeFactory, but it's readonly. I'm 
>>> >> rewriting my code to call the constructor overload (on 
>>> >> tokenizers) accepting an AttributeFactory, but this means that I cannot 
>>> >> use any existing Analyzer since they don't provide an extension points 
>>> >> to change the AttributeFactory.
>>> >>
>>> >> Is medium trust [using default classes] dropped in 3.0.3, or is 
>>> >> this something we've missed?
>>> >>
>>> >> // Simon
>>>
>>


Reply via email to