摘要:如何配置网络服务,从而写入事件日志总是可能的(不管呼叫者的)? 详细信息:我有写入应用程序日志项的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服务的虚拟目录(或内码),这样不管它是怎么叫伐木是可行的办法。