2015-03-20 2 views
0

Я запускаю длинный процесс, который обновляет некоторые возможности 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, чтобы иметь возможность пройти, если он ломается при выполнении обновления, но это не так. Итак, есть ли способ имитировать эту ошибку, чтобы я мог проверить свой новый код?

+0

Перезапустить пул приложений CRM? Вытянуть сетевой кабель? – stuartd

+0

@stuartd - мое приложение работает на виртуальной машине, поэтому, предположительно, потянув за сетевой кабель, это не вариант. У меня также нет доступа к серверу, на котором crm сидит, чтобы перезапустить пул приложений. Однако, я посмотрю, смогу ли я заставить кого-то сделать это. – sr28

+0

@stuartd - только что получил dba, чтобы перезапустить пул приложений CRM, как вы предполагали, и это, казалось, делало то, что мне нужно. Если вы положите это как ответ, я рад отметить его как правильное. – sr28

ответ

1

Одним из способов имитации отказа подключения является перезапуск пула приложений CRM, который по умолчанию является CrmAppPool.

Смежные вопросы