【问题标题】:ServiceStack IService<> Error HandingServiceStack 服务<> 错误处理
【发布时间】:2012-11-23 01:56:38
【问题描述】:

我们已成功实现 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 返回格式良好的响应。

【问题讨论】:

标签: c# web-services servicestack nlog


【解决方案1】:

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

我认为您不会从 ServiceStack 获得更多。

【讨论】:

    【解决方案2】:

    如果您使用的是ServiceStack's New API,您通常可以通过实现自己的 ServiceRunner 来处理异常。使用旧 API,您需要在继承自 ServiceBase&lt;T&gt;RestServiceBase&lt;T&gt; 的自定义基类中覆盖 HandleException()

    看到这个previous answer for more details

    【讨论】:

      猜你喜欢
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多