在REST Web服务的情况下,DLL中存在的静态构造函数不会被调用

时间:2012-12-12 13:46:58

标签: c# asp.net web-services

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

所有业务逻辑都在一个DLL中。 WebServiceRESTWebService项目都使用此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 = ....;
}

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

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

RESTWebService的情况并非如此。所有环境都与我的WebService完全相同。但是它没有达到静态构造函数的断点并直接命中RestWebService的公共构造函数。

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

2 个答案:

答案 0 :(得分:1)

不要检查它是否是通过断点调用的 - 而是在调用实例/服务方法时,检查这些值是否实际初始化。或者尝试从静态构造函数中记录一些内容并查看它是否被调用。

在您有机会调试/中断静态构造函数之前,可以调用静态构造函数。

答案 1 :(得分:0)

仍然应该调用静态构造函数,但是当托管程序首次加载DLL时会发生这种情况。

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