我正在開發一個我要在IIS上託管的WCF Rest服務。只能在一個地方處理WCF Rest服務異常
現在我正在實施服務合同,並且當我嘗試處理異常時,我發現我在所有方法上都重複了相同的代碼。
這是我的服務合同法之一:
public void DeleteMessage(string message_id)
{
int messageId;
OutgoingWebResponseContext ctx =
WebOperationContext.Current.OutgoingResponse;
if ((message_id == null) || (!Int32.TryParse(message_id, out messageId)) || (messageId < 1))
{
ctx.StatusCode = System.Net.HttpStatusCode.BadRequest;
ctx.StatusDescription = "message_id parameter is not valid";
throw new ArgumentException("DeleteMessage: message_id is not valid", "message_id");
}
try
{
using (var context = new AdnLineContext())
{
Message message = new Message() { MessageId = messageId };
context.Entry(message).State = EntityState.Deleted;
context.SaveChanges();
ctx.StatusCode = System.Net.HttpStatusCode.OK;
}
}
catch (Exception ex)
{
ctx.StatusCode = System.Net.HttpStatusCode.InternalServerError;
ctx.StatusDescription = ex.Message;
ctx.SuppressEntityBody = true;
}
}
在所有的我的方法,我可以拋出一個ArgumentException
或Exception
,並與回報HTTP STATUS CODE
管理。
有什麼辦法可以在全球範圍內捕獲這些異常嗎?
謝謝你完整的答案,但我並不複雜的企業級方案。我只想不重複代碼。謝謝。 – VansFannel
好吧,簡而言之,拋出異常沒有很好的簡單選擇,主要是因爲WCF首先不是非常友好的HTTP。我會在Web API中做所有的事情,花了我兩天的時間從頭開始完全弄清楚 - 少用MVC代碼約定的樣板。 –
這就是我一直在尋找的:http://dotnet.dzone.com/news/wcf-rest-tip-2對不起,我沒有解釋清楚。 – VansFannel