小编Fil*_*ano的帖子

模式验证错误/ XmlSchemaSet的线程安全性?

下午好,

XML模式验证代码段在开发/问答环境中可以正常工作,但是在Production中产生一些奇怪的验证结果。通常的怀疑是该代码对于线程是不安全的,并且Production场景的额外负担正在清除该错误。

确切的情况如下。考虑要验证的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>
Run Code Online (Sandbox Code Playgroud)

在整整一天的时间里,大约300次执行(> 2M)将产生以下异常:

System.Xml.Schema.XmlSchemaValidationException
未声明“ http://www.w3.org/2000/xmlns/:mssql”属性。

模式验证器似乎抱怨名称空间声明。

代码结构如下:

  • XmlSchemaSet有一个静态实例。
  • XmlSchemaSet实例的初始化是以线程安全的方式完成的。
  • 每个工作线程都使用相同的XmlSchemaSet。
  • 验证发生在XmlSerializer.Deserialize()调用期间,使用带有通过ValidationType.Schema初始化的XmlReaderSettings的XmlReader。

关于什么可能导致验证因名称空间声明而中断的任何想法?

c# thread-safety

5
推荐指数
2
解决办法
1940
查看次数

标签 统计

c# ×1

thread-safety ×1