Я столкнулся с интересным исключением. На одном из моих производственных серверов время от времени я получаю следующее исключение.. Исключение Null Reference в DocumentXPathNavigator
System.NullReferenceException: Object reference not set to an instance of an object.
at System.Xml.DocumentXPathNavigator.get_NameTable()
at System.Xml.Xsl.Runtime.XmlQueryContext.get_DefaultNameTable()
at System.Xml.Xsl.Runtime.XmlQueryRuntime..ctor(XmlQueryStaticData data, Object defaultDataSource, XmlResolver dataSources, XsltArgumentList argList, XmlSequenceWriter seqWrt)
at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlSequenceWriter results)
at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlWriter writer, Boolean closeWriter)
at System.Xml.Xsl.XmlILCommand.Execute(IXPathNavigable contextDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlWriter results)
at System.Xml.Xsl.XslCompiledTransform.Transform(IXPathNavigable input, XsltArgumentList arguments, TextWriter results)
at sftControls.SearchListLandingPage.getHtml(IXPathNavigable document, String Xsl, String headerLinks)
Открытие ПЯ и просматривал каждый метод предполагает, что DocumentXPathNavigator => this.document равна нулю. Странно, что я никоим образом не дублирую эту проблему локально или на наших тестовых серверах.
Немного фона, и это может быть ключ ... Это веб-приложение (работает .Net 3.5), которое кэширует XmlDocument, который передается в XslCompiledTransform.Transform(). Наше кэширование обслуживается через распределенный сервер кеша. XmlDocument сериализуется и кэшируется, поэтому ссылка на конкретный объект не должна продолжаться. Это заставляет меня думать, что либо что-то явно препятствует тому, чтобы этот документ был когда-либо установлен, когда неявный XmlDocument -> DocumentXPathNavigator, или какая-то ссылка где-то удалена, когда выполняется Transform(). В любом случае я недоумеваю.
Так что, я думаю, мои вопросы:
- Кто-нибудь еще видел это раньше?
- Кто-нибудь знает, что может быть причиной этого или как с ним бороться?
Благодаря
EDIT:
После дальнейшего думать об этом, единственное, что будет иметь смысл в том, что это состояние гонки. Устройство кэширования каким-то образом завершает работу объекта, пока приложение использует этот объект.
EDIT/EDIT:
.Net 3.5, на которые ссылаются assembilies выше 2,0
Какой версии .NET? –
Похоже, что вход неверный. Вы подтвердили это? –
Если вы следуете трассировке стека, вход фактически проверяется, прежде чем он когда-либо достигнет этой точки. Возможно, он изменится между тем, когда он будет проверен, и когда он доберется до этого момента. – John