4
將WCF與Enterprise Library 5.0的驗證應用程序塊一起使用時,是否可以自定義發送回客戶端的錯誤消息?WCF和驗證應用程序塊:無法自定義錯誤消息?
我已經添加了ValidationBehaviour屬性我的服務合同和FaultContract屬性的操作:
<ServiceContract()> _
<ValidationBehavior()> _
Public Interface IContract
<OperationContract(), FaultContract(GetType(ValidationFault))> _
Function GetCustomers(ByVal criteria As CustomersSearchCriteria) As List(Of Customer)
End Interface
然後,CustomersSearchCriteria裏面我已經添加了驗證屬性:
<Validators.StringLengthValidator(1, 3, ErrorMessage:="here's my error", Tag:="551")> _
Public Property Pin() As String
Get
Return _pin
End Get
Set(ByVal value As String)
_pin = value
End Set
End Property
但是,當使用無效參數調用時,返回的SOAP如下所示:
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring xml:lang="fi-FI">The creator of this fault did not specify a Reason.</faultstring>
<detail>
<ValidationFault xmlns="http://www.microsoft.com/practices/EnterpriseLibrary/2007/01/wcf/validation" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Details xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF">
<a:ValidationDetail>
<a:Key>Pin</a:Key>
<a:Message>The length of the value must fall within the range "1" (Inclusive) - "3" (Inclusive).</a:Message>
<a:Tag>criteria</a:Tag>
</a:ValidationDetail>
</Details>
</ValidationFault>
</detail>
</s:Fault>
該服務應該返回ValidationFault,但它不使用我定義的錯誤消息和標記,而是使用一些通用值。這是一個錯誤還是我做錯了什麼?
Tuzo是絕對正確的。 'ErrorMessage'是由DataAnnotations定義的屬性。 VAB 5.0中的屬性現在繼承自DataAnnotations的屬性,因此也具有此屬性。我不明白他們爲什麼不允許用戶也使用'ErrorMessage'屬性。 – Steven 2010-09-13 20:59:24
@Steven,我同意你的看法--EL 5.0的實現很混亂。我唯一的猜測是他們想要向後兼容。 – 2010-09-13 23:43:37