Я выполняю серию Caliburn.Micro IResults, возвращая их из метода IEnumerable, вызываемого сообщением действия Caliburn.Micro.Первый IResult вызывает операцию вызова службы WCF RIA.Иногда эта операция завершается неудачно и выдает исключение.Это обрабатывается в IResult, где объект InvokeOperation проверяется на наличие ошибок, я отмечаю ошибку как обработанную и устанавливаю в поле сообщения об ошибке IResult значение ошибки, чтобы я мог восстановить его с клиента.
Проблема заключается в том, чтопо какой-то причине это прерывает выполнение подпрограммы.Я не могу придумать вескую причину, почему, но когда я нахожусь в режиме отладки, VS переходит к server code и вызывает помощника необработанного исключения, сообщающего мне, что было необработанное исключение (duh), исопрограмма никогда не продолжает выполнение других членов IEnumerable.
Вот часть кода.
Вызывается из сообщения действия:
public IEnumerable<IResult> Submit()
{
var register = new RegisterUserResult(Username, Password, Email, _userModel);
yield return register;
if (register.Success)
{
if (RegisterAsTrainer)
yield return new ApplyRoleToUserResult(Username, "Trainer", _userModel);
yield return new NavigateResult(new Uri("/MainPageViewModel", UriKind.Relative));
}
else ErrorMessage = register.ErrorMessage;
}
Кодв DomainService (который иногда генерирует исключение)
[Invoke]
public void CreateUser(string username, string password, string email)
{
Membership.CreateUser(username, password, email);
}
... где Membership - это класс ASP.NET, который я использую для управления членством.
IResult, вызывающийвышеуказанный сервис (некоторые детали опущены для ясности):
public void Execute(ActionExecutionContext context)
{
ErrorMessage = null;
Success = false;
var ctx = new TrainingContext();
ctx.CreateUser(_username, _password, _email, CreateUserCallback, null);
}
private void CreateUserCallback(InvokeOperation invokeOp)
{
if (invokeOp.HasError)
invokeOp.MarkErrorAsHandled();
Completed(this, new ResultCompletionEventArgs
{
Error = invokeOp.Error,WasCancelled = invokeOp.IsCanceled
});
}
IResult.Completed DOES срабатывает, но остальная часть метода никогда не выполняется.Я буквально рву на себе волосы, пожалуйста, помогите мне.