Блок приложения WCF и Validation: невозможно настроить сообщения об ошибках? - PullRequest
4 голосов
/ 13 сентября 2010

При использовании WCF вместе с блоком приложения валидации Enterprise Library 5.0 можно ли настроить сообщения об ошибках, которые отправляются обратно клиенту?

Я добавил атрибут ValidationBehaviour в свой сервисcontract и атрибут 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, как и должно, но вместо того, чтобы иметь сообщение об ошибке и тег, который я определил, она использует некоторые общие значения.Это ошибка или я что-то не так делаю?

1 Ответ

4 голосов
/ 13 сентября 2010

Я думаю, вам нужно использовать свойство MessageTemplate вместо свойства ErrorMessage. Попробуйте:

<Validators.StringLengthValidatorAttribute(1, 3, MessageTemplate:="here's my error", Tag:="551")> _
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...