我们已成功实施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返回一个格式良好的响应。
答案 0 :(得分:1)
如果您继承ServiceBase<T>
而不是实施IService<T>
,则可以免费获得此功能(返回格式良好的回复),但如果您查看ServiceBase<T>
class,您会看到这是通过将代码包装在try-catch块中完成的。
我认为你不会从ServiceStack获得更多。
答案 1 :(得分:1)
如果您使用的是ServiceStack's New API,则可以通过实施自己的ServiceRunner来一般性地处理异常。使用旧API,您需要在继承自HandleException()
或ServiceBase<T>
的自定义基类中覆盖RestServiceBase<T>
。