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 の新しい APIを使用している場合は、独自の ServiceRunner を実装することで一般的に例外を処理できます。古い API では、またはHandleException()から継承するカスタム基本クラスでオーバーライドする必要があります。ServiceBase<T>RestServiceBase<T>

詳細については、この以前の回答を参照してください

于 2012-11-22T17:56:38.647 に答える