2010-08-17 71 views

回答

0

您需要爲此創建自定義例外。 請在這裏閱讀這篇文章:Why Create Custom Exceptions?

你正在開發哪種語言?

如果您需要進一步指導,請添加一些評論。

+0

我在C#開發。但是,我從服務中拋出的例外情況並沒有達到使用該服務的客戶端。 – Martinfy 2010-08-17 11:17:32

0

我不認爲他想知道如何在.NET中拋出/捕獲異常。

他可能想知道如何告訴客戶端使用WCF數據服務時,在服務器(服務)端拋出/捕獲異常時出現了什麼(以及什麼)出錯。

WCF數據服務使用HTTP請求/響應消息,您不能僅從服務向客戶端拋出異常。

3

你可以用這個屬性ServiceBehaviorAttribute裝飾你的服務類,像這樣:

[ServiceBehavior(IncludeExceptionDetailInFaults=true)] 
public class PricingDataService : DataService<ObjectContext>, IDisposable 
{ 
    ... 
} 
10

有你需要做的,以確保在HTTP管道客戶端異常泡沫的幾件事情。

  1. 您必須屬性您DataService類有以下幾點:

    [ServiceBehavior(IncludeExceptionDetailInFaults =真)] 公共類MyDataService:DataService的

  2. 您必須啓用配置詳細的錯誤:

    public static void InitializeService(DataServiceConfiguration config) { config.UseVerboseErro rs = true; }

最好是內扔DataServiceException。 WCF數據服務運行時知道如何將屬性映射到HTTP響應,並始終將其包裝在TargetInvocationException中。

[WebGet] 
public Entity OperationName(string id) 
{ 
    try 
    { 
     //validate param 
     Guid entityId; 
     if (!Guid.TryParse(id, out entityId)) 
      throw new ArgumentException("Unable to parse to type Guid", "id"); 

     //operation code 
    } 
    catch (ArgumentException ex) 
    { 
     throw new DataServiceException(400, "Code", ex.Message, string.Empty, ex); 
    } 
} 

然後,您可以通過重寫HandleException在你的DataService像這樣解開這個客戶端消費者:

/// <summary> 
/// Unpack exceptions to the consumer 
/// </summary> 
/// <param name="args"></param> 
protected override void HandleException(HandleExceptionArgs args) 
{ 
    if ((args.Exception is TargetInvocationException) && args.Exception.InnerException != null) 
    { 
     if (args.Exception.InnerException is DataServiceException) 
      args.Exception = args.Exception.InnerException as DataServiceException; 
     else 
      args.Exception = new DataServiceException(400, args.Exception.InnerException.Message); 
    } 
} 

更多信息,請參見here ...