Я запускаю длинный процесс, который обновляет некоторые возможности 1 на 1 в Microsoft Dynamics CRM 4. Иногда это останавливается на полпути с ошибкой: «Основное соединение было закрыто: соединение было неожиданно закрыто». Поскольку это прерывисто, я думаю, что это происходит из-за сетевых сбоев, но не обязательно. Во всех случаях, если я перезапущу процесс (который начинается с того места, где он был остановлен), он начинает снова сразу.Имитировать ошибку «Основное соединение было закрыто: соединение было неожиданно закрыто».
Я написал следующий код, чтобы попытаться справиться с этим сценарием, как я хочу, чтобы это ночной процесс (1 выкл):
int Retries = 0;
bool Ready = false;
while (!Ready && Retries < 5)
{
try
{
using (CrmService service = GetCrmServiceInstance())
{
service.Update(opp);
Ready = true; //break out of the while loop as connection is working.
}
}
catch (SoapException se)
{
Retries++;
if (Retries > 4)
{
throw new Exception("Error occurred updating opportunity " + opp.opportunityid.Value + ". Error: " + se.Detail.InnerXml);
}
}
catch (Exception ex)
{
Retries++;
if (Retries > 4)
{
throw new Exception("Error occurred updating opportunity " + opp.opportunityid.Value + ". Error: " + ex.Message);
}
}
}
Моя теория состоит в том, что если он изначально получает эту ошибку, он повторит попытку сделать обновление и, надеюсь, снова работать. Если количество попыток превышает 4, то выдайте ошибку.
Теперь я хочу протестировать этот код, чтобы убедиться, что он адекватно работает для моих целей. Я попытался запустить длительный процесс (6 часов), чтобы узнать, получаю ли я ошибку, с точками останова в блоках SoapException и Exception, чтобы иметь возможность пройти, если он ломается при выполнении обновления, но это не так. Итак, есть ли способ имитировать эту ошибку, чтобы я мог проверить свой новый код?
Перезапустить пул приложений CRM? Вытянуть сетевой кабель? – stuartd
@stuartd - мое приложение работает на виртуальной машине, поэтому, предположительно, потянув за сетевой кабель, это не вариант. У меня также нет доступа к серверу, на котором crm сидит, чтобы перезапустить пул приложений. Однако, я посмотрю, смогу ли я заставить кого-то сделать это. – sr28
@stuartd - только что получил dba, чтобы перезапустить пул приложений CRM, как вы предполагали, и это, казалось, делало то, что мне нужно. Если вы положите это как ответ, я рад отметить его как правильное. – sr28