1

我们已经成功实现了 ServiceStack IService<> 接口并让它与 iPhone 通信,但我们不确定实现异常处理和日志记录的最佳方式。

public class AddCarService : IService<AddCar> 
{

    public UnitOfWork UnitOfWork { get; set; }

    public object Execute(AddCar request)
    {
        try
        {
            PersonBo person;
            if (UnitOfWork.PersonService.ValidateSession(request.SessionGuid, out person))
            {
                var car = new CarBo
                {
                    PersonId = person.PersonId,
                    Name = request.Car.Name,
                    RegistrationNumber = request.Car.RegistrationNumber,
                    IsActive = true,
                    IsDeleted = false
                };
                UnitOfWork.CarService.Add(car);
                var cars = UnitOfWork.CarService.GetCarByPersonId(person.PersonId);
                var mobileCars = cars.Select(carBo => new Car { CarId = carBo.CarId, Name = carBo.Name, RegistrationNumber = carBo.RegistrationNumber }).ToList();
                return new GetCarResponse { Cars = mobileCars, Status = ResponseStatus.Ok };
            }
            return new GetCarResponse { Cars = null, Status = ResponseStatus.Unauthorised };
        }
        catch (Exception ex)
        {
            UnitOfWork.Logging.Error("AddCarService", ex);
            return new GetCarResponse { Cars = null, Status = ResponseStatus.Exception };
        }
    }
}

添加 try/catch 会降低性能,因此我们想知道 ServiceStack 框架中是否内置了一个函数来支持我们试图实现的目标,并且仍然向 iPhone 返回格式良好的响应。

4

2 回答 2

1

如果您从继承ServiceBase<T>而不是实现IService<T>,您将免费获得它(返回格式良好的响应),但是如果您查看ServiceBase<T>class,您会发现这是通过将代码包装在 try-catch 块中来完成的。

我不认为你会从 ServiceStack 中得到比这更多的东西。

于 2012-11-22T17:01:46.273 回答
1

如果您使用ServiceStack 的 New API,您可以通过实现自己的 ServiceRunner 来处理异常。使用旧 API,您需要HandleException()在继承自ServiceBase<T>或的自定义基类中进行覆盖RestServiceBase<T>

有关更多详细信息,请参阅此先前的答案

于 2012-11-22T17:56:38.647 回答