もう一度変わった状況:"循環属性グループ参照"
私は与えられたXMLをXSDに対して検証し、検証が失敗したときに例外をスローする機能を持っています。 (関数は、XMLコールを受けるのWebPageから呼び出される)
コール
if (!xmlvld.ValidXmlDoc(X, "", "https://somepathtofile.xsd"))
throw new Exception(xmlvld.ValidationError + "1");
と、検証機能は
/// <summary>
/// This method validates an xml string against an xml schema.
/// </summary>
/// <param name="xml">StringReader containing xml</param>
/// <param name="schemaNamespace">XML Schema Namespace</param>
/// <param name="schemaUri">XML Schema Uri</param>
/// <returns>bool</returns>
public bool ValidXmlDoc(StringReader xml, string schemaNamespace, string schemaUri)
{
// Continue?
if (xml == null || schemaNamespace == null || schemaUri == null)
{
return false;
}
isValidXml = true;
XmlValidatingReader vr;
XmlTextReader tr;
XmlSchemaCollection schemaCol = new XmlSchemaCollection();
schemaCol.Add(schemaNamespace, schemaUri);
try
{
// Read the xml.
tr = new XmlTextReader(xml);
// Create the validator.
vr = new XmlValidatingReader(tr);
// Set the validation tyep.
vr.ValidationType = ValidationType.Auto;
// Add the schema.
if (schemaCol != null)
{
vr.Schemas.Add(schemaCol);
}
// Set the validation event handler.
vr.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
// Read the xml schema.
while (vr.Read())
{
}
vr.Close();
return isValidXml;
}
catch (Exception ex)
{
this.ValidationError = ex.Message;
return false;
}
finally
{
// Clean up...
vr = null;
tr = null;
}
}
非常に単純であり、これが最後の2のために非常によく働いたの両方最近、検証関数は次のメッセージを返すようになりました。
[ValidationError]Circular attribute group reference.[/ValidationError]
私はアプリケーションプールをリサイクルし、同じXMLをもう一度送信すると、XSDも送信されたXMLも変更されていません(私は数秒ごとに同じXMLを送信し、結果をチェックする "ping"プログラムを実行しました)バリデーションにはしばらく時間がかかります(いくつかは数分から数時間です)。
XSDは呼び出し元のページと同じディレクトリにあり、サーバーログにはHTTP/200応答でXSDへの要求が表示されますが、HTTPSをローカルパスに変更しようとしてもエラーは同じです無効なアドレスを指し示すとHTTP/404または無効なパス例外が発生し、XSDファイルの読み取りを試みます)
もう一度リサイクルするとすぐに解決されますが、5分ごとにリサイクルできません。
ありがとうございます! Simon
xmlとxsdのサンプルが役に立ちます。 – Kev
検証をトリガするのは何ですか?これはどのくらいの頻度で発生しますか? –
@Kev - XMLの例ans XSDは、私がアップロードできないと思うものですが、XSDとXMLの両方がうまくいっています。アプリケーションプールをリサイクルした後、うまく動作します。 @James B - 検証は、XMLリクエストが受信されるたびに実行されます。 100回/分 – SimSimY