私は興味深い例外に遭遇しました。私のプロダクションサーバーの1つでは、次のような例外が発生することがあります。。DocumentXPathNavigatorの.Net Null参照例外
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)
ILを開き、各メソッドを調べると、DocumentXPathNavigator => this.documentがnullであることが示唆されます。奇妙なことは、この問題をローカルでテストすることも、テストサーバーでテストすることも決してできないということです。
少し背景があり、これがキーかもしれません... これは、XslCompiledTransform.Transform()に渡されるXmlDocumentをキャッシュするWebアプリケーション(.Net 3.5を実行しています)です。私たちのキャッシングは、分散型キャッシュサーバーを通じて処理されます。 XmlDocumentはシリアル化され、キャッシュされているので、特定のオブジェクトへの参照が存在し続けるべきではありません。これは、暗黙のXmlDocument - > DocumentXPathNavigatorが発生したとき、またはTransform()が実行されているときにどこかの参照が削除されたときに、何かが明示的に設定されないようにするものです。いずれにせよ、私は困惑している。
だから、私は私の質問があると思います:
- は誰が前にこれを見ていますか?
- それを引き起こしている可能性があること、またはそれを処理する方法を知っている人はいますか?
おかげ
EDIT:
さらに、このことを考えた後、理にかなっている唯一のことは、それが競合状態だということです。キャッシングアプライアンスは、アプリケーションがオブジェクトを使用している間、何らかの形でオブジェクトを期限切れにしています。
EDIT/EDIT:
.NET 3.5誰もが同じ例外を有している場合には、上記で参照されassembilies 2.0
.NETバージョンはどれですか? –
入力が間違っているようです。あなたはそれを検証しましたか? –
スタックトレースに従うと、入力は実際にこの時点までに検証されます。それは、それが検証された時点と、この時点までになる時点との間で変更される可能性があります。 – John