Mark A. Richman said:
Nicole,
Firstly, I am not attempting to log from ASP.NET directly, but from a
dependent assembly (albeit in the same process space - effectively the
same thing, I assume).
Pretty much. When EventLogPermission is demanded from within the .NET
Framework code you are calling, both the ASP.NET application and your
intermediary assembly must have the permission in order for the demand to
pass (at least under "usual" circumstances).
I am loading the web app and assemblies over UNC.
I am also impersonating a Domain Admin account in my web.config.
That's extremely risky. Are you doing this simply for troubleshooting
purposes, or do you plan to run the application under an admin account in
production? If the latter, you may want to reconsider...
My trust
level is the default setting of "Full". I have tried various caspol
commands such as "caspol -m -fulltrust
\\mydomain\dfsroot\dfslink\myapp\bin\myassembly.dll" with no luck.
Chances are good that you're not creating quite the right policy changes
when using caspol. However, before attempting to troubleshoot your caspol
use, have you confirmed that the application runs as expected if the
assemblies reside on the local machine rather than elsewhere on the network?
The full stack trace is as follows (with real names obscured to protect
the innocent):
System.Security.SecurityException: Request for the permission of type
'System.Diagnostics.EventLogPermission, System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
at System.Security.CodeAccessSecurityEngine.Check(PermissionToken
permToken, CodeAccessPermission demand, StackCrawlMark& stackMark, Int32
checkFrames, Int32 unrestrictedOverride)
at System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission
cap, StackCrawlMark& stackMark)
at System.Security.CodeAccessPermission.Demand()
at System.Diagnostics.EventLog.SourceExists(String source, String
machineName)
at System.Diagnostics.EventLog.SourceExists(String source)
at MyException..ctor(Object oSource, Int32 nCode, String sMessage,
Exception oInnerException, Boolean bLog)
at MyAssembly.Foo() in
\\mydomain\dfsroot\dfslink\myapp\App_Code\Blah.cs:line 125
Thank you so much!
--
Mark A. Richman
"Nicole Calinoiu" <calinoiu REMOVETHIS AT gmail DOT com> wrote in message
Mark,
What trust level is set for ASP.NET on your machine? (You can check this
is
in the %WINDIR%\Microsoft.NET\Framework\v2.0.<build>\CONFIG\web.config
file.) If it's not full trust, then you'll need to ensure that both your
ASP.NET application and your other assembly are granted the necessary
EventLogPermission under the policy specified in the appropriate
web_<level>trust.config file.
That said, writing to the event log from a web application is not
necessarily such a wonderful idea in the first place. If feasible, it
might
be a better solution to log to a different target rather than adjusting
your
application's permissions to allow writing to the event log.
HTH,
Nicole