0

我有工作的网络服务。我不得不使用相同的代码并开发 REST Web 服务。我已经做了。当我调试它时,我发现了一件不寻常的事情。RESTWebService调试项目时不会调用静态构造函数。

所有业务逻辑都在一个 DLL 中。WebService和项目都RESTWebService使用此 DLL。以下是 DLL 中存在的那些静态构造函数。这些构造函数初始化一些静态值。

//Logger.cs
static Logger()
{
    try
    {
        m_LogLevel = ....;
        m_LogFilePath = ....;
    }
    catch
    {
        throw;
    }
}

//Common.cs
static Common()
{
    ERROR_CODES = ....;
    DB_CONNECTION_STRING = ....;
    DB_NOTIFICATION_CONNECTION_STRING = ....;
    DATA_PROVIDER_INVARIANT_NAME = ....;
}

在构造函数中初始化的所有值都声明为静态的。

WebService项目的情况下,它通过静态构造函数初始化所有静态变量。我已经通过保持这个静态构造函数的断点来验证它。它将命中所有静态构造函数,最后是我的 Web 服务的公共构造函数。

但这不会发生在RESTWebService. 所有环境都和我的一模一样WebService。但它没有命中静态构造函数的断点,而是直接命中了RestWebService公共构造函数。

这背后的原因是什么?我是 WCF 的新手。RESTWebService 还有什么其他的吗?

4

2 回答 2

2

不要检查它是否通过断点调用 - 相反,当调用实例/服务方法时,检查值是否实际初始化。或者尝试从静态构造函数中记录一些东西,看看它是否被调用。

在您有机会对其进行调试/中断之前,可能会调用静态构造函数。

于 2012-12-12T13:49:42.377 回答
0

静态构造函数仍应被调用,但这将在宿主程序首次加载您的 DLL 时发生。

可能是主机(我猜是 IIS?)在您添加断点之前加载了服务。尝试 IISRESET 然后再次检查,您将需要附加到 iis 工作进程以进行调试。

于 2012-12-12T13:51:19.073 回答