Nick,

" All you have to do is create a new AppDomain properly and marshal
the call into that app domain."
Ah yes, the "properly" part of creating the AppDomain was the root of my issue.

Running code in a different app domain was the easy part, especially
since manyobjects we use inherit from MBRO as it is.  The part I had
trouble with was figuring out what the actual SecurityPermissions
needed to be to accurately reproduce a Medium Trust environment in
ASP.Net.  Due to time, the easier solution was to just write a quick
web app to test the changes in.

When I looked back at what I was doing, I found that my real problem
is that I neglected to use to correct CreateDomain overload (or clear
out permissions), so that it inherited the permissions of my test app,
which in this case was Full Trust.  Had I actually read the MSDN
documentation[1], I would have found out that the trust level has code
permissions listed in config files on disk.

Since you brought up the point of a wrapper, I think that's a better
idea than having all these different types directly inheriting from
MBRO.  But maybe that's just because I'm not a fan of encouraging its
use. :)

Thanks,
Christopher


[1] http://msdn.microsoft.com/en-us/library/wyts434y(v=vs.100)

On Sat, Aug 18, 2012 at 4:03 PM, Nicholas Paldino [.NET/C# MVP]
<casper...@caspershouse.com> wrote:
> 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