Как обнаружить ошибку, возникшую в конкретной кодовой строке? - PullRequest
1 голос
/ 18 мая 2010

[Пожалуйста, отредактируйте заголовок, если он окажется недостаточно хорошим]

У меня есть код, который запускает XSL-преобразование:

objMemoryStream = new MemoryStream();

xslTransform = new XslCompiledTransform();
xpathXmlOrig = new XPathDocument("E:\\xslt error\\Simulation_of_error\\input.xml");

xslSettings = new XsltSettings();
xslSettings.EnableScript = true;
xslTransform.Load(strXmlQueryTransformPath, xslSettings, new XmlUrlResolver());
xslTransform.Transform(xpathXmlOrig, null, objMemoryStream);
objMemoryStream.Position = 0;
StreamReader objStreamReader = new StreamReader(objMemoryStream);

Метод xslTransform.Load(strXmlQueryTransformPath, xslSettings, new XmlUrlResolver()); является жертвой, которая иногда выходит из строя из-за некоторой проблемы с тайм-аутом.

Я хочу обнаружить сбой этой кодовой строки и выполнить снова, пока она не будет успешно выполнена!

Я пытался использовать «TRY CATCH и WHILE»:

bool flag = true;
do
{
    try
    {
        xslTransform.Load(strXmlQueryTransformPath, xslSettings, new XmlUrlResolver());
        flag = false;
    }
    catch
    {
        flag = true;
    }
} while (flag);

но проблема в том, что "ошибка регистрируется в файле журнала", хорошо. Весь код находится под еще одним оператором try, который, как я подозреваю, записывает в журнал. Это то, чего я не хочу ... Я не хочу, чтобы конечный пользователь знал о сбое этой кодовой строки.

Есть ли способ сделать это?

Появление ошибки совершенно случайно. В первый раз, когда это не удается, я пытаюсь повторить код, что может привести к успешному преобразованию (при следующей попытке)! По этой причине я пришел к выводу, что отзыв метода Load () решит проблему.

Ответы [ 2 ]

1 голос
/ 19 мая 2010

Вы пытались удалить встроенные сценарии и передать объект расширения в преобразование ?

Я думаю, что это, скорее всего, решит проблему.

В противном случае вы должны поймать XsltException и его свойства LineNumber и LinePosition в коде укажите место, где произошло исключение.

Обновление : простой пример написания функции расширения (части объекта расширения), переданной преобразованию, и ее использование в преобразовании XSLT предоставляется здесь .

0 голосов
/ 19 мая 2010

попробуйте использовать одну из перегрузок конструктора. Это позволит вам перейти через ваше преобразование.

//public XslCompiledTransform(bool enableDebug);
var xslTransform = new XslCompiledTransform(true); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...