2013-09-23 3 views
1

Мы используем услугу OData, используя dot-net.Лучшая практика в OData для исключений

Если какое-либо исключение вызывает код службы odata или проблема с бизнес-логикой не удалась, служебный код обрабатывает это исключение или ошибку и возвращает dotnet-потребителю новый объект ошибки с этой информацией об ошибке.

Является ли это хорошим способом, поскольку я думаю, что он должен бросить исключение, и в конце потребления я должен справиться с этим по-своему.

Каковы ваши предложения?

ответ

1

Оба в порядке. В обеих случаях вам нужен конкретный способ передать статус службы и ошибке информацию:

// First case - the returned object contains status and error info. 
IResponse response = OData.Serve(); 
if (response.Status == Status.Ok) 
    ManageResponse(response); 
else 
    ManageError(response.Status, response.Error); 

// Second case - service rises an exception. 
IResponse response; 
try 
{ 
    response = OData.Serve(); 
    ManageResponse(response); 
} 
catch (ODataException e) 
{ 
    ManageError(e.Status, e.Error); 
} 

// Third case: Service returns correct response or null. 
// In case of error Service contains error info. 
IResponse response = OData.Serve(); 
if (response != null) 
    ManageResponse(response); 
else 
    ManageError(OData.LastError); 
+0

спасибо Miroslav за ваш ответ. – user2463514

+0

Второй случай в порядке. Я реализую только таким образом, но прямо сейчас это происходит только тогда, когда odata будет генерировать исключение. – user2463514

+0

Первый случай: статус ответа всегда в порядке. Когда у службы есть некоторая внутренняя ошибка/исключение, они обрабатывают это исключение и создают один объект, который содержит данные об ошибке и отправляет обратно клиенту. Затем клиент должен прочитать или проанализировать этот объект, чтобы проверить наличие ошибки. Это правильный подход? – user2463514

1

Вы также можете попробовать что-то вроде этого также:

  try 
      { 
       //your Odata query and response code 
      } 
      catch (DataServiceClientException dsce) 
      { 
       logger.WarnFormat("Client Exception, Status Code - {0}", dsce.StatusCode.ToString()); 
      } 
      catch (DataServiceRequestException dsre) 
      { 
       logger.WarnFormat("Request Exception - {0}", dsre.Message); 
      } 
      catch (DataServiceQueryException dsqe) 
      { 
       logger.WarnFormat("Query Exception, Status code - {0}", dsqe.Response.StatusCode.ToString()); 
      } 

Надеется, что это помогает :)

Смежные вопросы