【发布时间】:2013-09-23 08:05:03
【问题描述】:
我们正在使用 dot-net 使用 OData 服务。
当 odata 服务代码中引发任何异常或任何业务逻辑问题失败时,服务代码会处理该异常或错误,并向 dotnet 使用者返回带有该错误详细信息的新错误对象。
我认为它应该抛出一个异常并且在消费端我应该以我自己的方式处理它,这是一种好方法吗?
你有什么建议?
【问题讨论】:
标签: c# wcf odata wcf-data-services
我们正在使用 dot-net 使用 OData 服务。
当 odata 服务代码中引发任何异常或任何业务逻辑问题失败时,服务代码会处理该异常或错误,并向 dotnet 使用者返回带有该错误详细信息的新错误对象。
我认为它应该抛出一个异常并且在消费端我应该以我自己的方式处理它,这是一种好方法吗?
你有什么建议?
【问题讨论】:
标签: c# wcf odata wcf-data-services
两者都可以。在这两种情况下,您都需要一种特定的方式来传输服务状态和错误信息:
// 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);
【讨论】:
你也可以试试这样的:
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());
}
希望对你有帮助:)
【讨论】: