Pregunta

Estoy usando el Enterprise Library Validación bloque de aplicación para mi servicio WCF. Todo está bien, y los consumidores .NET pueden detectar la excepción FaultException<ValidationFault> para obtener una colección de errores de negocio legibles. Sin embargo, no se ve tan grande para los consumidores non-.Net, especialmente los que van a estar buscando en el mensaje SOAP prima. El texto de SOAP La razón es siempre " El creador de este fallo no especificó una razón. " Esto no es muy útil, ya que es una razón, es especifica bajo el elemento <Detail>, como se muestra en el ejemplo de mensaje de fallo a continuación.

¿Hay alguna forma de cambiar el texto " El creador de este fallo no especificó una razón. " a algo más útil como " Ver ValidationFault Detalles "

<s:Body>
   <s:Fault>
      <s:Code>
         <s:Value>s:Sender</s:Value>
      </s:Code>
      <s:Reason>
         <s:Text xml:lang="en-GB">The creator of this fault did not specify a Reason.</s:Text>
      </s:Reason>
      <s:Detail>
         <ValidationFault xmlns="http://www.microsoft.com/practices/EnterpriseLibrary/2007/01/wcf/validation" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <Details xmlns:b="http://schemas.datacontract.org/2004/07/Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF">
               <b:ValidationDetail>
                  <b:Key i:nil="true"/>
                  <b:Message>Value Validator</b:Message>
                  <b:Tag>request</b:Tag>
               </b:ValidationDetail>
            </Details>
         </ValidationFault>
      </s:Detail>
   </s:Fault>
</s:Body>
¿Fue útil?

Solución

Bueno, parece que la gente no creía que EntLib de éste. He observado que el cambio en el código EntLib tiene que ser y levanté una href="http://entlib.codeplex.com/WorkItem/View.aspx?WorkItemId=23586" rel="nofollow en su sitio CodePlex . Supongo que esto también podría hacerse por cualquier persona como parte del proyecto EntLibContrib , pero parecen estar todavía en el Enterprise biblioteca 3.1, mientras que yo estoy usando 4.1.

Creo que si alguien está desesperado, la solución sería la de descargar el código fuente EntLib, y modificar el método BeforeCall en la clase ValidationParameterInspector (en el espacio de nombres Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF). Aquí es donde se crea el FaultException. Una sobrecarga de este constructor puede especificar el FaultReason.

Otros consejos

¿Cómo es su servicio WCF generando estos defectos?

Cuando nos fijamos en la clase FaultException en WCF, hay muchas maneras que usted puede construir uno de esos - incluyendo algunos constructores cuales le permiten especificar un FaultReason para el error de SOAP.

Marc

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top