【发布时间】:2009-09-28 12:23:08
【问题描述】:
下午好,
XML 模式验证 sn-p 在开发/问答环境中运行良好,但在生产环境中产生了一些奇怪的验证结果。通常的怀疑是代码对于线程来说是不安全的,并且生产场景的额外负载正在清除错误。
具体情况如下。考虑要验证的 XML 是:
<mssql:spExecute type="ResultSet" xmlns:mssql="urn:namespace">
<mssql:actor>IPASS</mssql:actor>
<mssql:connection>ConnectionString</mssql:connection>
<mssql:storedProcedure>dbo.RedFox</mssql:storedProcedure>
</mssql:spExecute>
在一整天的过程中,大约 300 次执行(>2M)将产生以下异常:
System.Xml.Schema.XmlSchemaValidationException 未声明“http://www.w3.org/2000/xmlns/:mssql”属性。模式验证器似乎抱怨命名空间声明。
代码结构如下:
- 有一个静态的 XmlSchemaSet 实例;
- XmlSchemaSet 实例的初始化是以线程安全的方式完成的;
- 每个工作线程都使用相同的 XmlSchemaSet;
- 验证发生在 XmlSerializer.Deserialize() 调用期间,使用 XmlReader 和 XmlReaderSettings 初始化 ValidationType.Schema。
对可能导致验证因命名空间声明而窒息的原因有什么想法吗?
【问题讨论】:
标签: c# thread-safety