我們有一個C#日誌記錄類,它使用System.Diagnostics.StackTrace和StackFrame獲取有關文件名,linenumber,類和調用logger.writeLine()的方法的信息,然後插入到日誌消息中。StackTrace和WCF類的奇怪
我們已經在控制檯應用程序,Windows服務,.aspx Web應用程序和.asmx Web服務中使用了它,沒有任何問題。
我現在正在使用IIS託管的WCF服務,而且我看到一些奇怪的東西。
如果我把一個logger.writeLine()在ServiceBehavior類的構造函數,它得到這個代碼:
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace(true);
System.Diagnostics.StackFrame sf = st.GetFrame(2);
第一行似乎返回null。或者,至少,第二個拋出一個NullReferenceException。
現在這裏是怪異的。這隻發生在我在IIS中託管web服務時。當我在Visual Studio的開發服務器上運行時,我沒有任何問題。
即使在IIS中,我只在構造函數中遇到問題。調用logger.writeLine()在OperatioonContract方法和從它們調用的方法中工作得很好。它只在構造函數中,並且只有在由IIS託管時纔會出現問題。
如果我在logger.writeLine()中包裝try/catch,這樣如果發生異常,我們只是不在日誌文件中包含行信息,一切正常。或者我可以不在構造函數中使用日誌記錄 - 我在構造函數中做的唯一事情是記錄構造函數已被調用。所以我實際上沒有問題。
但我想知道發生了什麼,以及我偶然發現的.NET奇怪的角落。當我遇到這樣的怪事,並找到似乎處理它們的解決方法時,有一半時間還有一些我還沒有注意到的其他問題。
那麼,有沒有人有任何解釋爲什麼這可能會發生?
_what_?的構造函數?應用程序對象? –
ServiceBehavior類的構造函數。 –