【发布时间】:2009-07-22 20:26:56
【问题描述】:
总结:如何配置 Web 服务以便始终可以写入事件日志(无论调用者如何)? 细节: 我有一个向应用程序日志写入条目的 Web 服务。我通过一个小控制台应用程序为此建立了事件源,我想我理解这部分内容。当我测试这个 WS 时,我看到我成功地将我的条目写入事件日志。
承载此 WS 的虚拟目录不允许匿名访问,并且仅配置为集成 Windows 身份验证。
我有一个调用此 Web 服务的 Web 客户端应用程序。当 Web 客户端站点仅配置为集成 Windows 身份验证时,对 Web 服务的调用会根据需要生成日志记录。
但是,如果我将 Web 客户端站点更改为允许匿名访问,则 Web 服务尝试记录会导致 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 服务虚拟目录(或其中的代码),以便无论如何调用都可以进行日志记录。
【问题讨论】:
标签: c# visual-studio web-services logging