OData的最佳实践例外情况

时间:2013-09-23 08:05:04

标签: c# wcf odata wcf-data-services

我们正在使用dot-net消费OData服务。

当任何异常抛出odata服务代码或任何业务逻辑问题失败时,服务代码会处理该异常或错误,并返回一个带有该错误详细信息的新错误对象。

这是好的做法,因为我认为它应该抛出一个异常而在消费结束时我应该以我自己的方式处理它。

你有什么建议?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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());
            }

希望有所帮助:)