title: Web service cannot write to Event Log when called by anonymous user
body: <p>SUMMARY: How to configure a web service such that writing to the Event Log is always possible (regardless of caller)? 
  DETAILS:
  I have a web service which writes an entry to the Application Log. I established the event source for this by means of a little console application and I think I understand that part of things. When I test this WS, I see I am successfully writing my entry to the Event log. </p>
  
  <p>The virtual directory which hosts this WS does <strong>NOT</strong> allow anonymous access and is configured for Integrated Windows Auth only. </p>
  
  <p>I have a web client application that calls this Webservice. When the web client site is configured for Integrated Windows Auth only, calls to the Webservice result in logging as desired. </p>
  
  <p>Yet, if I change the web client site to allow anonymous access then the Webservice attempt to log results in an InvalidOperationException. I ignore it but it would be nice to know how to get logging in the webservice regardless of how it is called. Here is a bit of my code:</p>
  
  <pre><code>   public FileService()
      {
          try
          {
              if (!EventLog.SourceExists(g_EventSource))
                  EventLog.CreateEventSource(g_EventSource, g_EventLog);
  
              System.Security.Principal.WindowsIdentity UserIdentityInfo;
              UserIdentityInfo = System.Security.Principal.WindowsIdentity.GetCurrent();
              string AuthType = UserIdentityInfo.AuthenticationType;
  
      if (AuthType == "Kerberos")
      { engineWSE.Credentials = System.Net.CredentialCache.DefaultCredentials; }
      else
      { engineWSE.Credentials = new System.Net.NetworkCredential("u", "p", "domain"); }
  
      EventLog.WriteEntry(g_EventSource,
                  "Caller: " + UserIdentityInfo.Name +
                  " AuthType: " + UserIdentityInfo.AuthenticationType,
                  EventLogEntryType.Information, 1);
          }
          catch (InvalidOperationException e)
          {
              // do nothing to ignore: "Cannot open log for source 'myAppSourceName'. You may not have write access." 
          }
      }
  </code></pre>
  
  <p>The example in the constructor above is sort of contrived for here (I am mainly interested in being able to write out info related to errors in the web service). </p>
  
  <p>I hope there is a way to configure the web service virtual directory (or the code within) so that logging is possible regardless of how it got called. </p>