2009-01-16 41 views
2

我使用Validation Application Block - Enterprise Library來驗證發送到我的WCF服務操作的參數。例如,某些操作需要的參數,要麼是1或6,像這樣:WCF ValidationFault

[OperationContract(Name="GetEmployeesByRegion")] 
[FaultContract(typeof(ValidationFault))] 
List<Employees> GetEmployeesByRegion([DomainValidator(1,6)]int regionId); 

但即確認故障發生時,當服務客戶機調用這一切正常,一個通用的系統.ServiceModel.FaultException被拋出。該消息指示:「此故障的創建者未指定原因。」

現在,我可以在服務cal之前自己檢查參數,並引發自定義錯誤,但似乎使用驗證應用程序塊阻止了基於屬性的參數驗證目的。無論如何要定製驗證錯誤返回的錯誤?我也有可能做一些完全錯誤的事情。我只是希望調用者知道他/她應該在異常消息中傳遞1或6。這可能嗎?

+0

我有同樣的問題,你有沒有找到解決辦法? – Iron 2014-07-02 11:59:29

回答

4

其實是有一個集合,是具有所有你正在尋找消息的故障中存在的:

foreach (ValidationDetail detail in fault.Detail.Details) 
{ 
    ... 
} 
0

因此,這是古老的,但我有同樣的問題,並沒有找到答案。

對我來說,問題是,我添加了[ValidationBehavior]和[FaultContract < ValidationFault>)]屬性我創造了我的客戶的參考服務。爲了得到它的工作,我不得不刷新參考。

其他一些可能的事情來檢查:

1)這是固定在企業圖書館6.我不知道那一個,但已經找到了幾個代碼修復提及對EntLib類似的錯誤問題。確保你使用的是最新版本的EntLib。

2)您正在使用ErrorMessage參數作爲驗證錯誤消息而不是MessageTemplate。