0

私はWebサービスを利用しています。同じコードを使用して、RESTWebサービスを開発する必要がありました。私はそれをしました。私がそれをデバッグしていたとき、私は1つの変わったものを見つけました。RESTWebServiceプロジェクトをデバッグしているときに、静的コンストラクターが呼び出されていません。

すべてのビジネスロジックは1つの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

ブレークポイントを介して呼び出されたかどうかを確認しないでください。代わりに、インスタンス/サービスmthodが呼び出されたときに、値が実際に初期化されているかどうかを確認してください。または、静的コンストラクターから何かをログに記録して、それが呼び出されたかどうかを確認してください。

静的コンストラクターは、デバッグ/中断する前に呼び出される場合があります。

于 2012-12-12T13:49:42.377 に答える
0

静的コンストラクターは引き続き呼び出す必要がありますが、これはホスティングプログラムが最初にDLLをロードするときに発生します。

ブレークポイントを追加する前に、ホスト(IISだと思いますか?)にサービスがロードされている可能性があります。IISRESETを試してから、もう一度確認してください。デバッグのためにiisワーカープロセスに接続する必要があります。

于 2012-12-12T13:51:19.073 に答える