当匿名用户称为Web服务不能写入事件日志(Web service cannot write to E

2019-09-20 06:56发布

摘要:如何配置网络服务,从而写入事件日志总是可能的(不管呼叫者的)? 详细信息:我有写入应用程序日志项的Web服务。 我用一个小控制台应用程序来建立这个事件源,我想我明白的事情的一部分。 当我测试这个WS,我看到我成功写我进入到事件日志。

它承载这个WS 不允许匿名访问和配置为仅集成的Windows身份验证的虚拟目录。

我有一个调用此WebService的web客户端应用程序。 当Web客户端站点配置为仅集成Windows验证,根据需要调用的WebService结果记录。

然而,如果我改变了Web客户端的网站允许匿名访问,则Webservice的登录尝试导致一个InvalidOperationException。 我不理它,但它会很高兴地知道如何在web服务获取日志,无论它是如何被调用。 这里有一点我的代码:

   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服务相关的错误信息)。

我希望有配置Web服务的虚拟目录(或内码),这样不管它是怎么叫伐木是可行的办法。

Answer 1:

您也应该检查你的web.config。

如果IIS设置为匿名和web.config中设置为Windows /冒充。 然后,它会是试图写入到事件日志中的IIS匿名用户。



Answer 2:

网络服务是允许写入事件日志 ,但不能创建一个事件源。 你可以给权限HKLM\SYSTEM\CurrentControlSet\Services\Eventlog\允许它来创建-但是如果你已经创建了它在安装时,没有必要。

这可能是因为它的失败在SourceExists以及-因为这需要枚举相同的注册表项。 我可能只是删除SourceExists /创建检查,并相信它的存在 - 如果你是匿名的,你不能无论如何创建它。



文章来源: Web service cannot write to Event Log when called by anonymous user