我有工作的网络服务。我不得不使用相同的代码并开发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 = ....;
}
在构造函数中初始化的所有值都声明为static。
在WebService
项目的情况下,它通过静态构造函数初始化所有静态变量。我通过保持对这个静态构造函数的断点来验证它。它将命中所有静态构造函数以及我的Web服务的最终公共构造函数。
但RESTWebService
的情况并非如此。所有环境都与我的WebService
完全相同。但是它没有达到静态构造函数的断点并直接命中RestWebService
的公共构造函数。
这背后的原因是什么?我是WCF的新手。 RESTWebService还有其他什么吗?
答案 0 :(得分:1)
不要检查它是否是通过断点调用的 - 而是在调用实例/服务方法时,检查这些值是否实际初始化。或者尝试从静态构造函数中记录一些内容并查看它是否被调用。
在您有机会调试/中断静态构造函数之前,可以调用静态构造函数。
答案 1 :(得分:0)
仍然应该调用静态构造函数,但是当托管程序首次加载DLL时会发生这种情况。
可能是主机(IIS我假设?)在添加断点之前加载了服务。尝试IISRESET,然后再次检查,您需要连接到iis工作进程进行调试。