【发布时间】:2014-02-05 15:56:20
【问题描述】:
我正在使用在项目之间共享的库中具有静态日志记录对象的解决方案。这是它的结构:
public class AppLog
{
private static string _logFile;
private static string _appName;
public static string AppName
{
get { return _appName; }
set
{
_appName = value;
InitLogFilePath(); // initializes _logFile according to _appName
}
}
public static Write(string msg)
{
// writes to _logFile
}
}
它适用于各种 Windows 应用程序和 Windows 服务:它们可以在启动时初始化 AppLog.AppName,并且可以在整个代码中调用 AppLog.Write。共享模块写入一个根据AppName的初始化命名的文件。
我遇到的问题是在 WCF Web 服务中使用它。 Web 服务配置为InstanceContextMode.PerCall。 AppLog.AppName 正在根据 ServiceHostBase.Description.Name 进行初始化。但是由于多个 Web 服务在同一个 AppDomain 中运行,所以这个静态数据是共享的。所以一个 ws 调用设置了AppLog.AppName,它被下一个调用更改,可能有不同的ServiceHostBase.Description.Name。
如何对其进行重组,以便AppLog.Write 仍然可以在我的解决方案中的整个项目中使用,但对每个 Web 服务的命名处理方式不同?
如果可以判断代码是否在 Web 服务中运行,并且如果我可以检索服务的 ServiceHostBase.Description,那么我可以维护对适当文件名的查找。但是我还没有找到方法来做到这一点。
【问题讨论】: