РЕЗЮМЕ: Как настроить веб-службу так, чтобы запись в журнал событий всегда была возможна (независимо от вызывающего)? ДЕТАЛИ: У меня есть веб-служба, которая записывает запись в журнал приложений. Я установил источник события для этого с помощью небольшого консольного приложения, и я думаю, что понимаю эту часть вещей. Когда я тестирую этот WS, я вижу, что успешно записываю свою запись в журнал событий.
Виртуальный каталог, в котором размещен этот WS, НЕ разрешает анонимный доступ и настроен только для встроенного Windows Auth.
У меня есть веб-клиентское приложение, которое вызывает этот Web-сервис. Когда сайт веб-клиента настроен только для встроенного Windows Auth, вызовы в Webservice приводят к регистрации в случае необходимости.
Тем не менее, если я изменяю сайт веб-клиента, чтобы разрешить анонимный доступ, то попытка Webservice регистрировать результаты в InvalidOperationException. Я игнорирую его, но было бы неплохо узнать, как войти в веб-сервис, независимо от того, как он называется. Вот немного моего кода:
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."
}
}
Пример в вышеприведенном конструкторе для нас как-то ухищрен (я в основном заинтересован в возможности выписывать информацию, связанную с ошибками в веб-службе).
Я надеюсь, что есть способ настроить виртуальный каталог веб-службы (или код внутри), чтобы можно было вести журнал, независимо от того, как он вызван.
Вы также должны проверить свой web.config.
Если IIS настроен на анонимность, а для web.config установлено значение windows/impersonate. Тогда это будет анонимный пользователь IIS, который пытается записать в журнал событий.
Служба сети разрешена для записи в журнал событий, но не создает источник события. вы можете предоставить разрешения для HKLM\SYSTEM\CurrentControlSet\Services\Eventlog\
, чтобы позволить ему создавать, но если вы уже создали его во время установки, нет необходимости.
Возможно, он также не работает в SourceExists
, поскольку для этого требуется перечислить один и тот же раздел реестра. Возможно, я просто удалю проверку SourceExists/Create и верю, что она там - если вы анонимны, вы все равно не сможете ее создать.